fix(ci): make Tests an independent job (work around Gitea needs-chain scheduler stall) #756

Merged
jmiller merged 1 commits from fix/ci-generic-scheduler into dev 2026-07-06 03:42:47 +00:00
Owner

Problem

The "Generic: Project CI" Tests job (needs: lint, if: always() && needs.lint.result == 'success') never ran — it sat in waiting and was reaped by ABANDONED_JOB_TIMEOUT, showing as "Blocked by required conditions". Diagnosis proved the Gitea Actions scheduler does not offer the dependent 2nd job of a needs-chain to runners, even idle label-matching ones:

  • Run 34933: Lint & Validate claimed + success; Tests waiting/runner_id 0, never scheduled.
  • Single-job workflows (deploy-*, lint-only) schedule fine — only the dependent chained job stalls.

Fix (verified)

Drop needs: lint + the always() gate; make Tests an independent job, guarding template repos directly (same condition lint uses). Verified on run 34999: Tests was claimed by runner 50 and ran — the stall is gone.

Trade-off: Tests no longer waits for lint to pass (runs in parallel). Acceptable — both are independent quality signals, and a non-scheduling job is worse than an ungated one.

Scope

ci-generic.yml is synced from Template-Generic — the canonical fix goes there too (separate PR) so this doesn't regress on the next sync. This fork copy gives immediate working CI (incl. for the #733 PR).

Related: #733 (its "Tests" check was the visible symptom). Note main requires no status checks, so this was never a hard merge-blocker — but it makes CI actually function.

https://claude.ai/code/session_01Wsno14cxE49MstXFs9G5KT

## Problem The "Generic: Project CI" **Tests** job (`needs: lint`, `if: always() && needs.lint.result == 'success'`) never ran — it sat in `waiting` and was reaped by `ABANDONED_JOB_TIMEOUT`, showing as "Blocked by required conditions". Diagnosis proved the Gitea Actions scheduler **does not offer the dependent 2nd job of a `needs`-chain to runners**, even idle label-matching ones: - Run 34933: `Lint & Validate` claimed + success; `Tests` `waiting`/`runner_id 0`, never scheduled. - Single-job workflows (deploy-*, lint-only) schedule fine — only the dependent chained job stalls. ## Fix (verified) Drop `needs: lint` + the `always()` gate; make **Tests an independent job**, guarding template repos directly (same condition `lint` uses). Verified on **run 34999**: `Tests` was claimed by runner 50 and ran — the stall is gone. Trade-off: Tests no longer waits for lint to pass (runs in parallel). Acceptable — both are independent quality signals, and a non-scheduling job is worse than an ungated one. ## Scope `ci-generic.yml` is synced from **Template-Generic** — the canonical fix goes there too (separate PR) so this doesn't regress on the next sync. This fork copy gives immediate working CI (incl. for the #733 PR). Related: #733 (its "Tests" check was the visible symptom). Note `main` requires no status checks, so this was never a hard merge-blocker — but it makes CI actually function. https://claude.ai/code/session_01Wsno14cxE49MstXFs9G5KT
jmiller added 1 commit 2026-07-06 03:42:13 +00:00
fix(ci): make Tests an independent job to work around Gitea needs-chain scheduler stall
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 58s
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Universal: PR Check / Require Docs Update (pull_request) Has been skipped
Universal: PR Check / Wiki Update Reminder (pull_request) Has been skipped
PR RC Release / Build RC Release (pull_request) Successful in 3s
Universal: PR Check / Validate PR (pull_request) Successful in 8s
Generic: Project CI / Lint & Validate (pull_request) Successful in 32s
Generic: Project CI / Tests (pull_request) Successful in 33s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Successful in 1s
Universal: PR Check / Secret Scan (pull_request) Successful in 57s
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
28b9d94658
The Gitea Actions scheduler on the current build does not offer the dependent
2nd job of a needs-chain to runners: the Tests job (needs: lint) reaches
'waiting' but is never claimed even with idle, label-matching runners, then is
reaped by ABANDONED_JOB_TIMEOUT. Verified via dispatch on idle runners (run
34933: lint claimed+success, Tests waiting/runner_id 0, never scheduled).

Drop 'needs: lint' + the always() gate; guard template repos directly so Tests
runs as an independent, schedulable job.

Claude-Session: https://claude.ai/code/session_01Wsno14cxE49MstXFs9G5KT
jmiller merged commit 7d98098a87 into dev 2026-07-06 03:42:47 +00:00
jmiller deleted branch fix/ci-generic-scheduler 2026-07-06 03:42:48 +00:00
Sign in to join this conversation.