ci: build WebKitGTK as two shards on two runners - #32
Merged
hanthor merged 1 commit intoSep 2, 2026
Conversation
Measured on run 33461820477: webkitgtk 5h01m, the next longest package 25 minutes (mesa), then mozjs140 at 18. One package is the wall clock, and it sits five hours against a six-hour job limit. Its recipe compiles the source twice, once per GTK port, and the two compiles share nothing but the tarball. So the recipe now builds twice on two runners. A source-manifest entry may name another entry's recipe directory and the rpm defines to build it with (tools/recipe.py); webkitgtk builds the GTK 4 port with --without gtk3 and the new webkit2gtk4.1 entry builds the GTK 3 port with --without gtk4. The spec gates each port behind a bcond, so a plain rpmbuild with no defines still builds both, as Fedora does. Only the GTK 4 shard produces the -debugsource package; two of the same name and different contents would otherwise collide in the repository. The lane workflow resolves the recipe directory and defines outside the container and passes them in; the defines go to builddep as well as to rpmbuild, so a shard resolves the BuildRequires of the port it will compile. The build identity hashes the shared directory and the entry, defines included, so the shards get distinct keys and an edit to the recipe invalidates both. The source pipeline keeps dist_git_name for the lookaside, which is a different question from which directory to build. mozjs140 leaves the heavy lane: at eighteen minutes it belongs in the ordinary stage-1 lane, and gjs stops waiting behind WebKitGTK for it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KVSCoKWBWAuFFZyLwteEbB
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.
Experiment on top of #30, targeting its branch rather than main since the lane infrastructure lives there. Nothing here is meant to merge while main is active; it is the "shard the long build across runners" question answered with the one package that actually needs it.
What the numbers say
From run 33461820477, the last run where the heavy lane completed:
pipewire is not slow; it sits in a late lane for the abseil ordering, not for its runtime. WebKitGTK is the wall clock of the whole factory, and it runs five hours against a six-hour job limit, which is why the heavy lane has a 360-minute timeout and a
UTAH_HEAVY_RUNNERhook. That build compiles the source twice, once per GTK port, and the two compiles share nothing but the tarball.What this does
tools/recipe.py).webkitgtkbuilds the GTK 4 port with--without gtk3; the newwebkit2gtk4.1entry builds the GTK 3 port with--without gtk4. Expected: about 2.5 hours each, side by side, instead of 5 in sequence, and neither near the limit.%bcond_without gtk4,%bcond_without gtk3), so a plainrpmbuildwith no defines still builds both, exactly as Fedora does. Only the GTK 4 shard produceswebkitgtk-debugsource; two RPMs of that name with different contents would otherwise collide in the repository.dnf builddepas well as torpmbuild, so a shard resolves the BuildRequires of the port it will compile.dist_git_namestays what it was, the lookaside name;malcontent-bootstraphas both directories and its identity is unchanged.What was considered and not done
Validation
tools/validate.py,tools/check_workflow_quoting.py, and the unit tests (17, including newtests/test_recipe.py) pass; both workflows parse; the spec's conditionals balance. No rpm tooling is available where this was written, so the spec has not been run throughrpmspec. The heavy lane on this PR is the test: two webkitgtk jobs ins1-heavy, each finishing with a full set of that port's subpackages.🤖 Generated with Claude Code
https://claude.ai/code/session_01KVSCoKWBWAuFFZyLwteEbB
Generated by Claude Code