Time limits only on the CI step: the job's limit is ignored, and the Dockerfile and scripts carry their own #199

Closed
opened 2026-11-10 20:48:52 +01:00 by clawbot · 1 comment
Collaborator

The CI time limit sits on the check job in .gitea/workflows/check.yml, and our runner ignores a job's limit, so a hung build holds the shared runner with no limit at all. The Dockerfile and two scripts also wrap commands in timeout, which stops make check outside CI too, where no hard time limit applies; on a busy host that fails a check whose tests are still running (as on sneak/rfscan#155).

Standing ruling: CI time limits go only in the CI workflow file, on the step; never in the Makefile, Dockerfile or scripts. sneak, on homoicon: "the timeouts must be only for the CI action job, not inside the Makefile/Dockerfile" (sneak/homoicon#2066). The same fix landed in rfscan (sneak/rfscan#156).

Plan

One PR into next. No Go code changes.

  • .gitea/workflows/check.yml: move timeout-minutes: 20 and its comment from the check job to the step that runs script/cibuild.
  • Dockerfile, frontend-test stage: drop both timeout 90 wrappers around yarn --silent run test. Keep the dot pass, the rerun with the spec reporter and the exit 1.
  • script/frontend-test: drop timeout 90 (twice) and timeout 30. Keep the rerun and the exit 1.
  • script/frontend-viewport-test: drop timeout 900 before docker run. Keep the named containers and the cleanup trap; reword the comment above cleanup(), which cites the timeout, so it gives the reason that still holds (an interrupted docker run client does not remove the container it started).
  • Stays: go test -count=1 -timeout 90s in the Dockerfile test stage (the vendored REPO_POLICIES.md requires it), the image's HEALTHCHECK --timeout, the server's HTTP timeouts, and timeouts inside test code (test/unit/, test/viewport/harness.js).
  • REPO_POLICIES.md stays unchanged: it is vendored from sneak/prompts and still says the job sets the limit; the ruling overrides that here. Disclose this in the PR body, one line.
  • Docs: any sentence in README.md, TODO.md or test/viewport/README.md that states a removed limit is corrected. TODO.md's "a run stops after 20 minutes" stays true.

Edit every file by hand, no scripted edits; run make fmt before committing markdown.

Definition of done

  • No timeout command is left in the Dockerfile or script/.
  • The only CI time limit is timeout-minutes: 20 on the step that runs script/cibuild.
  • Every comment and document that mentions these limits is true.
  • make check passes.

Model: opus-5-5

The CI time limit sits on the `check` job in `.gitea/workflows/check.yml`, and our runner ignores a job's limit, so a hung build holds the shared runner with no limit at all. The `Dockerfile` and two scripts also wrap commands in `timeout`, which stops `make check` outside CI too, where no hard time limit applies; on a busy host that fails a check whose tests are still running (as on https://git.eeqj.de/sneak/rfscan/issues/155). Standing ruling: CI time limits go only in the CI workflow file, on the step; never in the `Makefile`, `Dockerfile` or scripts. sneak, on homoicon: "the timeouts must be only for the CI action job, *not* inside the Makefile/Dockerfile" (https://git.eeqj.de/sneak/homoicon/issues/2066). The same fix landed in rfscan (https://git.eeqj.de/sneak/rfscan/pulls/156). ## Plan One PR into `next`. No Go code changes. - `.gitea/workflows/check.yml`: move `timeout-minutes: 20` and its comment from the `check` job to the step that runs `script/cibuild`. - `Dockerfile`, `frontend-test` stage: drop both `timeout 90` wrappers around `yarn --silent run test`. Keep the dot pass, the rerun with the spec reporter and the `exit 1`. - `script/frontend-test`: drop `timeout 90` (twice) and `timeout 30`. Keep the rerun and the `exit 1`. - `script/frontend-viewport-test`: drop `timeout 900` before `docker run`. Keep the named containers and the `cleanup` trap; reword the comment above `cleanup()`, which cites the `timeout`, so it gives the reason that still holds (an interrupted `docker run` client does not remove the container it started). - Stays: `go test -count=1 -timeout 90s` in the `Dockerfile` test stage (the vendored `REPO_POLICIES.md` requires it), the image's `HEALTHCHECK --timeout`, the server's HTTP timeouts, and timeouts inside test code (`test/unit/`, `test/viewport/harness.js`). - `REPO_POLICIES.md` stays unchanged: it is vendored from `sneak/prompts` and still says the job sets the limit; the ruling overrides that here. Disclose this in the PR body, one line. - Docs: any sentence in `README.md`, `TODO.md` or `test/viewport/README.md` that states a removed limit is corrected. `TODO.md`'s "a run stops after 20 minutes" stays true. Edit every file by hand, no scripted edits; run `make fmt` before committing markdown. ## Definition of done - [ ] No `timeout` command is left in the `Dockerfile` or `script/`. - [ ] The only CI time limit is `timeout-minutes: 20` on the step that runs `script/cibuild`. - [ ] Every comment and document that mentions these limits is true. - [ ] `make check` passes. Model: opus-5-5
clawbot self-assigned this 2026-11-10 20:48:53 +01:00
Author
Collaborator

Built in #200: the CI limit is on the script/cibuild step, and the Dockerfile and script/ have no timeout wrappers left.

Model: opus-5-5

Built in https://git.eeqj.de/sneak/netwatch/pulls/200: the CI limit is on the `script/cibuild` step, and the `Dockerfile` and `script/` have no `timeout` wrappers left. Model: opus-5-5
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/netwatch#199