From 3f06aa808ac2295861ac4616df4938b59929e9d4 Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Tue, 17 Jul 2018 19:55:45 -0400 Subject: [PATCH] Split build scripts into two --- scripts/build_plugin.py | 76 ++++++++++++++++++++++++++++++++++++ scripts/build_updates.py | 84 ++++++++-------------------------------- 2 files changed, 92 insertions(+), 68 deletions(-) create mode 100644 scripts/build_plugin.py diff --git a/scripts/build_plugin.py b/scripts/build_plugin.py new file mode 100644 index 00000000..f6f4dc32 --- /dev/null +++ b/scripts/build_plugin.py @@ -0,0 +1,76 @@ +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 downloads_tmp') + system(f'mv {plugin_dir}/dist/*.zip downloads_tmp/') + + +def delete_stage(): + system(f'rm -rf downloads_tmp') + + +def commit_stage(): + system('mkdir -p downloads') + system('mv downloads_tmp/* downloads/') + delete_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) + commit_stage() + 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) diff --git a/scripts/build_updates.py b/scripts/build_updates.py index 972c7072..798b3d13 100644 --- a/scripts/build_updates.py +++ b/scripts/build_updates.py @@ -1,61 +1,15 @@ +import sys +import os import glob import json import time -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 build_mac(repo): - 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 {repo}' - system(f'{make} clean') - system(f'{make} dist') - +import build_plugin -def build_win(repo): - 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 {repo}' - system(f'{make} clean') - system(f'{make} dist') +built_slugs = [] -def build_lin(repo): - env = f'-e RACK_DIR=/Rack-SDK' - make = f'make -j$(nproc)' - repo_abs = os.path.abspath(repo) - system(f'docker run --rm -v {RACK_SDK}:/Rack-SDK -v {repo_abs}:/workdir -w /workdir -u vortico {env} a0b9c87ec456 {make} clean') - system(f'docker run --rm -v {RACK_SDK}:/Rack-SDK -v {repo_abs}:/workdir -w /workdir -u vortico {env} a0b9c87ec456 {make} dist') - - -def move_package(repo, slug): - system('mkdir -p downloads') - system(f'mv {repo}/dist/{slug}-*.zip downloads/') - - -def delete_package(slug): - system(f'rm -f downloads/{slug}-*.zip') - - - -repos = sys.argv[1:] -force_update = True -if not repos: - force_update = False - repos = glob.glob("repos/*") - -built_repos = [] - -for repo in repos: - slug = os.path.basename(repo) - manifest_filename = "manifests/" + slug + ".json" +for manifest_filename in glob.glob("manifests/*.json"): + slug = os.path.basename(manifest_filename).split('.')[0] with open(manifest_filename, "r") as f: manifest = json.load(f) @@ -63,25 +17,17 @@ for repo in repos: if 'repoVersion' not in manifest: continue # Skip if update is not needed - if not force_update and 'repoVersion' in manifest and 'latestVersion' in manifest and manifest['latestVersion'] == manifest['repoVersion']: + if 'latestVersion' in manifest and manifest['latestVersion'] == manifest['repoVersion']: continue # Build repo - try: - build_lin(repo) - move_package(repo, slug) - build_win(repo) - move_package(repo, slug) - build_mac(repo) - move_package(repo, slug) - except Exception as e: - print(e) - input("Enter to proceed") - delete_package(slug) + plugin_dir = f"repos/{slug}" + success = build_plugin.build(plugin_dir) + if not success: + print(f"{slug} failed") + input() continue - built_repos.append(slug) - # Update build information manifest['latestVersion'] = manifest['repoVersion'] manifest['buildTimestamp'] = round(time.time()) @@ -90,9 +36,11 @@ for repo in repos: with open(manifest_filename, "w") as f: json.dump(manifest, f, indent=" ") + built_slugs.append(slug) + -if built_repos: +if built_slugs: print() - print("Built " + ", ".join(built_repos)) + print("Built " + ", ".join(built_slugs)) else: print("Nothing to build")