Mercurial
diff third_party/emsdk/scripts/create_release.py @ 186:8cf4ec5e2191 hg-web
Fixed merge conflict.
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Fri, 23 Jan 2026 22:38:59 -0800 |
| parents | 8d17f6e6e290 |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/third_party/emsdk/scripts/create_release.py Fri Jan 23 22:38:59 2026 -0800 @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 + +import argparse +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(): + if subprocess.check_output(['git', 'status', '--porcelain'], cwd=root_dir).strip(): + print('tree is not clean') + sys.exit(1) + + parser = argparse.ArgumentParser() + parser.add_argument('-r', '--release-hash') + parser.add_argument('-a', '--asserts-hash') + parser.add_argument('-v', '--new-version') + parser.add_argument('--gh-action', action='store_true') + options = parser.parse_args() + + release_info = emsdk.load_releases_info() + if options.new_version: + new_version = options.new_version + else: + 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 options.release_hash: + new_hash = options.release_hash + asserts_hash = options.asserts_hash + 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 + + if options.gh_action: # For GitHub Actions workflows + with open(os.environ['GITHUB_ENV'], 'a') as f: + f.write(f'RELEASE_VERSION={new_version}') + else: # Local use + # 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())