You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
2.4KB

  1. import glob
  2. import json
  3. import time
  4. import os
  5. import sys
  6. def system(cmd):
  7. if os.system(cmd):
  8. raise Exception(f"Failed command: {cmd}")
  9. def build_mac(repo):
  10. rack_sdk = os.path.abspath("Rack-SDK-mac")
  11. 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}'
  12. make = f'{env} make -j$(nproc) -C {repo}'
  13. system(f'{make} clean')
  14. system(f'{make} dist')
  15. def build_win(repo):
  16. rack_sdk = os.path.abspath("Rack-SDK-win")
  17. env = f'CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ STRIP=x86_64-w64-mingw32-strip RACK_DIR={rack_sdk}'
  18. make = f'{env} make -j$(nproc) -C {repo}'
  19. system(f'{make} clean')
  20. system(f'{make} dist')
  21. def build_lin(repo):
  22. rack_sdk = os.path.abspath("Rack-SDK-lin")
  23. env = f'-e RACK_DIR=/Rack-SDK'
  24. make = f'make -j$(nproc)'
  25. repo_abs = os.path.abspath(repo)
  26. system(f'docker run --rm -v {rack_sdk}:/Rack-SDK -v {repo_abs}:/workdir -w /workdir -u vortico {env} a0b9c87ec456 {make} clean')
  27. system(f'docker run --rm -v {rack_sdk}:/Rack-SDK -v {repo_abs}:/workdir -w /workdir -u vortico {env} a0b9c87ec456 {make} dist')
  28. def move_package(repo, slug):
  29. system('mkdir -p downloads')
  30. system(f'mv {repo}/dist/{slug}-*.zip downloads/')
  31. def delete_package(slug):
  32. system(f'rm -f downloads/{slug}-*.zip')
  33. repos = sys.argv[1:]
  34. force_update = True
  35. if not repos:
  36. force_update = False
  37. repos = glob.glob("repos/*")
  38. built_repos = []
  39. for repo in repos:
  40. slug = os.path.basename(repo)
  41. manifest_filename = "manifests/" + slug + ".json"
  42. with open(manifest_filename, "r") as f:
  43. manifest = json.load(f)
  44. # We need a repoVersion to build
  45. if 'repoVersion' not in manifest:
  46. continue
  47. # Skip if update is not needed
  48. if not force_update and 'repoVersion' in manifest and 'latestVersion' in manifest and manifest['latestVersion'] == manifest['repoVersion']:
  49. continue
  50. # Build repo
  51. try:
  52. build_lin(repo)
  53. move_package(repo, slug)
  54. build_win(repo)
  55. move_package(repo, slug)
  56. build_mac(repo)
  57. move_package(repo, slug)
  58. except Exception as e:
  59. print(e)
  60. input("Enter to proceed")
  61. delete_package(slug)
  62. continue
  63. built_repos.append(slug)
  64. # Update build information
  65. manifest['latestVersion'] = manifest['repoVersion']
  66. manifest['buildTimestamp'] = round(time.time())
  67. manifest['status'] = "available"
  68. with open(manifest_filename, "w") as f:
  69. json.dump(manifest, f, indent=" ")
  70. if built_repos:
  71. print()
  72. print("Built " + ",".join(built_repos))
  73. else:
  74. print("Nothing to build")