From ae68766015b5836ff23c1fe33ccc80ceb5be895a Mon Sep 17 00:00:00 2001 From: Max Gautier Date: Mon, 23 Dec 2024 13:48:58 +0100 Subject: [PATCH] Filter by github results InvalidVersion Containerd use the same repository for releases of it's gRPC API (which we are not interested in). Conveniently, those releases have tags which are not valid version number (being prefixed with 'api/'). This could also be potentially useful for similar cases. The risk of missing releases because of this are low, since it would require that a project issue a new release with an invalid format, then switch back to the previous format (or we miss the fact it's not updating for a long period of time). --- scripts/download_hash.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/scripts/download_hash.py b/scripts/download_hash.py index aa5c45966..4b2a1eee7 100644 --- a/scripts/download_hash.py +++ b/scripts/download_hash.py @@ -13,7 +13,9 @@ from functools import cache import argparse import requests from ruamel.yaml import YAML -from packaging.version import Version +from packaging.version import Version, InvalidVersion + +from typing import Optional CHECKSUMS_YML = "../roles/kubespray-defaults/defaults/main/checksums.yml" @@ -171,11 +173,18 @@ def download_hash(only_downloads: [str]) -> None: } ) response.raise_for_status() + def valid_version(possible_version: str) -> Optional[Version]: + try: + return Version(possible_version) + except InvalidVersion: + return None + github_versions = dict(zip([k + '_checksums' for k in downloads.keys()], [ - {r["tagName"] for r in repo["releases"]["nodes"] - if not r["isPrerelease"] # and r["releaseAssets"]["totalCount"] > 2 - # instead here we need optionnal custom predicate per-component to filter out + { + v for r in repo["releases"]["nodes"] + if not r["isPrerelease"] + and (v := valid_version(r["tagName"])) is not None } for repo in response.json()["data"]["with_releases"] ],