Browse Source

Split build scripts into two

pull/514/head
Andrew Belt 6 years ago
parent
commit
3f06aa808a
2 changed files with 92 additions and 68 deletions
  1. +76
    -0
      scripts/build_plugin.py
  2. +16
    -68
      scripts/build_updates.py

+ 76
- 0
scripts/build_plugin.py View File

@@ -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)

+ 16
- 68
scripts/build_updates.py View File

@@ -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")

Loading…
Cancel
Save