|
- 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')
-
-
- 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')
-
-
- 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:]
- 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)
-
- # We need a repoVersion to build
- if 'repoVersion' not in manifest:
- continue
- # Skip if update is not needed
- if 'repoVersion' in manifest and '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)
- continue
-
- built_repos.append(slug)
-
- # 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=" ")
-
-
- if built_repos:
- print()
- print("Built " + ",".join(built_repos))
- else:
- print("Nothing to build")
|