From ff3d9a04437902c833ec387b38e8476932a17f06 Mon Sep 17 00:00:00 2001 From: Max Gautier Date: Sat, 21 Dec 2024 16:44:41 +0100 Subject: [PATCH] download: Support for gvisor (part 2) Gvisor releases, besides only being tags, have some particularities: - they are of the form yyyymmdd.p -> this get interpreted as a yaml float, so we need to explicitely convert to string to make it work. - there is no semver-like attached to the version numbers, but the API (= OCI container runtime interface) is expected to be stable (see linked discussion) - some older tags don't have hashs for some archs Link: https://groups.google.com/g/gvisor-users/c/SxMeHt0Yb6Y/m/Xtv7seULCAAJ --- scripts/download_hash.py | 19 ++++++++++++------- scripts/list_releases.graphql | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/scripts/download_hash.py b/scripts/download_hash.py index b1f7656b1..7abc1838b 100644 --- a/scripts/download_hash.py +++ b/scripts/download_hash.py @@ -239,17 +239,22 @@ def download_hash(only_downloads: [str]) -> None: new_versions = { c: {v for v in github_versions[c] - if any(v > version and (v.major, v.minor) == (version.major, version.minor) - for version in [max(minors) for _, minors in groupby(cur_v, lambda v: (v.minor, v.major))]) - # only get: - # - patch versions (no minor or major bump) - # - newer ones (don't get old patch version) + if any(v > version + and ( + (v.major, v.minor) == (version.major, version.minor) + or c.startswith('gvisor') + ) + for version in [max(minors) for _, minors in groupby(cur_v, lambda v: (v.minor, v.major))] + ) + # only get: + # - patch versions (no minor or major bump) (exception for gvisor which does not have a major.minor.patch scheme + # - newer ones (don't get old patch version) } - set(cur_v) for component, archs in data.items() if (c := component.removesuffix('_checksums')) in downloads.keys() # this is only to bound cur_v in the scope - and (cur_v := sorted(Version(k) for k in next(archs.values().__iter__()).keys())) + and (cur_v := sorted(Version(str(k)) for k in next(archs.values().__iter__()).keys())) } def get_hash(component: str, version: Version, arch: str): @@ -280,7 +285,7 @@ def download_hash(only_downloads: [str]) -> None: data[c] = {arch : {v : versions[v] for v in sorted(versions.keys(), - key=Version, + key=lambda v: Version(str(v)), reverse=True) } for arch, versions in data[c].items() diff --git a/scripts/list_releases.graphql b/scripts/list_releases.graphql index 6a2d225f1..fb060db26 100644 --- a/scripts/list_releases.graphql +++ b/scripts/list_releases.graphql @@ -19,7 +19,7 @@ query($repoWithReleases: [ID!]!, $repoWithTags: [ID!]!) { ... on Repository { nameWithOwner - refs(refPrefix: "refs/tags/", last: 100) { + refs(refPrefix: "refs/tags/", last: 25) { nodes { name }