From e0504fc2f88febdc45fdfb82851f672f87e7e797 Mon Sep 17 00:00:00 2001 From: Ivan Pozdeev Date: Sun, 22 Dec 2024 20:43:04 +0300 Subject: [PATCH] add_miniforge.py: Support different Python version lines, improvements * report more progress * don't download SHA files for unsupported architectures --- plugins/python-build/scripts/add_miniforge.py | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/plugins/python-build/scripts/add_miniforge.py b/plugins/python-build/scripts/add_miniforge.py index bd2c91cf..54f06e08 100755 --- a/plugins/python-build/scripts/add_miniforge.py +++ b/plugins/python-build/scripts/add_miniforge.py @@ -11,7 +11,6 @@ logger = logging.getLogger(__name__) logging.basicConfig(level=os.environ.get('LOGLEVEL', 'INFO')) MINIFORGE_REPO = 'conda-forge/miniforge' -PYTHON_VERSION = '310' DISTRIBUTIONS = ['miniforge', 'mambaforge'] install_script_fmt = """ @@ -38,7 +37,7 @@ here = Path(__file__).resolve() out_dir: Path = here.parent.parent / "share" / "python-build" def download_sha(url): - logger.debug('Downloading SHA file %(url)s', locals()) + logger.info('Downloading SHA file %(url)s', locals()) tup = tuple(reversed(requests.get(url).text.replace('./', '').rstrip().split())) logger.debug('Got %(tup)s', locals()) return tup @@ -56,7 +55,7 @@ def create_spec(filename, sha, url): 'filename': filename, 'sha': sha, 'url': url, - 'py_version': PYTHON_VERSION, + 'py_version': py_version(version), 'flavor': flavor, 'os': os, 'arch': arch, @@ -67,13 +66,29 @@ def create_spec(filename, sha, url): return spec +def py_version(release): + """Suffix for `verify_pyXXX` to call in the generated build script""" + release_line = tuple(int(part) for part in release.split(".")[:2]) + # current version: mentioned under https://github.com/conda-forge/miniforge?tab=readme-ov-file#miniforge3 + # transition points: + # https://github.com/conda-forge/miniforge/blame/main/Miniforge3/construct.yaml + # look for "- python " in non-pypy branch and which tag the commit is first in + if release_line >= (24,5): + # yes, they jumped from 3.10 directly to 3.12 + # https://github.com/conda-forge/miniforge/commit/bddad0baf22b37cfe079e47fd1680fdfb2183590 + return "312" + if release_line >= (4,14): + return "310" + raise ValueError("Bundled Python version unknown for release `%s'"%release) + def supported(filename): return ('pypy' not in filename) and ('Windows' not in filename) def add_version(release): tag_name = release['tag_name'] download_urls = { f['name']: f['browser_download_url'] for f in release['assets'] } - shas = dict([download_sha(url) for (name, url) in download_urls.items() if name.endswith('.sha256') and tag_name in name]) + # can assume that sha files are named similar to release files so can also check supported(on their names) + shas = dict([download_sha(url) for (name, url) in download_urls.items() if name.endswith('.sha256') and supported(os.path.basename(name)) and tag_name in name]) specs = [create_spec(filename, sha, download_urls[filename]) for (filename, sha) in shas.items() if supported(filename)] for distribution in DISTRIBUTIONS: