Repository navigation
Run lint, test and build as parallel CI jobs behind a backend aggregator - #879
Merged
Merged
Conversation
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: WaylandYang <145302500+WaylandYang@users.noreply.github.com>
WaylandYang
force-pushed
the
ci/parallel-lint-build
branch
from
September 23, 2026 08:58
bb010d4 to
c5e5cb4
Compare
This was referenced Sep 23, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #872 and #873.
Why
After the cache fix (#873) the
backendjob takes ~332s, of which Clippy (36s) and Build (39s) sit on the critical path for no reason: clippy is a check-mode build andcargo buildis non-test codegen, neither shares artifacts with the test build. Without a cache hit they cost 143s and 51s.What
backendis split into three parallel jobs,lint(fmt + clippy),test(Postgres service, migrate,cargo test --workspace) andbuild, each restoring thedevcache under its own job-id key and saving only onpush, as before.backendstays as an aggregator job withneeds: [lint, test, build]andif: always(), failing unless all three succeeded. Branch protection ondevrequires the checks namedbackendandweb; renaming the job would silently drop clippy and build out of the merge gate. The aggregator keeps the required check name meaningful without touching protection settings.Workflow-level
permissions: contents: readuntouched.Expected effect
Critical path becomes the
testjob: ~30s setup + 14s migrate + ~184s test ≈ 4 min, versus ~5.5 min today.lintandbuildeach take about a minute on a warm cache. First run after merge is cold for the newlintandbuildjob keys until thedevpush saves them.Verification
YAML parsed and job graph checked locally (
lint,test,buildindependent;backendneeds all three). This PR's own run exercises the new layout; it will also show the aggregator's result line.🤖 Generated with Claude Code