Repository navigation
CI follow-up: measure and share a compatible current-run native Roundhouse build #317
Description
Goal
Follow-up to #313 and the producer/consumer idea discussed in #309 and #312: measure a small compatible group before centralizing more native builds. Reduce duplicated compiler work and runner occupancy without weakening validation or extending the critical path.
Initial candidate
Investigate sharing the current run's Debug-profile roundhouse binary from the existing unit producer with Campfire conformance and Campfire comparison/database differential. These consumers already depend on unit. Do not add a new universal producer or distribute target/ wholesale.
Audit the actual call sites first:
- The conformance job's strict-emit step invokes cargo run --bin roundhouse; the suite harness has its own emission path.
- scripts/campfire-compare and scripts/campfire-db-differential invoke cargo run --bin roundhouse (the differential applies a distinct scenario overlay).
- Downloading a binary alone does not make those cargo-run paths consume it. Preserve the local development path and prove which executable CI actually used.
Compatibility and measurements
Confirm repository-pinned Rust, Debug vs Release, features/build flags, OS/architecture, native libraries and dynamic-link ABI, and exact current-run source provenance. A Release consumer is not automatically compatible with a Debug artifact. Share only the compiler executable, not the emitted apps or their distinct inputs.
Compare the current graph with the candidate using identical source/external inputs and both cold/warm cache conditions. Record separately:
- job creation/start wait (including matrix throttling, not assumed pure capacity queue);
- setup and compiler build;
- artifact upload/download/staging;
- emission and actual tests;
- summed runner time and critical-path elapsed time.
Reference full run: https://github.com/rubys/roundhouse/actions/runs/37038909017. Its unit Cargo build+test step took 500s; Campfire comparison and conformance jobs occupied 168s and 178s. These are combined step/job timings, NOT isolated duplicate compiler costs or predicted savings. Instrument the relevant boundary before estimating the benefit.
Acceptance
- Compatible consumers execute the producer binary from the same run/source, with executable permissions and an explicit source/profile identity.
- A failing/missing producer/artifact cannot become a green selected validation. Existing real Rails/fixture/harness checks and failure reporting remain intact.
- End-to-end tests demonstrate that the supplied executable is actually consumed rather than silently rebuilt through cargo run.
- Publish measured before/after evidence; adopt only if reduced runner work outweighs transfer/setup and does not materially worsen the critical path.
Out of scope
No additional result-reuse allowlist, Bazel/BuildBuddy migration, prebuilt toolchain-image rollout, whole target-directory cache transport, cross-run binary reuse, merge-policy/branch-protection changes, or blanket sharing across incompatible profiles. Images may be investigated separately only with their own download/install/maintenance measurements.
Activity
thomasklemm commentedon Oct 3, 2026
Implemented in #346.
Shape: the
unitjob stages the current-run Debug-profileroundhousebinary (roundhouse-debug-bin+identity.txtwithsource_sha/profile=debug/ toolchain /--version).campfire-conformanceandcampfire-compare(including the model/database differential) require a non-empty producerartifact-id, download it, setROUNDHOUSE_BIN, and emit throughscripts/lib/roundhouse-bin.sh— so a download alone cannot silently fall back tocargo run. Missing or non-executableROUNDHOUSE_BINfails closed. Local checkouts keep the cargo path when the variable is unset.Out of scope (unchanged): universal producer, wholesale
target/, Release consumers, cross-run reuse.Measurement: before/after evidence (setup vs transfer vs emit, summed runner time, critical path) comes from the PR’s full CI run once it finishes; adopt only if reduced runner work outweighs transfer/setup and the critical path does not materially worsen.
Merge canonical main and finish CodeRabbit path fixes
Share the unit job's debug roundhouse binary with Campfire CI
CI: share unit debug roundhouse with Campfire consumers (#346)