ci: parallelize the golden gate and free the package job - #48
Merged
Conversation
The golden format gate was the CI critical path (~740s): two ~6-min qemu-emulated legs (le-aarch64, be-s390x) ran back to back in one job, on every code/tests/ci PR. - Split golden into golden-le + golden-be so the byte orders run in parallel (step_golden.sh is already parameterized by CLLTK_GOLDEN_ARCHES). The LE leg runs on a native ARM64 runner (ubuntu-24.04-arm), so only the BE (s390x) leg needs qemu emulation. - Gate both on a new 'golden' path filter (tracing_library / golden generator / cmake preset / gate script) so the slow job is skipped on the majority of PRs that cannot change the trace format. - package builds its own rpms (cmake --workflow --preset rpms), so depend it on 'checks' instead of build-and-test; it ran serially after build-and-test before (~100s tail on the critical path). Follow-up: split the ~270s Python test suite (the next critical-path item). Signed-off-by: Jo5ta <jo5ta@mail.de>
Jo5ta
force-pushed
the
ci/golden-and-test-parallelism
branch
from
July 28, 2026 14:48
5786178 to
80ce7e0
Compare
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.
What
Cuts CI wall-clock time by attacking the two things a timing analysis showed dominate it: the golden format gate (~740s) and the serial
packagetail (~100s).Why (measured, from a passing run)
Golden was the critical path: two ~6-min qemu-emulated legs (
le-aarch64,be-s390x) ran back-to-back in one job — aarch64 367s + s390x 359s = ~726s of pure emulated-build compute — and it ran on everycode||tests||ciPR.packagethen ran serially afterbuild-and-testeven though it builds its own rpms.Changes
golden-le+golden-beso the two legs run in parallel (step_golden.shwas already parameterized byCLLTK_GOLDEN_ARCHES). Wall-clock for golden goes fromle + betomax(le, be).golden-leruns on a native ARM64 runner (ubuntu-24.04-arm) — no qemu. Only thes390xleg needs emulation (no native s390x runners exist).goldenfilter (tracing_library/, the golden generator, the cmake preset, the gate script). The trace format can only change through those, so the slow job is skipped on the majority of PRs.package: depend onchecksinstead ofbuild-and-test. It builds its own rpms (cmake --workflow --preset rpms), so thebuild-and-testdependency was only a gate; it now runs in parallel. Trade-off: it builds on PRs whose tests fail (cheap; the PR fails anyway).Expected impact
s390xleg alone (~6 min emulated) instead of ~12 min; the LE leg is native and fast.package's ~100s comes off the critical path.After this,
build-and-test(dominated by the ~270s Python suite) becomes the pole — a follow-up will split that into parallel jobs.This renames the
goldenstatus check togolden-le/golden-be. Ifgoldenis in the required-status-checks list, that list needs updating (replacegoldenwithgolden-leandgolden-be), or the required check will never report and block merges.Testing
step_golden.shwithCLLTK_GOLDEN_ARCHES=aarch64(the LE leg) and=s390x(the BE leg) are validated locally; the workflow YAML parses and the job graph is correct. Full behavior confirmed by this PR's own CI run.