mirror of
https://github.com/astral-sh/uv
synced 2026-01-21 05:20:09 -05:00
## Summary Add an option to overwrite the list of available Python downloads from a local JSON file by using the environment variable `UV_PYTHON_DOWNLOADS_JSON_URL` as an experimental support for providing custom sources for Python distribution binaries #8015 related #10203 I probably should make the JSON to be fetched from a remote URL instead of a local file. please let me know what you think and I will modify the code accordingly. ## Test Plan ### normal run ``` root@75c66494ba8b:/# /code/target/release/uv python list cpython-3.14.0a4+freethreaded-linux-x86_64-gnu <download available> cpython-3.14.0a4-linux-x86_64-gnu <download available> cpython-3.13.1+freethreaded-linux-x86_64-gnu <download available> cpython-3.13.1-linux-x86_64-gnu <download available> cpython-3.12.8-linux-x86_64-gnu <download available> cpython-3.11.11-linux-x86_64-gnu <download available> cpython-3.10.16-linux-x86_64-gnu <download available> cpython-3.9.21-linux-x86_64-gnu <download available> cpython-3.8.20-linux-x86_64-gnu <download available> cpython-3.7.9-linux-x86_64-gnu <download available> pypy-3.10.14-linux-x86_64-gnu <download available> pypy-3.9.19-linux-x86_64-gnu <download available> pypy-3.8.16-linux-x86_64-gnu <download available> pypy-3.7.13-linux-x86_64-gnu <download available> ``` ### empty JSON file ```sh root@75c66494ba8b:/# export UV_PYTHON_DOWNLOADS_JSON_URL=/code/crates/uv-python/my-download-metadata.json root@75c66494ba8b:/# cat $UV_PYTHON_DOWNLOADS_JSON_URL {} root@75c66494ba8b:/# /code/target/release/uv python list root@75c66494ba8b:/# ``` ### JSON file with valid version ```sh root@75c66494ba8b:/# export UV_PYTHON_DOWNLOADS_JSON_URL=/code/crates/uv-python/my-download-metadata.json root@75c66494ba8b:/# cat $UV_PYTHON_DOWNLOADS_JSON_URL { "cpython-3.11.9-linux-x86_64-gnu": { "name": "cpython", "arch": { "family": "x86_64", "variant": null }, "os": "linux", "libc": "gnu", "major": 3, "minor": 11, "patch": 9, "prerelease": "", "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20240814/cpython-3.11.9%2B20240814-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", "sha256": "daa487c7e73005c4426ac393273117cf0e2dc4ab9b2eeda366e04cd00eea00c9", "variant": null } } root@75c66494ba8b:/# /code/target/release/uv python list cpython-3.11.9-linux-x86_64-gnu <download available> root@75c66494ba8b:/# ``` ### Remote Path ```sh root@75c66494ba8b:/# export UV_PYTHON_DOWNLOADS_JSON_URL=http://a.com/file.json root@75c66494ba8b:/# /code/target/release/uv python list error: Remote python downloads JSON is not yet supported, please use a local path (without `file://` prefix) ``` --------- Co-authored-by: Aria Desires <aria.desires@gmail.com>
43 lines
1.4 KiB
YAML
43 lines
1.4 KiB
YAML
# Sync Python releases and create a pull request.
|
|
#
|
|
# Based on: https://github.com/astral-sh/rye/blob/57b7c089e494138aae29a130afb2e17f447970bf/.github/workflows/sync-python-releases.yml
|
|
name: "Sync Python downloads"
|
|
on:
|
|
workflow_dispatch:
|
|
schedule:
|
|
- cron: "0 0 * * *"
|
|
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
|
|
jobs:
|
|
sync:
|
|
if: github.repository == 'astral-sh/uv'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
- uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5
|
|
with:
|
|
version: "latest"
|
|
enable-cache: true
|
|
- name: Sync Python Releases
|
|
run: |
|
|
uv run -- fetch-download-metadata.py
|
|
uv run -- minify-download-metadata.py
|
|
working-directory: ./crates/uv-python
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: "Create Pull Request"
|
|
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
|
with:
|
|
commit-message: "Sync latest Python releases"
|
|
add-paths: |
|
|
crates/uv-python/download-metadata.json
|
|
crates/uv-python/src/download-metadata-minified.json
|
|
branch: "sync-python-releases"
|
|
title: "Sync latest Python releases"
|
|
body: "Automated update for Python releases."
|
|
base: "main"
|