microsoft-edge: Rewrite update script to use latest version (#219395)

Co-authored-by: Rik Huijzer <t.h.huijzer@rug.nl>
This commit is contained in:
百地 希留耶 2023-03-27 07:48:23 +08:00 committed by GitHub
parent 0ad13637b7
commit 152922233a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 68 additions and 50 deletions

View File

@ -0,0 +1,68 @@
#! /usr/bin/env nix-shell
#! nix-shell -i python3 -p python3Packages.packaging python3Packages.debian
import base64
import gzip
import textwrap
from urllib import request
from debian.deb822 import Packages
from debian.debian_support import Version
def packages():
packages_url = 'https://packages.microsoft.com/repos/edge/dists/stable/main/binary-amd64/Packages'
handle = request.urlopen(packages_url)
return handle
def latest_packages(packages: bytes):
latest_packages: dict[str, Packages] = {}
for package in Packages.iter_paragraphs(packages, use_apt_pkg=False):
name: str = package['Package']
if not name.startswith('microsoft-edge-'):
continue
channel = name.replace('microsoft-edge-', '')
if channel not in latest_packages:
latest_packages[channel] = package
else:
old_package = latest_packages[channel]
if old_package.get_version() < package.get_version(): # type: ignore
latest_packages[channel] = package
return latest_packages
def nix_expressions(latest: dict[str, Packages]):
channel_strs: list[str] = []
for channel, package in latest.items():
print(f"Processing {channel} {package['Version']}")
match = Version.re_valid_version.match(package['Version'])
assert match is not None
version = match.group('upstream_version')
revision = match.group('debian_revision')
sri = 'sha256-' + \
base64.b64encode(bytes.fromhex(package['SHA256'])).decode('ascii')
channel_str = textwrap.dedent(
f'''\
{channel} = import ./browser.nix {{
channel = "{channel}";
version = "{version}";
revision = "{revision}";
sha256 = "{sri}";
}};'''
)
channel_strs.append(channel_str)
return channel_strs
def write_expression():
latest = latest_packages(packages())
channel_strs = nix_expressions(latest)
nix_expr = '{\n' + textwrap.indent('\n'.join(channel_strs), ' ') + '\n}'
with open('default.nix', 'w') as f:
f.write(nix_expr)
write_expression()

View File

@ -1,50 +0,0 @@
#! /usr/bin/env nix-shell
#! nix-shell -i bash -p curl gzip
# To update: ./update.sh > default.nix
index_file=$(curl -sL https://packages.microsoft.com/repos/edge/dists/stable/main/binary-amd64/Packages.gz | gzip -dc)
echo "{"
packages=()
echo "$index_file" | while read -r line; do
if [[ "$line" =~ ^Package:[[:space:]]*(.*) ]]; then
Package="${BASH_REMATCH[1]}"
fi
if [[ "$line" =~ ^Version:[[:space:]]*(.*)-([a-zA-Z0-9+.~]*) ]]; then
Version="${BASH_REMATCH[1]}"
Revision="${BASH_REMATCH[2]}"
fi
if [[ "$line" =~ ^SHA256:[[:space:]]*(.*) ]]; then
SHA256="${BASH_REMATCH[1]}"
fi
if ! [[ "$line" ]]; then
found=0
for i in "${packages[@]}"; do
if [[ "$i" == "$Package" ]]; then
found=1
fi
done
if (( ! $found )); then
channel="${Package##*-}"
name="${Package%-${channel}}"
cat <<EOF
${channel} = import ./browser.nix {
channel = "${channel}";
version = "${Version}";
revision = "${Revision}";
sha256 = "sha256:$(nix-hash --type sha256 --to-base32 ${SHA256})";
};
EOF
fi
packages+=($Package)
Package=""
Version=""
fi
done
echo "}"