| @@ -2,6 +2,10 @@ import glob | |||||
| import json | import json | ||||
| import time | import time | ||||
| import os | import os | ||||
| import sys | |||||
| RACK_SDK = os.path.abspath("Rack-SDK") | |||||
| def system(cmd): | def system(cmd): | ||||
| @@ -9,66 +13,82 @@ def system(cmd): | |||||
| raise Exception(f"Failed command: {cmd}") | raise Exception(f"Failed command: {cmd}") | ||||
| def build_mac(slug): | |||||
| 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 repos/{slug}' | |||||
| 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} clean') | ||||
| system(f'{make} dist') | system(f'{make} dist') | ||||
| def build_win(slug): | |||||
| 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 repos/{slug}' | |||||
| 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} clean') | ||||
| system(f'{make} dist') | system(f'{make} dist') | ||||
| def build_lin(slug): | |||||
| env = f'-e RACK_DIR=../../Rack-SDK' | |||||
| make = f'make -j$(nproc) -C repos/{slug}' | |||||
| system(f'docker run --rm -v $(pwd):/mnt -u vortico {env} a0b9c87ec456 {make} clean') | |||||
| system(f'docker run --rm -v $(pwd):/mnt -u vortico {env} a0b9c87ec456 {make} dist') | |||||
| 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(slug): | |||||
| def move_package(repo, slug): | |||||
| system('mkdir -p downloads') | system('mkdir -p downloads') | ||||
| system(f'mv repos/{slug}/dist/{slug}-*.zip downloads/') | |||||
| system(f'mv {repo}/dist/{slug}-*.zip downloads/') | |||||
| def delete_package(slug): | def delete_package(slug): | ||||
| system(f'rm -f downloads/{slug}-*.zip') | system(f'rm -f downloads/{slug}-*.zip') | ||||
| for filename in glob.glob("manifests/*"): | |||||
| slug = os.path.splitext(os.path.basename(filename))[0] | |||||
| with open(filename, "r") as f: | |||||
| repos = sys.argv[1:] | |||||
| if not repos: | |||||
| repos = glob.glob("repos/*") | |||||
| built_repos = [] | |||||
| for repo in repos: | |||||
| slug = os.path.basename(repo) | |||||
| manifest_filename = "manifests/" + slug + ".json" | |||||
| with open(manifest_filename, "r") as f: | |||||
| manifest = json.load(f) | manifest = json.load(f) | ||||
| print(manifest) | |||||
| # Skip if update is not needed | |||||
| # We need a repoVersion to build | |||||
| if 'repoVersion' not in manifest: | if 'repoVersion' not in manifest: | ||||
| continue | continue | ||||
| if 'latestVersion' in manifest and manifest['latestVersion'] == manifest['repoVersion']: | |||||
| continue | |||||
| if not os.path.exists('repos/' + slug): | |||||
| # Skip if update is not needed | |||||
| if 'repoVersion' in manifest and 'latestVersion' in manifest and manifest['latestVersion'] == manifest['repoVersion']: | |||||
| continue | continue | ||||
| # Build repo | |||||
| try: | try: | ||||
| build_mac(slug) | |||||
| move_package(slug) | |||||
| build_win(slug) | |||||
| move_package(slug) | |||||
| build_lin(slug) | |||||
| move_package(slug) | |||||
| 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: | except Exception as e: | ||||
| print(e) | print(e) | ||||
| input("Enter to proceed") | input("Enter to proceed") | ||||
| delete_package(slug) | delete_package(slug) | ||||
| continue | continue | ||||
| built_repos.append(slug) | |||||
| # Update build information | # Update build information | ||||
| manifest['latestVersion'] = manifest['repoVersion'] | manifest['latestVersion'] = manifest['repoVersion'] | ||||
| manifest['buildTimestamp'] = round(time.time()) | manifest['buildTimestamp'] = round(time.time()) | ||||
| manifest['status'] = "available" | manifest['status'] = "available" | ||||
| with open(filename, "w") as f: | |||||
| with open(manifest_filename, "w") as f: | |||||
| json.dump(manifest, f, indent=" ") | json.dump(manifest, f, indent=" ") | ||||
| print() | |||||
| print("Built " + ",".join(built_repos)) | |||||