Skip to content

fix(ci): three stale action pins, a closed-issue citation, and two guards to catch both recurring - #15347

Merged
mrveiss merged 9 commits into
Dev_new_guifrom
issue-15332-ci-actions
Aug 31, 2026
Merged

mrveiss merged 9 commits into
Dev_new_guifrom
issue-15332-ci-actions

Conversation

@mrveiss

@mrveiss mrveiss commented Aug 31, 2026 •

Copy link
Copy Markdown
Owner

Thinking Path

Ground-truthed all three issues against the current tree before touching anything, since the task warned the bodies might be stale:

What Changed

File Change
.github/actions/setup-python-suite/action.yml:155 actions/cache@v4 → @v6
.github/actions/setup-python-ci/action.yml:176 actions/cache@v4 → @v6
.github/workflows/auto-merge-base-into-parked-branches.yml:79 actions/checkout@v4 → @v7
.github/workflows/code-quality.yml:500,503,511,516 GH#7105 → GH#15345 (new issue tracking the actual mypy backlog; #7105 tracked wiring mypy in, not the errors it found)
repo_tests/workflow_action_version_regression_test.py (new) #15332 AC4: fails when a tag-pinned action drifts below the version standard elsewhere in the repo; fails when a SHA-pinned action lacks a readable # vX.Y.Z comment. Deliberately does not cross-check SHA-pinned versions against each other — docker/login-action, docker/build-push-action, and sigstore/cosign-installer are genuinely pinned to different releases in different workflows today, pre-dating this change, and resolving that is out of scope.
repo_tests/workflow_closed_reference_guard_test.py (new) #15333 AC4: fails when a tracked ... #N citation resolves (via gh api graphql, batched) to a closed issue/PR. Skips visibly via pytest.skip when gh is unavailable or unauthenticated. Vacuity floor of 3 distinct citations. Carries a two-entry, reasoned exemption for the newly discovered #5263/#14371 citations, pointing at #15346.

New issues filed: #15345 (mypy suppression backlog, replaces #7105 as the citation target), #15346 (two more closed-citation instances found while building the guard, out of this PR's scope to fix).

Verification

What the issues claimed that turned out false / already resolved

Model Used

Claude Sonnet 5 (model ID: claude-sonnet-5)

Refs #15332 — the three named Node-20 pins are fixed and the SHA-comment invariant is now enforced, but cross-checking SHA-pinned versions against each other is deliberately out of scope (three actions are pinned to genuinely different releases today; picking a canonical one needs an owner decision). Also Refs #15333, #15252.

…n, and guard against both recurring (#15332, #15333, #15252)

- Bump the two composite-action `actions/cache@v4` pins and one
  `actions/checkout@v4` workflow pin to the versions already standard
  everywhere else in the repo (#15332).
- Add repo_tests/workflow_action_version_regression_test.py: fails when a
  tag-pinned action drifts below the version used elsewhere in the repo, and
  requires every SHA-pinned action to carry a readable `# vX.Y.Z` comment
  (#15332 AC4, scoped to the low-cost mechanism the issue itself suggested).
- Repoint code-quality.yml's four `GH#7105` mypy-suppression citations at
  #15345 — #7105 is closed and tracked wiring mypy in, not the errors it
  surfaced (#15333 AC3).
- Add repo_tests/workflow_closed_reference_guard_test.py: fails when a
  workflow comment cites a closed issue as live tracking justification,
  resolving state via `gh` and skipping visibly (not silently) when it is
  unavailable (#15333 AC4). Building it surfaced two more pre-existing
  instances of the same defect (code-quality.yml:258 citing closed #5263,
  ssot-coverage.yml:172 citing closed #14371); both need a domain judgment
  call outside this fix's scope, so they are recorded as an exempt pair
  pointing at #15346 rather than silently passed.
- #15252's dead integration-test step was already retired by #15315
  (c580893) before this change; verified against the current base, no
  further action needed here.
@github-actions

Copy link
Copy Markdown
Contributor

✅ SSOT Configuration Compliance: Passing

🎉 No new hardcoded values of either class — ssot and other both block.

Known backlog in pipeline-scripts/hardcoded_values_baseline.txt is suppressed and tracked in #14371.

@mrveiss

mrveiss commented Aug 31, 2026

Copy link
Copy Markdown
Owner Author

Review pass — no blocking defects. Two non-blocking findings fixed on the branch (c3de8c3578), and the one open risk closed with evidence.

1. test_no_tag_pinned_action_is_older_than_the_repo_standard was unfalsifiable. The repo has zero tag drift today, so with one version per action version < best is never true — an inverted operator would have passed identically. The comparison is now extracted into _version_regressions() and pinned by planted data (a v4 beside a v6, same-version pairs, different actions not being each other's standard, and minor/patch participating). Proven by mutation rather than asserted:

inverted  to   ->  1 failed, 3 passed
restored               ->  4 passed

2. The >= 100 floor did not protect the coverage the guard was built for. .github/workflows/*.yml alone yields ~195 pins, so dropping the ACTIONS_DIR glob from _workflow_files() would have kept the floor green while silently removing composite actions — where two of the three drifted pins that motivated #15332 actually lived. Now asserted separately.

3. Open risk closed: actions/cache@v6 on self-hosted runners. The concern was real — that bump is gated on runner.environment == 'self-hosted', self-hosted runner binaries do not auto-update, and a Node-runtime mismatch fails the job outright rather than warning. Nothing in the repo tracks the runner version, so it could not be settled from the source. It is settled empirically instead:

code-quality on 9e28baa631 -> completed success
code-quality.yml:124  runs-on: [self-hosted, Linux, X64]
code-quality.yml:187  uses: ./.github/actions/setup-python-ci   # where cache@v6 lives

Both registered runners carry self-hosted,Linux,X64 and are online, so the bumped action has already executed on the real hardware and passed. Not inferred from the runner version — observed from the job that uses it.

Also confirmed and left alone: the SHA-comment cross-check correctly excludes SHA pins from the version comparison, and DELIBERATELY_EXEMPT keying fails loudly on a file rename rather than silently passing — the safe direction.

@mrveiss
mrveiss merged commit 79813b1 into Dev_new_gui Aug 31, 2026
64 checks passed
@mrveiss
mrveiss deleted the issue-15332-ci-actions branch August 31, 2026 10:40
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