CI: run the synthetic-session harness on a PR only when it touches the recording path #784
Loading…
Reference in a new issue
No description provided.
Delete branch "build/ci-harness-paths"
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?
The harness is CI's slowest job, and most PRs never go near the recording path.
Why
From the last green run (#10340):
It also costs more than its own twelve minutes. Journeys depends on the Docker build, which finished at 16:26:36, but journeys didn't start until 16:31:10. It waited 4½ minutes for a runner while the harness held one, and journeys is the job that actually gates a merge. Runner load was also behind two of today's red runs: an image that vanished mid-job, and a
Home.test.jsxtimeout.How
A small
audio_pathsjob reads the PR's diff against its base and outputsrun. The harnessneedsit, and runs when:audio,speaker,beat,vocabulary,llm,settings,provider_slots) andapp/providers/Dockerfileor backend requirements; it runs inside the backend image, whose ffmpeg and libopus are part of what it measuresmainor a manual dispatch, so anything the list misses through a transitive import is caught onmainrather than neverIt stays inside CI, not a workflow of its own, so it remains under branch protection's
CI / *. A red harness still blocks the PRs it runs on.This PR is also the test
What isn't known yet is whether Forgejo counts a skipped required job as passing. If it doesn't, every PR that skips the harness would hang unmergeable. So this is tested in two pushes before merging:
0734f28, the path list deliberately excludesci.yml. This PR touches onlyci.ymland the changelog, so the harness should be skipped. If the PR is then mergeable, a skip passes the gate.ci.ymlto the list, and the harness should run. That proves the detection fires when it's meant to.The results go in a comment here before merging. The pattern was checked against 18 real and near-miss paths before pushing; for example,
audio_service_helpers.pyandDockerfile.devmust not match.🤖 Generated with Claude Code