CI gate on Gitea Actions #2

Closed
opened 2026-08-22 18:22:38 +01:00 by naps62-yolo · 1 comment
Owner

Implement the per-push gate from DESIGN.md §12.

Steps: cargo fmt --check, cargo clippy --all-targets -- -D warnings,
cargo machete, cargo nextest run, and for the frontend biome ci web/ plus
tsc -b --noEmit.

Total wall-clock is an explicit constraint, so:

  • Cache ~/.cargo/registry, ~/.cargo/git and target/, keyed on
    Cargo.lock plus rust-toolchain.toml.
  • Never build --release in the gate.
  • cargo deny goes on a schedule, not on push.
  • E2E is a separate job, main and PRs touching those crates only.

Acceptance: gate is green and under five minutes warm. Record the cold and warm
times on the issue — later issues will be judged against them.


Depends on: #1

Labels: phase/1-skeleton, area/ci, difficulty/moderate, type/chore

Implement the per-push gate from `DESIGN.md` §12. Steps: `cargo fmt --check`, `cargo clippy --all-targets -- -D warnings`, `cargo machete`, `cargo nextest run`, and for the frontend `biome ci web/` plus `tsc -b --noEmit`. Total wall-clock is an explicit constraint, so: - Cache `~/.cargo/registry`, `~/.cargo/git` and `target/`, keyed on `Cargo.lock` plus `rust-toolchain.toml`. - Never build `--release` in the gate. - `cargo deny` goes on a schedule, not on push. - E2E is a separate job, `main` and PRs touching those crates only. Acceptance: gate is green and under five minutes warm. Record the cold and warm times on the issue — later issues will be judged against them. --- **Depends on:** #1 Labels: `phase/1-skeleton`, `area/ci`, `difficulty/moderate`, `type/chore`
naps62-yolo added the area/cidifficulty/moderatephase/1-skeletontype/chore labels 2026-08-22 18:22:38 +01:00
Author
Owner

Done in bbe53ba and 86f6ed4, direct to `main` (no PR — bootstrap).

Three workflows: `ci.yml` (per-push gate), `e2e.yml` (main plus PRs touching the crates whose seams it covers), `audit.yml` (`cargo deny`, weekly). `deny.toml` included.

Timings, as this issue asked for. Budget is five minutes.

Job Cold Warm
rust 65s 21s
web 6s 5s
e2e 40s 30s

Cold is the whole gate from an empty cache, so there is a lot of headroom for real tests and the frontend.

Notes:

  • `cargo-nextest` comes from the prebuilt binary at `get.nexte.st`; `cargo install` from source costs minutes.
  • Cache covers `~/.cargo/{bin,registry,git}` and `target/`, keyed on `Cargo.lock` plus `rust-toolchain.toml`. Nothing builds `--release`.
  • The first e2e run failed only on the empty test crate. Everything before it worked, including pulling and starting the Transmission service container — which is what the e2e harness issue depends on.
Done in bbe53ba and 86f6ed4, direct to \`main\` (no PR — bootstrap). Three workflows: \`ci.yml\` (per-push gate), \`e2e.yml\` (main plus PRs touching the crates whose seams it covers), \`audit.yml\` (\`cargo deny\`, weekly). \`deny.toml\` included. **Timings, as this issue asked for.** Budget is five minutes. | Job | Cold | Warm | |---|---|---| | rust | 65s | 21s | | web | 6s | 5s | | e2e | 40s | 30s | Cold is the whole gate from an empty cache, so there is a lot of headroom for real tests and the frontend. Notes: - \`cargo-nextest\` comes from the prebuilt binary at \`get.nexte.st\`; \`cargo install\` from source costs minutes. - Cache covers \`~/.cargo/{bin,registry,git}\` and \`target/\`, keyed on \`Cargo.lock\` plus \`rust-toolchain.toml\`. Nothing builds \`--release\`. - The first e2e run failed only on the empty test crate. Everything before it worked, including pulling and starting the Transmission service container — which is what the e2e harness issue depends on.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: yolo/arr#2