ci: unstick verify-stack on Gitea 1.27 + runner 2.0.0 — drop status-function if on a needs job (refs #134)
CI / build (pull_request) Successful in 1m30s
CI / lint (pull_request) Successful in 1m40s
CI / unit (pull_request) Successful in 1m44s
CI / frontend (pull_request) Successful in 3m45s
CI / mutation (pull_request) Successful in 7m5s
CI / verify-stack (pull_request) Successful in 8m52s
CI / build (pull_request) Successful in 1m30s
CI / lint (pull_request) Successful in 1m40s
CI / unit (pull_request) Successful in 1m44s
CI / frontend (pull_request) Successful in 3m45s
CI / mutation (pull_request) Successful in 7m5s
CI / verify-stack (pull_request) Successful in 8m52s
This commit is contained in:
@@ -196,3 +196,28 @@ service name; the notif verify harness also registers the sink callback by IP.
|
||||
abonnement is registered and refuses it (`no-auth-on-callback-url`) unless it returns
|
||||
**401** without the configured `Authorization`. The verify sink
|
||||
(`infra/notification-sink.py`) enforces a bearer token for exactly this reason.
|
||||
|
||||
---
|
||||
|
||||
## 7. A job with `if: ${{ !cancelled() }}` (or `always()`) + `needs` sticks in "waiting"
|
||||
|
||||
**Symptom** — after upgrading to **Gitea 1.27** + **act_runner 2.0.0**, one job never
|
||||
starts: the run sits in state `waiting` forever, the job has **no logs** (never
|
||||
dispatched to a runner), and the other jobs finish normally. `main` stays pending/red.
|
||||
Seen on the `verify-stack` job (#134).
|
||||
|
||||
**Why** — Gitea 1.27 reworked cancellation/aggregation: a job gated by a
|
||||
**status-function `if`** (`always()` / `cancelled()` / `!cancelled()`) on top of
|
||||
`needs` now routes through a new transitional **`Cancelling`** job state plus a
|
||||
server↔runner **capability negotiation** ("Requires Gitea Runner 2.0.0"). On the
|
||||
1.27 + 2.0.0 pairing that handshake doesn't resolve for such a job, so it's never
|
||||
offered to a runner and never leaves `waiting`. Jobs with no `if`/`needs` are
|
||||
unaffected. (Related upstream: go-gitea/gitea#31074, #27116, #35782.)
|
||||
|
||||
**Fix** — don't gate a `needs` job with a status-function `if`. Use the default
|
||||
`if: success()` (i.e. omit the `if`). If you need "run even when an upstream job
|
||||
fails", prefer serialising with a `concurrency` group over `needs` + `always()`.
|
||||
|
||||
**Also** — a run already stuck this way will **not** clear itself; force-cancel it
|
||||
from the Actions UI (plain cancel can also stall on this version, #35782). Push the
|
||||
workflow fix to produce a fresh run.
|
||||
|
||||
Reference in New Issue
Block a user