From c46ea2796f6a2319fc37da7d409df9ecd0129464 Mon Sep 17 00:00:00 2001 From: Michael Weiss Date: Mon, 2 Aug 2021 11:37:36 +0200 Subject: [PATCH] chromium: update.py: Implement automatic committing of the updates This functionality saves some unnecessary work. (cherry picked from commit e143dc53b23a56621a2da13cf8698bea7521f94a) --- .../networking/browsers/chromium/update.py | 61 +++++++++++++------ 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/pkgs/applications/networking/browsers/chromium/update.py b/pkgs/applications/networking/browsers/chromium/update.py index d6788fa4192..4f9f53bd02a 100755 --- a/pkgs/applications/networking/browsers/chromium/update.py +++ b/pkgs/applications/networking/browsers/chromium/update.py @@ -3,6 +3,7 @@ """This script automatically updates chromium, google-chrome, chromedriver, and ungoogled-chromium via upstream-info.json.""" +# Usage: ./update.py [--commit] import csv import json @@ -22,6 +23,7 @@ DEB_URL = 'https://dl.google.com/linux/chrome/deb/pool/main/g' BUCKET_URL = 'https://commondatastorage.googleapis.com/chromium-browser-official' JSON_PATH = dirname(abspath(__file__)) + '/upstream-info.json' +COMMIT_MESSAGE_SCRIPT = dirname(abspath(__file__)) + '/get-commit-message.py' def load_json(path): @@ -117,6 +119,21 @@ def channel_name_to_attr_name(channel_name): sys.exit(1) +def get_channel_key(item): + """Orders Chromium channels by their name.""" + channel_name = item[0] + if channel_name == 'stable': + return 0 + if channel_name == 'beta': + return 1 + if channel_name == 'dev': + return 2 + if channel_name == 'ungoogled-chromium': + return 3 + print(f'Error: Unexpected channel: {channel_name}', file=sys.stderr) + sys.exit(1) + + def print_updates(channels_old, channels_new): """Print a summary of the updates.""" print('Updates:') @@ -192,21 +209,31 @@ with urlopen(HISTORY_URL) as resp: channels[channel_name] = channel -with open(JSON_PATH, 'w') as out: - def get_channel_key(item): - """Orders Chromium channels by their name.""" - channel_name = item[0] - if channel_name == 'stable': - return 0 - if channel_name == 'beta': - return 1 - if channel_name == 'dev': - return 2 - if channel_name == 'ungoogled-chromium': - return 3 - print(f'Error: Unexpected channel: {channel_name}', file=sys.stderr) - sys.exit(1) - sorted_channels = OrderedDict(sorted(channels.items(), key=get_channel_key)) - json.dump(sorted_channels, out, indent=2) - out.write('\n') +sorted_channels = OrderedDict(sorted(channels.items(), key=get_channel_key)) +if len(sys.argv) == 2 and sys.argv[1] == '--commit': + for channel_name in sorted_channels.keys(): + version_old = last_channels[channel_name]['version'] + version_new = sorted_channels[channel_name]['version'] + if LooseVersion(version_old) < LooseVersion(version_new): + last_channels[channel_name] = sorted_channels[channel_name] + with open(JSON_PATH, 'w') as out: + json.dump(last_channels, out, indent=2) + out.write('\n') + attr_name = channel_name_to_attr_name(channel_name) + commit_message = f'{attr_name}: {version_old} -> {version_new}' + if channel_name == 'stable': + body = subprocess.check_output([COMMIT_MESSAGE_SCRIPT]).decode('utf-8') + prefix = f'chromium: TODO -> {version_new}' + if not body.startswith(prefix): + print("Error: Couldn't fetch the the release notes for the following update:") + print(commit_message) + sys.exit(1) + body = body.removeprefix(prefix) + commit_message += body + subprocess.run(['git', 'add', JSON_PATH], check=True) + subprocess.run(['git', 'commit', '--file=-'], input=commit_message.encode(), check=True) +else: + with open(JSON_PATH, 'w') as out: + json.dump(sorted_channels, out, indent=2) + out.write('\n') print_updates(last_channels, sorted_channels)