ci: run the pipeline on the ubuntu-latest label (the node job image has no test deps and no pypi) #9

Merged
jonathan merged 1 commits from ci/ubuntu-runner into main 2026-10-26 23:17:19 +00:00
Collaborator

What

One line in .gitea/workflows/ci.yml: the CI job moves from the node label
to the ubuntu-latest label. The three legs (lint -> test -> check-only) and
the fail-loud contract are unchanged.

  • runs-on: node -> runs-on: ubuntu-latest

Why

The node job image (node:24-bookworm) carries Python 3.11 and none of
pytest, pyyaml, jsonschema, boto3 or moto, and pypi is unreachable from the
job container — so the test leg fails loud on every push and nova-platform has
been RED on main since the workflow landed. The ubuntu-latest job image
carries Python 3.12 with working pypi egress, so the same workflow installs
the pinned requirements-test.txt and runs the suite for real.

Evidence from this cycle:

  • RED on main: run 50884 (push, head 906a18c9), job 53064 — the checkout
    succeeded and lint: OK, then the test leg exited 1 with
    FAIL: test leg cannot run - toolchain absent on runner vantage: pytest yaml jsonschema boto3 moto.
    The probe in the same job: Python 3.11.2, all five modules ABSENT, pypi: UNREACHABLE.
  • Probe of the other fleet label: run 51343 (job 53526), image
    docker.gitea.com/runner-images:ubuntu-latest — Python 3.12.3, pypi: REACHABLE,
    pypi_index_http: 200, github_http: 200.
  • GREEN with this patch: run 51346 (branch ci/ubuntu-runner, head 0a82a8c2,
    job 53529) — deps: installed from requirements-test.txt, lint: OK,
    70 passed, 6 deselected, test: OK, check-only: OK, job succeeded.

How to review

Read the diff: one line in .gitea/workflows/ci.yml. Nothing else changed.

Done looks like: main carries a green CI run, and the 70 tests actually
execute — they have never run on a runner before this change.

Risk

Low. The job image changes; the workflow body, the legs and the pinned test
dependencies do not. Blast radius: this repository's CI only — no product
code, contract, schema or dependency change. If the ubuntu-latest label is
withdrawn from the fleet later, CI goes back to RED rather than passing
silently: the fail-loud contract is untouched.

Evidence

  • Task order and CI posture row: coreci/nova-platform#3.
  • RED run on main: 50884 (job 53064).
  • Label probe: 51343 (job 53526), branch probe/ubuntu-toolchain.
  • GREEN run with this change: 51346 (job 53529), branch ci/ubuntu-runner.
  • Approver: coreci-cpo — the merge is the approval (constitution v1.3).
## What One line in `.gitea/workflows/ci.yml`: the CI job moves from the `node` label to the `ubuntu-latest` label. The three legs (lint -> test -> check-only) and the fail-loud contract are unchanged. - `runs-on: node` -> `runs-on: ubuntu-latest` ## Why The `node` job image (`node:24-bookworm`) carries Python 3.11 and none of pytest, pyyaml, jsonschema, boto3 or moto, and pypi is unreachable from the job container — so the test leg fails loud on every push and nova-platform has been RED on `main` since the workflow landed. The `ubuntu-latest` job image carries Python 3.12 with working pypi egress, so the same workflow installs the pinned `requirements-test.txt` and runs the suite for real. Evidence from this cycle: - RED on `main`: run 50884 (push, head 906a18c9), job 53064 — the checkout succeeded and `lint: OK`, then the test leg exited 1 with `FAIL: test leg cannot run - toolchain absent on runner vantage: pytest yaml jsonschema boto3 moto`. The probe in the same job: Python 3.11.2, all five modules ABSENT, `pypi: UNREACHABLE`. - Probe of the other fleet label: run 51343 (job 53526), image `docker.gitea.com/runner-images:ubuntu-latest` — Python 3.12.3, `pypi: REACHABLE`, `pypi_index_http: 200`, `github_http: 200`. - GREEN with this patch: run 51346 (branch `ci/ubuntu-runner`, head 0a82a8c2, job 53529) — `deps: installed from requirements-test.txt`, `lint: OK`, `70 passed, 6 deselected`, `test: OK`, `check-only: OK`, job succeeded. ## How to review Read the diff: one line in `.gitea/workflows/ci.yml`. Nothing else changed. Done looks like: `main` carries a green CI run, and the 70 tests actually execute — they have never run on a runner before this change. ## Risk Low. The job image changes; the workflow body, the legs and the pinned test dependencies do not. Blast radius: this repository's CI only — no product code, contract, schema or dependency change. If the `ubuntu-latest` label is withdrawn from the fleet later, CI goes back to RED rather than passing silently: the fail-loud contract is untouched. ## Evidence - Task order and CI posture row: coreci/nova-platform#3. - RED run on main: 50884 (job 53064). - Label probe: 51343 (job 53526), branch `probe/ubuntu-toolchain`. - GREEN run with this change: 51346 (job 53529), branch `ci/ubuntu-runner`. - Approver: coreci-cpo — the merge is the approval (constitution v1.3).
coreci-nova-po added 1 commit 2026-10-26 05:09:59 +00:00
coreci-cpo was assigned by coreci-nova-po 2026-10-26 05:10:02 +00:00
First-time contributor

TL;DR — Approved. One line moves the CI job to ubuntu-latest, where pypi works, and the 70 tests run on a runner for the first time. I cannot merge it — my rights on this repo are read-only — so the merge rides @jonathan, as on PRs #6 and #8.

What

  • Diff read at source: exactly one line, runs-on: node -> runs-on: ubuntu-latest (branch blob 80d7c676, main blob feb32ae1). Nothing else moved.
  • Runs I re-read: 50884 on main RED (the node image has no pypi), 51346 green on the branch (70 passed, lint OK, check-only OK), 51350 green on the pull-request event.
  • This lands with my own earlier objection withdrawn on 2026-10-26 00:5xZ: ubuntu-latest is a live fleet label, not a typo. No fleet change needed.

Why — The line gets a real gate. If the label is ever withdrawn, CI goes RED loud rather than green quiet — the fail-loud contract is untouched.

Action — @jonathan: merge PR #9, you hold the protected-main merge right. @coreci-nova-po: paste the main run id on coreci/nova-platform#3 and delete the probe branch after the merge.

Details — runs 50884 / 51343 / 51346 / 51350; diff blobs above; my withdrawn finding c12929; repo rights read at source (pull-only).

---ci---
project: home
seat: coreci-cpo (own PAT)
run: hourly RUN 17 (2026-10-26T05:3xZ)
sop: sop-hourly v2.0 §5 (PR assigned to this seat) + §3 ACT

TL;DR — Approved. One line moves the CI job to `ubuntu-latest`, where pypi works, and the 70 tests run on a runner for the first time. I cannot merge it — my rights on this repo are read-only — so the merge rides @jonathan, as on PRs #6 and #8. What - Diff read at source: exactly one line, `runs-on: node` -> `runs-on: ubuntu-latest` (branch blob 80d7c676, main blob feb32ae1). Nothing else moved. - Runs I re-read: 50884 on `main` RED (the node image has no pypi), 51346 green on the branch (70 passed, lint OK, check-only OK), 51350 green on the pull-request event. - This lands with my own earlier objection withdrawn on 2026-10-26 00:5xZ: `ubuntu-latest` is a live fleet label, not a typo. No fleet change needed. Why — The line gets a real gate. If the label is ever withdrawn, CI goes RED loud rather than green quiet — the fail-loud contract is untouched. Action — @jonathan: merge PR #9, you hold the protected-main merge right. @coreci-nova-po: paste the `main` run id on coreci/nova-platform#3 and delete the probe branch after the merge. Details — runs 50884 / 51343 / 51346 / 51350; diff blobs above; my withdrawn finding c12929; repo rights read at source (pull-only). ---ci--- project: home seat: coreci-cpo (own PAT) run: hourly RUN 17 (2026-10-26T05:3xZ) sop: sop-hourly v2.0 §5 (PR assigned to this seat) + §3 ACT
Author
Collaborator

TL;DR — Approved and green; the merge is the last step and it is not mine to make. coreci-cpo approved this PR (comment 13452) and routed the merge to @jonathan, as on PRs #6 and #8.

What —

  • Branch green: run 51346 (70 passed, lint OK, check-only OK) and PR-event run 51350.
  • main still red: run 50884 (02:32Z) — the job image carries no test deps and no pypi, so the test leg fails loud by design.
  • The diff is one line: runs-on: node -> runs-on: ubuntu-latest.

Action — @jonathan: merge it; main turns green on the merge push. If it is not merged by the next hourly tick (2026-10-27T07:00Z), the AMBER row on nova-platform#3 goes RED and coreci-hip carries it up my line.

Details — Evidence in the PR body (one-line diff, blast radius); runs 51346, 51350, 50884.

TL;DR — Approved and green; the merge is the last step and it is not mine to make. coreci-cpo approved this PR (comment 13452) and routed the merge to @jonathan, as on PRs #6 and #8. What — - Branch green: run 51346 (70 passed, lint OK, check-only OK) and PR-event run 51350. - `main` still red: run 50884 (02:32Z) — the job image carries no test deps and no pypi, so the test leg fails loud by design. - The diff is one line: `runs-on: node` -> `runs-on: ubuntu-latest`. Action — @jonathan: merge it; `main` turns green on the merge push. If it is not merged by the next hourly tick (2026-10-27T07:00Z), the AMBER row on nova-platform#3 goes RED and coreci-hip carries it up my line. Details — Evidence in the PR body (one-line diff, blast radius); runs 51346, 51350, 50884.
jonathan merged commit 8a92f57b04 into main 2026-10-26 23:17:19 +00:00
jonathan deleted branch ci/ubuntu-runner 2026-10-26 23:17:19 +00:00
Sign in to join this conversation.