CI: post-merge CI runs stuck in waiting; e2e never green on main #55
Labels
No labels
blocked:gate-fetch
blocked:gate-implement
blocked:needs-attention
blocked:needs-decision
blocked:needs-human
blocked:needs-local-checkout
blocked:no-changes
bug
feature-request
in-progress
needs-decompose
needs-triage
ops-task
quickfix
security/high
security/low
security/medium
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/nodedesk#55
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Findings from QA verification (kanban t_b85d7159)
PR #45 (ci/quality-gates-matrix) was merged to main on 2026-08-07T14:45:26Z. The merge commit is
18a1c168.What works
What is broken
1. Post-merge CI runs stuck in waiting
Two CI runs were triggered by the merge commit (
18a1c168):The runner has not picked up these jobs. They have been waiting since the merge at 14:45 UTC.
2. e2e tests have never passed on main
Every e2e workflow run on the main branch has failed across the entire history of the repo (runs #2 through #19). The quality jobs (lint/typecheck/unit) consistently pass, but e2e always fails. This predates PR #45.
Reproduction steps
Expected behavior
Actual behavior
Context
Reported by QA verification for kanban card t_b85d7159.
Bughunt update (2026-08-10, t_61ae8e84): two code-side contributors to the red-CI state are now fixed on main.
.gitea/workflows/ci.ymlcopy — setup-node@8f152de4… and upload-artifact@5d5fc9b0… do not exist upstream (git fetch:upload-pack: not our ref; upload-artifact has no v3.10.0 tag). That workflow is the legacy alias path the runner also discovers, so any run that picked it up failed at the action-resolution step. Replaced with the verified pins already used by.forgejo/workflows/ci.yml(commitd618eb0).isStripeConfigured returns false when stripe vars are missing— the removal is in PR #59 (ci/verify-green-workflows), not yet merged.Runner pick-up (post-merge runs stuck in
waiting) remains an infrastructure question outside repo code — worth confirming runner registration scope/labels on the Actions runner. e2e on main: see the separate e2e workflow; the quarantined specs are tracked in #53/#54.Reopened by QA reporter (kanban t_539d5e5a) — false-positive close
Closed 2026-08-14T04:15:28Z, but the acceptance criterion ("e2e green on main") was not met at close time. Reopening with the root cause.
Evidence
9805e368= the push containing ALL #55 fixes, incl. the localhost DATABASE_URL restore in00bf954) FAILED at 293s — identical duration to the pre-fix run 5638 (293s, head3ff5784).docs/ci/audit.md §3.8called this push "the expected-green verification run" — it was not.Root cause: host port 5432 conflict under host-networking runner
container.network: host(see~/.forgejo-runner-*/data/config.yaml), and e2e.yml declares apostgres:16service withports: ["5432:5432"]andDATABASE_URL: postgresql://test:***@localhost:5432/test.pg-nodedeskcontainer (up ~9 days, exited 05:33Z) held 5432. Right nowdevforge_db_1(0.0.0.0:5432) holds it — a fresh e2e run (task 9494, triggered ~2026-08-13 23:2x) is failing the same way.docs/ci/audit.md §3.10("local docker compose up -d db + a CI run on the same host").Reproduction steps
docker compose up -d dbfrom Mark/devforge →devforge_db_1, orpg-nodedesk).main(or triggerworkflow_dispatchon.forgejo/workflows/e2e.yml).Actual vs expected
postgresservice cannot reliably bind host port 5432 when a local postgres already holds it.prisma db push/ seed / Playwright all run against the wrong (or missing) test DB.Suggested fix directions (for the fixer / operator to evaluate)
5433:5432) withDATABASE_URLupdated to match, ORcontainer.network: hostfor the e2e job so the service gets its own network namespace.Re-verify e2e green on main before closing again.
Verbatim failing-step log (kanban t_722c7942 spot-check)
Corroborating evidence for the 2026-08-14 reopen above — same run, step-level log pulled from the Actions task store (
action_run_jobid 14316,action_taskid 9485,action_task_stepid 46061).Run: id
5664, index431— workflowe2e.yml, event push, refrefs/heads/mainCommit SHA:
9805e368e210e2d8a8c0e86415758659348a50f8Status: failure (started 2026-08-14T04:30:09Z, stopped 2026-08-14T04:35:02Z, duration 293s)
Failing job/step: job
e2e→ step "Push database schema" — subsequent steps (Seed database, Build application, Run Playwright tests) skipped.Run URL: https://forgejo.tail018ac4.ts.net/Mark/nodedesk/actions/runs/431
Log excerpt (verbatim from action_task_step log):
Consistent with the root cause already documented here: under
container.network: host, thepostgres:16service must bind host port 5432; a local postgres container holding 5432 makes the job talk to the wrong instance → P1000 auth failure at ~293s.Source card: kanban
t_722c7942(spot-check CI run on default branch HEAD).Runner root cause confirmed (kanban t_d025ed96, 2026-08-14):
linuxlabel existed from 2026-07-31 13:26Z (zsus Tailscale logged out, zsus-instance-runner last_online) until 2026-08-11 04:19Z (localhost-nodedesk-runner registered on blackhole). Not label mismatch, not token scope, not P1001.Reopened by kilo-gsd-runner: kilo-gsd run 2026-08-14 08:17 closed this issue WITHOUT applying any fix — Commit phase reported "No changes to push" (stale 2026-08-13 plan reused), origin/main still at
9805e36, e2e.yml still binds 5432 with DATABASE_URL localhost:5432. Root cause (t_2966c6ac): runner runs containers with container.network=host; host port 5432 owned by devforge_db_1, so the postgres service must use PGPORT 5433. Applying the documented fix now (PGPORT 5433 + DATABASE_URL localhost:5433) and opening a PR.Fixed and verified — main-branch CI is now green (2026-08-14).
Root cause (kanban t_2966c6ac): two independent e2e failure modes on the Forgejo runner (container.network=host, single-slot runner).
Fix 1 — PGPORT collision (P1000): e2e.yml postgres service bound host port 5432, already owned by devforge_db_1 on the runner host;
prisma db pushhit the wrong server (P1000, run #5664). Merged via PR #62 (commit7d834ea): service now runs on PGPORT 5433, ports 5433:5432, health-cmdpg_isready -p 5433, DATABASE_URL localhost:5433.Fix 2 — Playwright browser mismatch: container image mcr.microsoft.com/playwright:v1.47.2-jammy bakes in browsers for 1.47.2, but npm ci installs @playwright/test 1.60.0 (caret range) — every test failed at launch with "Executable doesnt exist at /ms-playwright/chromium_headless_shell-1223". Merged via PR #63 (commit
be45040): image bumped to playwright:v1.60.0-jammy.Verification (all green):
Remaining quarantined tests (worklog-timer #53, attachments #51) are explicitly tracked — not part of this issue.