This script is (IMO) more readable, but the real reason for this change is that it raises an error message when the binary package fails to download. (The shell script silently generated a bogus hash instead, because the shell's `set -e` builtin does not affect commands executing inside a $() context. It seemed just as easy to rewrite the script in Python as to fix that. This change also updates some outdated filename references.
77 lines
2.2 KiB
Python
Executable File
77 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import json
|
|
import os
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
from collections import OrderedDict
|
|
|
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
root_dir = os.path.dirname(script_dir)
|
|
sys.path.append(root_dir)
|
|
|
|
import emsdk # noqa
|
|
|
|
|
|
def version_key(version_string):
|
|
parts = re.split('[.-]', version_string)
|
|
key = [[int(part) for part in parts[:3]], -len(parts), parts[3:]]
|
|
return key
|
|
|
|
|
|
def main(args):
|
|
if subprocess.check_output(['git', 'status', '--porcelain'], cwd=root_dir).strip():
|
|
print('tree is not clean')
|
|
sys.exit(1)
|
|
|
|
release_info = emsdk.load_releases_info()
|
|
new_version = version_key(release_info['aliases']['latest'])[0]
|
|
new_version[-1] += 1
|
|
|
|
new_version = '.'.join(str(part) for part in new_version)
|
|
asserts_hash = None
|
|
if args:
|
|
new_hash = args[0]
|
|
if len(args) > 1:
|
|
asserts_hash = args[1]
|
|
else:
|
|
new_hash = emsdk.get_emscripten_releases_tot()
|
|
print('Creating new release: %s -> %s' % (new_version, new_hash))
|
|
release_info['releases'][new_version] = new_hash
|
|
if asserts_hash:
|
|
asserts_name = new_version + '-asserts'
|
|
release_info['releases'][asserts_name] = asserts_hash
|
|
|
|
releases = [(k, v) for k, v in release_info['releases'].items()]
|
|
releases.sort(key=lambda pair: version_key(pair[0]))
|
|
|
|
release_info['releases'] = OrderedDict(reversed(releases))
|
|
release_info['aliases']['latest'] = new_version
|
|
|
|
with open(os.path.join(root_dir, 'emscripten-releases-tags.json'), 'w') as f:
|
|
f.write(json.dumps(release_info, indent=2))
|
|
f.write('\n')
|
|
|
|
subprocess.check_call(
|
|
[sys.executable, os.path.join(script_dir, 'update_bazel_workspace.py')],
|
|
cwd=root_dir)
|
|
|
|
branch_name = 'version_' + new_version
|
|
|
|
# Create a new git branch
|
|
subprocess.check_call(['git', 'checkout', '-b', branch_name, 'origin/main'], cwd=root_dir)
|
|
|
|
# Create auto-generated changes to the new git branch
|
|
subprocess.check_call(['git', 'add', '-u', '.'], cwd=root_dir)
|
|
subprocess.check_call(['git', 'commit', '-m', new_version], cwd=root_dir)
|
|
print('New release created in branch: `%s`' % branch_name)
|
|
|
|
# Push new branch to origin
|
|
subprocess.check_call(['git', 'push', 'origin', branch_name], cwd=root_dir)
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main(sys.argv[1:]))
|