Browse Source

Add revisions of scripts over the last few months.

v1
Andrew Belt 5 years ago
parent
commit
ddec537c58
5 changed files with 62 additions and 141 deletions
  1. +50
    -0
      scripts/add_package.py
  2. +10
    -1
      scripts/build.py
  3. +0
    -69
      scripts/build_plugin.py
  4. +0
    -70
      scripts/build_updates.py
  5. +2
    -1
      scripts/update_builds.py

+ 50
- 0
scripts/add_package.py View File

@@ -0,0 +1,50 @@
import sys
import json
import os
import glob
import zipfile
import shutil
import build


PACKAGES_DIR = "../packages"
MANIFESTS_DIR = "manifests"
plugin_packages = sys.argv[1:]
slugs = set()


for package_src in plugin_packages:
# Open ZIP
z = zipfile.ZipFile(package_src)
manifest_src = [f for f in z.namelist() if f.endswith("/plugin.json")][0]

# Read manifest
with z.open(manifest_src) as f:
manifest = json.load(f)

# Review manifest
print(json.dumps(manifest, indent=" "))
input()

# Write manifest
slug = os.path.split(manifest_src)[0]
manifest_dest = os.path.join(MANIFESTS_DIR, slug + ".json")
with open(manifest_dest, "w") as f:
json.dump(manifest, f, indent=" ")

# Move package
package_dest = os.path.join(PACKAGES_DIR, os.path.basename(package_src))
shutil.move(package_src, package_dest)
build.system(f"touch '{package_dest}'")

slugs.add(slug)


# Upload packages
build.system(f"cd {PACKAGES_DIR} && make upload")

# Commit repository
build.system("git add manifests")
slugs_list = ", ".join(slugs)
build.system(f"git commit -m 'Update manifest for {slugs_list}'")
build.system("git push")

+ 10
- 1
scripts/build.py View File

@@ -27,43 +27,52 @@ def delete_stage():


def build_mac(plugin_dir):
print(f"Building {plugin_dir} for mac")
env = f'CC=x86_64-apple-darwin15-clang CXX=x86_64-apple-darwin15-clang++-libc++ STRIP=x86_64-apple-darwin15-strip RACK_DIR={RACK_SDK}'
make = f'{env} make -j$(nproc) -C {plugin_dir}'
system(f'{make} clean')
system(f'{make} cleandep')
system(f'{make} dep')
system(f'{make} dist')
stage_package(plugin_dir)
system(f'{make} clean')
print(f"Built {plugin_dir} for mac")


def build_win(plugin_dir):
print(f"Building {plugin_dir} for win")
env = f'CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ STRIP=x86_64-w64-mingw32-strip RACK_DIR={RACK_SDK}'
make = f'{env} make -j$(nproc) -C {plugin_dir}'
system(f'{make} clean')
system(f'{make} cleandep')
system(f'{make} dep')
system(f'{make} dist')
stage_package(plugin_dir)
system(f'{make} clean')
print(f"Built {plugin_dir} for win")


def build_lin(plugin_dir):
print(f"Building {plugin_dir} for lin")
make = f'make -j$(nproc)'
plugin_abs = os.path.abspath(plugin_dir)
# TODO Make this Docker image publicly available
# It's essentially just Ubuntu 16.04 with plugin build dependencies installed, the workdir, and a user account set up so it matches my own machine's UID to solve file permissions issues.
docker = f'docker run --rm -v {RACK_SDK}:/Rack-SDK -v {plugin_abs}:/workdir -w /workdir -u vortico -e RACK_DIR=/Rack-SDK rackplugin:1'
system(f'{docker} {make} clean')
system(f'{docker} {make} cleandep')
system(f'{docker} {make} dep')
system(f'{docker} {make} dist')
stage_package(plugin_dir)
system(f'{docker} {make} clean')
print(f"Built {plugin_dir} for lin")


def build(plugin_dir):
try:
build_lin(plugin_dir)
build_win(plugin_dir)
build_mac(plugin_dir)
build_win(plugin_dir)
move_stage()
finally:
delete_stage()


+ 0
- 69
scripts/build_plugin.py View File

@@ -1,69 +0,0 @@
import os
import sys


RACK_SDK = os.path.abspath("Rack-SDK")


def system(cmd):
if os.system(cmd):
raise Exception(f"Failed command: {cmd}")


def stage_package(plugin_dir):
system('mkdir -p stage')
system(f'mv {plugin_dir}/dist/*.zip stage/')


def delete_stage():
system(f'rm -rf stage')


def build_mac(plugin_dir):
env = f'CC=x86_64-apple-darwin15-clang CXX=x86_64-apple-darwin15-clang++-libc++ STRIP=x86_64-apple-darwin15-strip RACK_DIR={RACK_SDK}'
make = f'{env} make -j$(nproc) -C {plugin_dir}'
system(f'{make} clean')
system(f'{make} dist')
stage_package(plugin_dir)
system(f'{make} clean')


def build_win(plugin_dir):
env = f'CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ STRIP=x86_64-w64-mingw32-strip RACK_DIR={RACK_SDK}'
make = f'{env} make -j$(nproc) -C {plugin_dir}'
system(f'{make} clean')
system(f'{make} dist')
stage_package(plugin_dir)
system(f'{make} clean')


def build_lin(plugin_dir):
env = f'-e RACK_DIR=/Rack-SDK'
make = f'make -j$(nproc)'
plugin_abs = os.path.abspath(plugin_dir)
# TODO Make this Docker image publicly available
# It's essentially just Ubuntu 16.04 with plugin build dependencies installed, the workdir, and a user account set up so it matches my own machine's UID to solve file permissions issues.
docker = f'docker run --rm -v {RACK_SDK}:/Rack-SDK -v {plugin_abs}:/workdir -w /workdir -u vortico {env} a0b9c87ec456'
system(f'{docker} {make} clean')
system(f'{docker} {make} dist')
stage_package(plugin_dir)
system(f'{docker} {make} clean')


def build(plugin_dir):
try:
build_lin(plugin_dir)
build_win(plugin_dir)
build_mac(plugin_dir)
except Exception as e:
delete_stage()
print(e)
return False
return True


if __name__ == "__main__":
plugin_dir = sys.argv[1]
if not plugin_dir:
raise "No plugin_dir given"
build(plugin_dir)

+ 0
- 70
scripts/build_updates.py View File

@@ -1,70 +0,0 @@
import sys
import os
import glob
import json
import time
import build_plugin


build_plugin.system("git pull")
build_plugin.system("git submodule update --init --recursive")


plugin_dirs = sys.argv[1:]

if not plugin_dirs:
plugin_dirs = glob.glob("repos/*")

built_slugs = []

for plugin_dir in plugin_dirs:
slug = os.path.basename(plugin_dir)
manifest_filename = f"manifests/{slug}.json"
with open(manifest_filename, "r") as f:
manifest = json.load(f)

# We need a repoVersion to build
if 'repoVersion' not in manifest:
continue
# Skip if update is not needed
if 'latestVersion' in manifest and manifest['latestVersion'] == manifest['repoVersion']:
continue

# Build repo
success = build_plugin.build(plugin_dir)
if not success:
print(f"{slug} failed")
input()
continue

build_plugin.system('mv -vi stage/* ../packages/')
build_plugin.delete_stage()

# Update build information
manifest['latestVersion'] = manifest['repoVersion']
manifest['buildTimestamp'] = round(time.time())
manifest['status'] = "available"

with open(manifest_filename, "w") as f:
json.dump(manifest, f, indent=" ")

built_slugs.append(slug)
os.system("qutebrowser \"https://github.com/VCVRack/library/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+" + slug + "\" &")



if not built_slugs:
raise Exception("Nothing to build")


# Upload packages
build_plugin.system("cd ../packages && make upload")

# Commit repository
build_plugin.system("git add -u")
build_plugin.system("git commit -m 'Update builds'")
build_plugin.system("git push")


print()
print("Built " + ", ".join(built_slugs))

+ 2
- 1
scripts/update_builds.py View File

@@ -67,7 +67,8 @@ build.system("cd ../packages && make upload")

# Commit repository
build.system("git add manifests")
build.system("git commit -m 'Update builds'")
built_slugs_list = ", ".join(built_slugs)
build.system(f"git commit -m 'Update build for {built_slugs_list}'")
build.system("git push")




Loading…
Cancel
Save