CI: run what a change needs, and the browser profiles in parallel #358
Labels
No labels
area/ci
area/desktop
area/packaging
area/protocol
area/reading
area/ui
area/web
area/writing
kind/bug
kind/feature
kind/infra
kind/request
needs/user
parked
perf
security
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
littlefox/neokom#358
Loading…
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?
The user (D-070): "CI runs take very long. For things that do not necessarily need to take that long (for example merging documentation and roadmap). Investigate ways to speed up the CI workflow by introducing sound logic for what tests to run when."
Where the time goes (run #619, typical)
A
cirun takes 36–40 minutes, and every PR needs two (branch, then main): ~75 minutes per merge.The three profiles already have separate servers, relays and page hosts (#64); only
workers: 1keeps them in sequence.Last 60 merges to main: 7 docs-only, 2 tests/infra-only, 51 code. 41 of the 60 main runs tested a tree identical to the branch head that had already passed (the branch was up to date with main).
Proposal
web-buildjob builds the release web app and relay once and uploads them; three e2e jobs (desktop, android, iphone), each with its own lyskomd service, download them and run their project. e2e goes from ~35 to ~15 min wall time, for every run that needs it.changesjob first (tools/ci-plan.py, unit-tested) decides which jobs run. The rules fail safe: any file not covered by a narrower rule runs everything.docs/**exceptdocs/protocol/**,*.md,LICENSE): nothing heavy.e2e/**/tools/e2e.sh: the e2e jobs.app/,crates/,Cargo.*,devserver/,ci/, the smoke script or the workflow changed.pr-mergeonly merges when all its runs passed; confirmed through the API, else everything runs. Otherwise the merge's whole diff is classified as above.workflow_dispatch: everything. New: a nightly full run on main, so nothing skipped stays untested for more than a day.~/.cargo/registryand build output on the shared runners (each job downloads every crate today).Expected: a code PR ~17 min on the branch and ~1 min on main (most of the time); a docs/roadmap PR ~1–2 min each.
CLAUDE.md's workflow section is updated to match (it also says main's run includes the soak test; that's the nightly
soakworkflow, while the e2e run has the short soak spec).Merged in #366; main green (run #649).
Verified:
tools/test_ci_plan.py: 18 tests (rules, whole-branch diffs, merges of up-to-date and behind branches, cancelled main runs).0c6c2ef7(0 files differ) and ran nothing: 2.5 min instead of ~40.