Skip to content

Pin the Tests workflow's runner image and use uv's managed Python - #1576

Merged
MaxGhenis merged 1 commit into
mainfrom
ci-pin-runner-image
Nov 11, 2026
Merged

MaxGhenis merged 1 commit into
mainfrom
ci-pin-runner-image

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Four engine-free (3.14) jobs that started on 2026-11-10 between 22:37 and 23:48 UTC, one each on #779, #1567, #1572 and #1575, each failed one test on an ubuntu-26.04 runner. uv took that image's Python 3.14.4, and test_spawned_workers_score_identically_to_sequential_cli failed, because the head-to-head scorer refuses --worker-max-slices below Python 3.14.7. The same job on an ubuntu-24.04 runner downloaded Python 3.14.10 and passed.

What changes

  • Every job in .github/workflows/test.yml runs on ubuntu-24.04. Each said ubuntu-latest, which names whichever image GitHub assigns.
  • The workflow sets UV_MANAGED_PYTHON=1. uv's help says uv uses a system Python when it holds no managed one, and that this option disables system Pythons. With it, uv takes only a Python it manages, and it downloads one when it holds none.
  • docs/agent-guide.md gains two sentences on the image and the setting, and changelog.d gains one fragment.

Invariant

Every job's runs-on reads ubuntu-24.04, and the workflow's env holds UV_MANAGED_PYTHON: "1". A new test in test_ci_integration_job.py reads both from the workflow with PyYAML. The test fails when I put one job back on ubuntu-latest, and it fails when I delete the variable.

Limits

  • The pin defers the move to ubuntu-26.04. A later pull request moves every job at once and updates the test.
  • No job has run on ubuntu-26.04 with UV_MANAGED_PYTHON=1, so I haven't watched uv download its own Python on that image.
  • select-countries, verify and the ci job's require-results run on the image's own python3, which this pull request leaves alone.

Tests

  • The three CI-plan test files (test_ci_test_plan.py, test_ci_integration_job.py, test_run_engine_test_categories.py): 279 tests pass locally.
  • python3 tools/ci_test_plan.py verify prints verification=ok, verify-workflow prints workflow=ok, and ruff check and ruff format --check pass on the test file.

axiom: n/a: CI infrastructure

🤖 Generated with Claude Code

GitHub placed #779's engine-free (3.14) leg on an ubuntu-26.04 runner on
2026-11-10 (job 130198769545). uv took that image's Python 3.14.4, and
test_spawned_workers_score_identically_to_sequential_cli failed, because the
head-to-head scorer refuses --worker-max-slices below 3.14.7. The same leg of
#1568's run that day ran on ubuntu-24.04, where uv downloaded 3.14.10.

Every job now runs on ubuntu-24.04, and the workflow sets UV_MANAGED_PYTHON=1,
so uv never takes an image's own Python. A test holds both.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review November 11, 2026 02:31
@MaxGhenis
MaxGhenis merged commit 3f46d59 into main Nov 11, 2026
12 checks passed
@MaxGhenis
MaxGhenis deleted the ci-pin-runner-image branch November 11, 2026 02:32
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

I merged this at 897e021. All 12 checks passed on that head, every job on ubuntu-24.04, and two independent Opus 5.5 reviews agreed at it after one correction to the description.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant