Skip to content

CI follow-up: measure and share a compatible current-run native Roundhouse build #317

Closed

Description

@thomasklemm

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

  1. thomasklemm commented on Oct 3, 2026

    @thomasklemm
    CollaboratorAuthor

    Implemented in #346.

    Shape: the unit job stages the current-run Debug-profile roundhouse binary (roundhouse-debug-bin + identity.txt with source_sha / profile=debug / toolchain / --version). campfire-conformance and campfire-compare (including the model/database differential) require a non-empty producer artifact-id, download it, set ROUNDHOUSE_BIN, and emit through scripts/lib/roundhouse-bin.sh — so a download alone cannot silently fall back to cargo run. Missing or non-executable ROUNDHOUSE_BIN fails 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions