Skip to content

tests.yml and release.yml: the full suite and the Python 3.9 jobs run on ubuntu-24.04, since the Ubuntu 26.04 that ubuntu-latest now gives out has no 3.9 for setup-python and runs out of /tmp under the suite (#1094) - #1095

Merged
brettheap merged 4 commits into
mainfrom
l3-1094-py39-runner
Oct 21, 2026

Conversation

@brettheap

@brettheap brettheap commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

The two Python 3.9 jobs and the tests job now run on ubuntu-24.04: neither 3.9 job fails in setup-python on an Ubuntu 26.04 runner, and the full suite does not run out of disk there (round 3, below).

The problem. ubuntu-latest has started giving out Ubuntu 26.04 runners, and setup-python has no Python 3.9 build for them: its manifest lists 3.10 to 3.15 there, and 3.8 to 3.15 for 24.04. Two jobs asked for 3.9 on ubuntu-latest:

What changed.

  • .github/workflows/tests.yml, the package job (:289): runs-on: ubuntu-latest is now runs-on: ubuntu-24.04, with a comment above it (:280-287) saying why: 3.9 is requires-python's floor, and the Ubuntu 26.04 that ubuntu-latest now gives out has no 3.9 build for setup-python.
  • .github/workflows/tests.yml, the tests job (:74): runs-on: ubuntu-latest is now runs-on: ubuntu-24.04, with a comment above it (:65-72) saying why (round 3, below).
  • .github/workflows/release.yml, the install matrix's last row (:908): os: ubuntu-latest is now os: ubuntu-24.04, python: '3.9' as before, with a comment (:903-907) saying why.
  • The other jobs keep their runners: tests-git-bash runs on windows-latest, and in release.yml build asks for 3.12 on ubuntu-latest, which 26.04 has. The package comment says so, and that tests is on ubuntu-24.04 too, for its own reason.
  • tests/test_release_workflow.py: the install-matrix test (:562-569) pins the new row and that the ubuntu-latest rows ask for 3.x alone; the package test (:584-596) pins the job to ubuntu-24.04 and its one 3.9; a new test (:599-608) pins the tests job to ubuntu-24.04; and a new test (:640-658, with its helper setup_python_pairs, :611-637) holds every setup-python step of both workflows to what 26.04 has.
  • tests/test_doctor_legs_members_next.py (:37): a docstring said tests.yml runs the suite on ubuntu-latest alone; it says ubuntu-24.04.

The new test, test_no_setup_python_on_ubuntu_latest_asks_for_a_python_26_04_lacks, is an allow list over tests.yml and release.yml:

  • for every actions/setup-python@ step, each ${{ matrix.<key> }} a strategy.matrix.include row has is filled from that row's key (a job with no matrix is one row), and the values are compared as str(), so an unquoted python-version: 3.9, which the repository's YAML reader makes the float 3.9, is still "3.9";
  • a job whose matrix has any key but include, the standard form (os: [...], python: [...]), fails the helper's assertion, because the test does not expand it, so it cannot pass unchecked;
  • every pair whose runner is ubuntu-latest must ask for 3.x or 3.12;
  • every 3.9 pair must run on ubuntu-24.04;
  • no ${{ may be left unfilled, so a reference an include row does not fill fails the test rather than slipping past it;
  • the two 3.9 jobs (package and the release's install row) must be among the pairs, so the loop cannot pass over nothing.

What reads the row's name. In release.yml, matrix.os is read twice, by the job name (install check (${{ matrix.os }}, Python ${{ matrix.python }}), :880) and by runs-on (:889), and runner.os once, by the Windows-only PowerShell step (:1238). No if:, artifact name, cache key or other step branches on the row. So the new row runs exactly as the old one did, on the 24.04 image ubuntu-latest used to be, and only its job name changes: install check (ubuntu-24.04, Python 3.9). No test, doc or script names that job.

The search. tests/, README.md, docs/ and AGENTS.md name no runner of the two 3.9 jobs, and the one docstring that named the runner of tests, tests/test_doctor_legs_members_next.py:37, is changed (round 3); the only ubuntu-latest mentions in docs/ are the v1.0.0 and v1.1.0 release notes, which record what those releases ran and stay as they are.

Out of scope. requires-python stays >=3.9. Dropping 3.9, past its end of life since October 2025, is Brett Heap's call.

Tests, each file alone under a stub gh, with EMAIL set, at head 99b097fe3c1e unless marked:

  • tests/test_release_workflow.py: 59 passed
  • tests/test_workflow_concurrency.py: 14 passed
  • tests/test_install_sh.py: 399 passed
  • tests/test_repo_hygiene.py: 100 passed
  • tests/test_cli_reference.py: 23 passed
  • pyflakes tests/test_release_workflow.py: no output, as at f464631aa89f; tests/test_doctor_legs_members_next.py (a docstring changed): the same 207 warnings as at f464631aa89f, and its 192 tests collect.
  • Not run again at this head (earlier results): tests/test_release_install_check_children.py 30 passed and tests/test_no_auto_maintenance.py 60 passed at 3df09c6f5d81; tests/test_shape_advisory.py 47 passed and tests/test_openreposhape_package.py 213 passed at 6031bf1b. Round 3 changed tests.yml's runs-on and comments, one new test and one docstring, and none of these reads them.

The pairs. setup_python_pairs() yields eight, sorted, before and after round 3, and diff shows one line changed, the tests pair: ('tests.yml', 'tests', 'ubuntu-latest', '3.x') is now ('tests.yml', 'tests', 'ubuntu-24.04', '3.x').

Probes and mutants, run at 99b097fe3c1e, each restored and checked with cmp:

  • mutant 3 (round 3), the tests job back on ubuntu-latest: test_the_tests_job_runs_the_suite_on_ubuntu_24_04 fails (1 failed, 58 passed); the allow list passes, as tests asks for 3.x;
  • probe A, python-version: 3.9 unquoted on the tests job: with the job on ubuntu-24.04 the file passes (59 passed), correctly, since a 3.9 job belongs on 24.04; with the job also put back on ubuntu-latest the allow list fails on ('tests.yml', 'tests', 'ubuntu-latest', '3.9') and so does the pin test, test_the_tests_job_runs_the_suite_on_ubuntu_24_04 (2 failed, 57 passed), and with the pin test deselected the allow list fails alone (1 failed, 57 passed, 1 deselected), so the unquoted float is still caught;
  • probe B, release.yml's build set to '3.9': the allow list fails on ('release.yml', 'build', 'ubuntu-latest', '3.9') (1 failed, 58 passed);
  • mutant 1, the release row back on ubuntu-latest: the allow list fails on ('release.yml', 'install', 'ubuntu-latest', '3.9'), and test_the_install_check_runs_on_three_systems_and_python_3_9 fails too (2 failed, 57 passed);
  • mutant 2, package back on ubuntu-latest: the allow list fails on ('tests.yml', 'package', 'ubuntu-latest', '3.9'), and test_the_package_job_runs_its_python_3_9_on_ubuntu_24_04 fails too (2 failed, 57 passed);
  • probe C, the tests job on a matrix of the standard form (runs-on: ${{ matrix.os }}, matrix: {os: [ubuntu-latest], python: ['3.9']}, python-version: ${{ matrix.python }}): the helper's assertion fails with ('tests.yml', 'tests', ['os', 'python']), and so does the pin test, since ${{ matrix.os }} is not ubuntu-24.04; with the pin test deselected the helper's assertion fails alone (1 failed, 57 passed, 1 deselected);
  • probe D, the same job on an include row that has os and no python: the ${{ check fails on ('tests.yml', 'tests', 'ubuntu-latest', '${{ matrix.python }}'); probe E, the row {os: ubuntu-latest, python: '3.9'}: the allow list fails on ('tests.yml', 'tests', 'ubuntu-latest', '3.9'), so the row is filled (each 2 failed, 57 passed: the pin test, and the allow list).

Merges. git merge-tree --write-tree of this head (99b097fe3c1e) with origin/main (de75bf02d3f8) is clean (rc 0), and its tree (034caec526d6) is the head's own. With #1092 (l3-1080-unregistered-gitlinks, 83627b229737) it is clean (rc 0), tree 57cb15c3b3cf; #1092 touches shape-doctor.py, tests/test_doctor_plan_overrides.py and tests/test_shape_doctor.py only. No other open PR touches .github/, tests/test_release_workflow.py or tests/test_doctor_legs_members_next.py.

The proof is this PR's own CI run: its tests and package jobs are the two this change moves onto ubuntu-24.04; nothing local runs Actions.

Review round (RV1095, issuecomment-6308584611, READY with no MUST):

  • S1: the 3.9 guard looked for the string "3.9" in tests.yml alone, so an unquoted 3.9, release.yml's build on 3.9 and a runner or Python that a matrix gave all passed; it is now the allow list above over both workflows, which reads a matrix's include rows (a matrix of any other form was still let through until S3, below), and probes A and B and both mutants failed it (round 3 changes probe A, below).
  • S2: the package comment (and this body, and the first commit's message) said "Every other job asks for 3.x or 3.12 ... and stays on ubuntu-latest", which was not true; it now says the sentence under "What changed", and the squash message should use that one. release.yml's comment (:903-907) is true as written and is unchanged: 26.04 lists 3.10 to 3.15 and 24.04 lists 3.8 to 3.15 (read from the manifest again at 05:13Z), and the three rows above ask for 3.x.
  • N1: runner.os is at release.yml:1238 at this head, not :1234.
  • N2: of the release notes, only v1.0.0 and v1.1.0 mention ubuntu-latest, not v1.1.1.

Review round 2 (RV1095d, issuecomment-6308733787, READY with no MUST, one SHOULD and one NIT):

  • S3: the helper expanded include rows only and filled a key a row lacked with the text "None", so the ${{ check never fired on a standard matrix (probe C survived); it now asserts a job's matrix has no key but include (tests/test_release_workflow.py:623-624 at this head) and fills only the keys a row has (:633-636), and probe C fails the file.
  • N3: the package test's docstring said the next test holds "every other job" to what 26.04 has; it now says every job of both workflows on ubuntu-latest (:589-590), and the allow-list test's docstring says what it holds for both matrix forms (:641-647 at this head).

Round 3: the tests job (#1096, filed by lane 3):

Follow-up: #1096 (run the suite on Ubuntu 26.04)

Closes #1094

Lane: openreposhape-3 (openRepoShape-3)

🤖 Generated with Claude Code

Summary by Sourcery

Keep Python 3.9 workflow jobs on Ubuntu 24.04 while validating that all setup-python jobs use versions supported by their runners.

Bug Fixes:

  • Run Python 3.9 packaging and release installation checks on Ubuntu 24.04, avoiding setup-python failures on Ubuntu 26.04 runners.

Enhancements:

  • Add workflow validation covering all setup-python runner and Python-version combinations, including matrix-expanded jobs.

Tests:

  • Update workflow tests to enforce the Ubuntu 24.04 Python 3.9 placement and prevent unsupported Python versions from running on ubuntu-latest.

…4, so the `package` job and the release's 3.9 install check no longer fail in setup-python on an Ubuntu 26.04 runner `ubuntu-latest` gives out (#1094)

`ubuntu-latest` has started giving out Ubuntu 26.04 runners, and setup-python
has no Python 3.9 build for them (3.10 to 3.15 there, 3.8 to 3.15 for 24.04).
The `package` job of tests.yml and the release's install-check row
`{python: '3.9'}` now ask for `ubuntu-24.04`, each with a comment saying why.
Every other job asks for `3.x` or `3.12` and stays on `ubuntu-latest`.
The release row's job name now reads `install check (ubuntu-24.04, Python
3.9)`; nothing else in release.yml reads `matrix.os`, and its one
`runner.os` branch is Windows's. `requires-python` stays `>=3.9`.

tests/test_release_workflow.py pins the install matrix's runners to the new
row, and a new test pins the `package` job to ubuntu-24.04 and no 3.9 job of
tests.yml to `ubuntu-latest`.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@brettheap brettheap added this to the v1.2.0 milestone Oct 21, 2026
@sourcery-ai

sourcery-ai Bot commented Oct 21, 2026

Copy link
Copy Markdown

Reviewer's Guide

This PR updates both Python 3.9 workflow paths to run on ubuntu-24.04 because setup-python does not provide a 3.9 build for the Ubuntu 26.04 image now supplied by ubuntu-latest. It preserves ubuntu-latest for jobs requesting 3.x or 3.12 and adds regression tests covering the release matrix and all tests.yml Python 3.9 jobs.

Flow diagram for workflow runner selection

flowchart TD
    Start[Workflow requests Python version]
    VersionCheck{Python 3.9?}
    PinRunner[Use ubuntu-24.04]
    LatestRunner[Use ubuntu-latest]
    SetupPython[setup-python installs Python]

    Start --> VersionCheck
    VersionCheck -->|yes| PinRunner
    VersionCheck -->|no: 3.x or 3.12| LatestRunner
    PinRunner --> SetupPython
    LatestRunner --> SetupPython
Loading

File-Level Changes

Change Details Files
Pin Python 3.9 execution to Ubuntu 24.04 wherever workflows use it, avoiding setup-python failures on Ubuntu 26.04 while retaining latest runners for compatible Python versions.
  • Changed the tests package job runner to ubuntu-24.04 and documented the setup-python compatibility rationale.
  • Changed the release install-check matrix’s Python 3.9 Linux row to ubuntu-24.04 while leaving 3.x rows on ubuntu-latest.
  • Added workflow tests that enforce the runner/version pairing and prevent Python 3.9 from being requested on ubuntu-latest.
.github/workflows/tests.yml
.github/workflows/release.yml
tests/test_release_workflow.py

Assessment against linked issues

Issue Objective Addressed Explanation
#1094 Run the tests.yml package job, which uses Python 3.9, on Ubuntu 24.04 instead of ubuntu-latest, and document why. ✅
#1094 Run the release workflow’s Python 3.9 install-check row on Ubuntu 24.04 instead of ubuntu-latest, and document why. ✅
#1094 Update workflow tests to enforce the Ubuntu 24.04 runner for these Python 3.9 jobs while leaving unrelated jobs on ubuntu-latest. ✅

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@brettheap

Copy link
Copy Markdown
Contributor Author

(lane openRepoShape-3, 2026-10-21T05:11:37Z) Independent review (RV1095) of head 6031bf1: READY, no MUST. Two SHOULDs for one fix round before this leaves draft; landing waits on tests anyway.

Checked and true:

  • Only two runners move: tests.yml package and release.yml's 3.9 install row, both to ubuntu-24.04. Every other job and row keeps its runner and its Python (parsed on main and head, matrix rows expanded).
  • setup-python's manifest (read 04:39Z): Linux x64 26.04 has 3.10-3.15, 24.04 has 3.8-3.15. 3.9 on 24.04 x64 is 3.9.25. The jobs left on ubuntu-latest ask for 3.x (resolves to 3.15.0) or 3.12 (3.12.15), or for no Python at all (testpypi, pypi).
  • The release row is read only by its job name, runs-on, setup-python and the Windows-only runner.os step (release.yml:1238). Only the check name changes, to install check (ubuntu-24.04, Python 3.9). Nothing names it: no test, doc, script or ruleset. The release gate requires tests alone, and package keeps its name.
  • The error text in the comment matches failed job 119040615170 (image ubuntu-26.04) exactly.
  • Tests at the head, one file at a time under a stub gh: test_release_workflow 57 passed, test_release_install_check_children 30, test_workflow_concurrency 14, test_repo_hygiene 100.
  • Both mutants KILLED (release row back on ubuntu-latest; package back on ubuntu-latest), files restored and checked with cmp.
  • CI: package passed on ubuntu-24.04 (24.04.5, image 20261012.334.1) with CPython 3.9.25. tests-git-bash and SonarCloud passed. tests was still running at 05:09Z, and its actionlint steps had not started.
  • merge-tree with origin/main de75bf0 is clean (tree 659a288b8747). No other open PR touches .github/ or tests/test_release_workflow.py.
  • Body: closingIssuesReferences [1094]; it ends Closes, Lane, robot before Sourcery's usual summary; the only non-ASCII character is the robot.

SHOULD 1, tests/test_release_workflow.py:596-600. The guard looks for the string "3.9" in tests.yml only, so it passes with a 3.9 job on ubuntu-latest:

  • an unquoted python-version: 3.9 on the tests job: the repo's YAML reader makes it the float 3.9; 57 passed;
  • release.yml's build set to '3.9': 57 passed;
  • a job whose runner comes from a matrix is never checked.
    Fix: over both workflows, expand ${{ matrix.os }} and ${{ matrix.python }} from each matrix row, and for every setup-python on ubuntu-latest assert str(python-version) is in {"3.x", "3.12"}. That catches both probes and both mutants.

SHOULD 2, .github/workflows/tests.yml:277-278. "Every other job asks for 3.x or 3.12 ... and stays on ubuntu-latest" is not true as written: tests-git-bash runs on windows-latest, no tests.yml job asks for 3.12 (release.yml's build does), and testpypi and pypi ask for nothing. Suggested: "The other jobs keep their runners: tests here asks for 3.x and release.yml's build for 3.12 on ubuntu-latest, both of which 26.04 has, and tests-git-bash runs on windows-latest." The body and the squash message repeat the sentence; fix those too.

NIT (body only): runner.os is at release.yml:1238 at the head, not :1234. Of the release notes, only v1.0.0 and v1.1.0 mention ubuntu-latest, not v1.1.1.

Lane 3's plan: a short fix round, F1095, takes both SHOULDs and the two body NITs on this branch. Then a short delta review, and the pilot. #1092's pilot is chained behind this one, so package on main's push run stays off the Ubuntu 26.04 runners. If main goes red on package first, this lands as the fix for red main (condition 5 of the fast-refresh ruling).

Lane: openreposhape-3 (openRepoShape-3)

…vers both workflows, an unquoted 3.9 and a matrix's rows, and the `package` comment names the jobs that keep their runners (#1094)

RV1095's two SHOULDs.

tests/test_release_workflow.py: the guard looked for the string "3.9" in
tests.yml alone, so it passed with an unquoted `python-version: 3.9` (the
repo's YAML reader makes that the float 3.9), with release.yml's `build` on
3.9, and with a runner or Python that a matrix gives. It is now an allow
list over both workflows: every setup-python step has `${{ matrix.os }}` and
`${{ matrix.python }}` filled from each `include` row, a job with no matrix
is one row, and every pair on `ubuntu-latest` must ask for `3.x` or `3.12`,
every 3.9 pair must run on `ubuntu-24.04`, and no expression may be left
unfilled. The `package` job's own assertions stay.

tests.yml, the comment on `package`: "Every other job asks for `3.x` or
`3.12` ... and stays on ubuntu-latest" was not true (`tests-git-bash` is on
windows-latest, no tests.yml job asks for 3.12, and testpypi and pypi ask
setup-python for nothing). It now says: the other jobs keep their runners,
`tests` here asks for `3.x` and release.yml's `build` for `3.12` on
ubuntu-latest, both of which 26.04 has, and `tests-git-bash` runs on
windows-latest. The same sentence in the previous commit's message, and in
the pull request body, is this one.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@brettheap

Copy link
Copy Markdown
Contributor Author

(lane openRepoShape-3, 2026-10-21T05:23:20Z) Delta review (RV1095d) of head 3df09c6: READY, no MUST. One new SHOULD.

Checked:

SHOULD, tests/test_release_workflow.py:607 and :613-614. The helper expands matrix include rows only, and fills a key a row lacks with the text "None", so the ${{ rule never fires on a matrix without include. Probe C survived (58 passed): the tests job with runs-on ${{ matrix.os }}, matrix {os: [ubuntu-latest], python: ['3.9']}, and python-version ${{ matrix.python }}. Fix:

  • assert set(matrix) <= {"include"} for every job;
  • replace only the ${{ matrix.<key> }} the row has (for key, value in row.items()).
    I checked this in memory: the same 8 pairs at the head, and probe C is caught.

NIT, tests/test_release_workflow.py:589: "the next test holds every other job of both workflows to what 26.04 has" should say "every job of both workflows on ubuntu-latest", since that is what the next test checks.

Lane 3's plan: one more short round, F1095b, takes S3 and the NIT before the landing. The test's docstring says it covers a runner or a Python that a matrix gives, so the guard must also fail closed on a matrix without include. Probe C must then fail. The same reviewer checks it, then the pilot (key 1095b) runs. Each tests run here takes about an hour, which is the cost of the extra round. #1092's pilot stays chained behind this landing.

Lane: openreposhape-3 (openRepoShape-3)

…x of the standard form instead of passing it unchecked, and its docstrings name what it holds (#1094)

RV1095d's SHOULD (S3) and NIT (N3).

S3: setup_python_pairs() expanded `strategy.matrix.include` rows only, and
filled a key a row lacked with the text "None", so the `${{` check never
fired on a matrix without `include`: a `tests` job with `runs-on: ${{
matrix.os }}`, `matrix: {os: [ubuntu-latest], python: ['3.9']}` and
`python-version: ${{ matrix.python }}` passed. It now asserts that a job's
matrix has no key but `include`, which fails closed on the standard form,
and fills `${{ matrix.<key> }}` from the keys a row has, so a reference a
row does not fill stays in the text and the `${{` check catches it. The
eight pairs at the head are the same.

N3: the `package` test's docstring said the next test holds "every other
job" to what 26.04 has; it holds every job on `ubuntu-latest`, and says so.
The new test's docstring and the helper's say that a runner or Python from
an `include` row is read, and a matrix of the standard form fails.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@brettheap

Copy link
Copy Markdown
Contributor Author

(lane openRepoShape-3, 2026-10-21T05:29:01Z) Delta review 2 (RV1095e) of head f464631: READY, no MUST, no SHOULD.

Checked:

  • The diff 3df09c6..f464631 touches tests/test_release_workflow.py only (+20/-14).
  • S3 is fixed: the helper asserts set(matrix) <= {"include"} (:611-612) and fills only the keys a row has (:621-624).
  • N3 is fixed (:589-590). The docstrings at :600-606 and :629-635 are true.
  • tests/test_release_workflow.py at the head: 58 passed.
  • Probe C (the tests job on a standard matrix, os [ubuntu-latest] x python ['3.9']) is now KILLED: 1 failed, 57 passed, at :611 with ('tests.yml', 'tests', ['os', 'python']). The file was restored and checked with cmp.
  • Body: closingIssuesReferences [1094]; it ends Closes, Lane, robot before Sourcery's summary; the only non-ASCII character is the robot; the Review round 2 lines are true.
  • merge-tree with origin/main is clean (tree 1b274e7b630c, the head's own). Main has not moved from de75bf0.

Optional NIT, no round needed: the matrix assertion at :611 also fires for a job with a standard matrix and no setup-python step. None exists today. Moving it under if steps: would narrow it, in a follow-up if at all.

Lane 3's plan: this head lands as it is, and the optional NIT is left. The pilot (key 1095b, issue arg 1094) has its go now. It waits for tests on f464631, gates the predicted squash over main, then takes the HOLD in lane 3's rule that the first PR green and gated goes first. #1092's pilot starts once this one has LANDED.

Lane: openreposhape-3 (openRepoShape-3)

…04 that `ubuntu-latest` now gives out runs the suite out of disk under pytest's basetemp (#1096)

#1092's `tests` job ran on an `ubuntu-26.04` runner (job 119050702775, image
version 20261012.163.1) and ended `2436 failed, 11382 passed, 380 skipped,
5579 errors in 3048.23s`, with 28325 lines of `[Errno 122] Disk quota
exceeded`, and later `No space left on device`, all under pytest's basetemp,
`/tmp/pytest-of-runner/pytest-0`. It is the image move of #1094, and the job
passed on 24.04, so it is pinned there until the suite runs on 26.04, which
#1096 tracks.

.github/workflows/tests.yml: `tests` is on `ubuntu-24.04`, with a comment
that gives the job, its counts and the quota errors and says it stays until
#1096. The `package` comment said "`tests` here asks for `3.x` ... on
ubuntu-latest", which this makes false; it now says that `tests` is on
ubuntu-24.04 too, for its own reason, that `tests-git-bash` runs on
windows-latest, and that release.yml's `build` asks for `3.12` on
ubuntu-latest, which 26.04 has. The 3.9 reason is as it was.

tests/test_release_workflow.py: a new test holds `tests` on ubuntu-24.04, and
its docstring names #1096 and the quota errors. The pairs
`setup_python_pairs()` yields are the same but for `tests`, from
`ubuntu-latest` to `ubuntu-24.04`, and the allow-list test passes as before.

tests/test_doctor_legs_members_next.py: the docstring said `tests.yml` runs
the suite on ubuntu-latest alone; it says ubuntu-24.04.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

@brettheap brettheap changed the title tests.yml and release.yml: the two Python 3.9 jobs run on ubuntu-24.04, so the package job and the release's 3.9 install check no longer fail in setup-python on an Ubuntu 26.04 runner (#1094) tests.yml and release.yml: the full suite and the Python 3.9 jobs run on ubuntu-24.04, since the Ubuntu 26.04 that ubuntu-latest now gives out has no 3.9 for setup-python and runs out of /tmp under the suite (#1094) Oct 21, 2026
@brettheap

Copy link
Copy Markdown
Contributor Author

(lane openRepoShape-3, 2026-10-21T06:20:01Z) Delta review 3 (RV1095f) of head 99b097f: READY, no MUST, no SHOULD.

Checked:

NIT, .github/workflows/tests.yml:69 and the body's "The failure" line: 28325 is the number of lines saying "Disk quota exceeded". Only 9287 of them carry "[Errno 122]"; the rest are git's "fatal: cannot copy ...: Disk quota exceeded" and "error: copy-fd: write returned: Disk quota exceeded". Say "28325 lines of Disk quota exceeded" if there is another round, and in the squash message either way.

Lane 3's plan:

Lane: openreposhape-3 (openRepoShape-3)

@brettheap
brettheap marked this pull request as ready for review October 21, 2026 07:37
@sourcery-ai

sourcery-ai Bot commented Oct 21, 2026

Copy link
Copy Markdown

Sorry @brettheap, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 10 hours and 43 minutes by commenting @sourcery-ai review. Upgrade to get a review now.

@brettheap
brettheap merged commit 9f1c312 into main Oct 21, 2026
5 checks passed
@brettheap
brettheap deleted the l3-1094-py39-runner branch October 21, 2026 07:37
brettheap pushed a commit that referenced this pull request Oct 21, 2026
…` runs the suite on `ubuntu-latest` again, as it does once `tests` is back there (#1096)

#1095 changed this sentence to `ubuntu-24.04` when it pinned the `tests`
job there. This pull request moves the job back to `ubuntu-latest`, so the
sentence follows it. Nothing else in the file changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant