CI: every job downloads a CPython interpreter, and that download is a recurring single point of failure
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 55/100
調査の方向性
template/.github/workflows/tests.yml.jinja、nightly.yml.jinja、commit-message.yml.jinja から始め、次に .github/workflows にある対応するファイルと比較します。一覧にある uv python install の各出現箇所を確認し、Python の完全なマトリクスを、提案されている runner 提供のインタープリターと照合します。完了とは、ワークフローの同等性が維持され、これらのジョブで CPython のダウンロードに依存しなくなることを意味します。
索引モデルが issue の本文から書いたものです。
説明
What happens
Every CI job in the template, and therefore in all seven generated projects, begins with a step that downloads a CPython interpreter:
- name: Set up Python
run: uv python install ${{ matrix.python-version }}
uv python install fetches a build from the astral-sh/python-build-standalone GitHub release. When that download fails, the job dies before running a single test, and the PR goes red for a reason unrelated to its contents.
Over roughly twelve hours on 2026-08-12/13 this failed repeatedly, on main and on four separate pull requests, always at the same step:
error: Failed to install cpython-3.12.12-linux-x86_64-gnu
Caused by: Request failed after 3 retries
Caused by: Failed to download https://github.com/astral-sh/python-build-standalone/releases/download/.../cpython-3.12.12+...-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz
Caused by: http2 error
Caused by: stream error received: refused stream before processing any application logic
It also appeared as 503 Service Unavailable and curl: (56) Connection died. It hit ubuntu, macOS and Windows runners, and every Python version in the matrix. uv already retries three times internally, and that was not enough.
The same outage took out other GitHub release downloads in the same window (the gitleaks install step, and Read the Docs' asdf install uv), so the cause is upstream rather than anything in this repo. The point of this issue is that our workflows put that download on the critical path when they do not have to.
Why it is worth fixing rather than re-running
- It is not rare. Five re-runs in one session, and each costs a full matrix.
- It is indistinguishable at a glance from a real failure. Every occurrence needs someone to open the job log and read which step died before they know whether to trust the red.
- It scales with the fleet: ten
uv python installsteps in the template'stests.ymlalone, times eight repositories. - The runner images already ship the interpreters we ask for.
actions/setup-pythonresolves common versions from the runner's tool cache with no network download at all.
Affected files
template/.github/workflows/:
tests.yml.jinja— 8 occurrences (lines 56, 91, 136, 193, 223, 252, 325, 358)nightly.yml.jinja— 1 (line 44)commit-message.yml.jinja— 1 (line 52)
and the same shape in this repository's own .github/workflows/{tests,nightly,commit-message}.yml, which must be kept in parity.
Options
actions/setup-pythonfor the interpreter, uv for everything else. Replace theuv python installstep withactions/setup-python, and setUV_PYTHON_PREFERENCE=only-systemso uv uses it rather than fetching its own. Versions present in the runner tool cache then need no download.- Keep
uv python installand add a retry wrapper. Smaller change, but it makes a bad minute into a slow minute rather than removing the dependency, and uv already retries three times. - Do nothing and re-run. The status quo. Worth stating explicitly, because the cost is real but bounded.
Option 1 is the one that removes the failure mode. It also needs care: setup-python and uv python install do not resolve versions identically (patch pinning, free-threaded builds, and versions newer than the runner image differ), so this should be measured on the full matrix before it fans out.
Not in scope
The astral-sh/setup-uv step that installs uv itself, and the pinned # renovate: versions on it. Those are a separate download and have not been the failing step.
- 主要言語
- Python
- スター
- 5
- フォーク
- 1
- 平均マージ
- 15時間 43分
- マージ済み PR(30日)
- 47
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドなし
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
stateful-y/python-package-copier のほかの issue
-
bug nightly-build-failure
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
stateful-y/python-package-copier#442 ·
メンテナーはふだん 1 日以内に返信
-
Dependency Dashboardオープン
難易度 4/5 3〜5日 初心者へのやさしさ 15/100
stateful-y/python-package-copier#236 ·
メンテナーはふだん 1 日以内に返信
stateful-y/python-package-copier の issue をすべて見る
似ている issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 80/100
521xueweihan/HelloGitHub#4063 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
Vanilla-OS/apx-gui#112 ·
-
Devstral and Voxtral: section 5 fails in us-east-1 with 400 "Model does not support audio modality"オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
aws-samples/sample-per-model-bedrock#409 ·
メンテナーはふだん 1 日以内に返信
-
DuckDB 2.0 breaks to_pyarrow_batches対応中かも @DG47 が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
ibis-project/ibis#12196 ·
メンテナーはふだん 1 日以内に返信