diff --git a/scripts/create_release.py b/scripts/create_release.py new file mode 100755 index 0000000000..b84a43284f --- /dev/null +++ b/scripts/create_release.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 + +import json +import os +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_to_list(version_string): + return [int(part) for part in version_string.split('.')] + + +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_to_list(release_info['latest']) + new_version[-1] += 1 + branch_name = 'version_%s' % '_'.join(str(part) for part in new_version) + + # Create a new git branch + subprocess.check_call(['git', 'checkout', '-b', branch_name], cwd=root_dir) + + new_version = '.'.join(str(part) for part in new_version) + new_hash = emsdk.get_emscripten_releases_tot() + print('Creating new release: %s -> %s' % (new_version, new_hash)) + release_info['releases'][new_version] = new_hash + releases = [(k, v) for k, v in release_info['releases'].items()] + releases.sort(key=lambda pair: version_to_list(pair[0])) + + release_info['releases'] = OrderedDict(reversed(releases)) + release_info['latest'] = new_version + + with open(os.path.join(root_dir, 'emscripten-releases-tags.txt'), 'w') as f: + f.write(json.dumps(release_info, indent=2)) + f.write('\n') + + subprocess.check_call(os.path.join(script_dir, 'update_bazel_workspace.sh'), 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 relase created in branch: `%s`' % branch_name) + + return 0 + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:]))