ci: reuse dependencies, split Linux lanes and share the Metal build - #13
Merged
Conversation
Ordinary CI spent about an hour per run with nearly all of it in Cargo build phases: the macOS job built for 53 of its 54 minutes and the conformance step alone built for 14 minutes to run one test, because each step selected a different package set and Arrow/DataFusion were compiled three times over. Main CI also queued behind the previous main run, and the stress matrix built the same release targets three times per OS. - Cache external dependencies on the Linux test lanes, the Metal job and stress (Swatinem/rust-cache, pinned). Release calls never restore or save a cache; every Cargo command still runs after a hit. - Give the Metal lane one dependency graph: test-metal and test-metal-device share METAL_TEST_ARGS, now including the TUI package via oxidelake-runtime/metal, and the device probe lives in the Makefile. - Split Linux tests into default / io-uring / predict jobs, each keeping its companion checks. - Cancel superseded ordinary main CI; the reusable release gate is excluded by workflow name. - Build stress once per OS and run thread counts 1/4/16 from that build. - Skip Rust jobs only for an explicit documentation allowlist, enforced by ci-policy.py, which required-green now runs; failures, cancellations, missing jobs and unexpected skips still fail the gate. - Upload Cargo --timings reports so the next change can be measured. - Make `make gate` match CI (MSRV, full Metal lane on macOS, all-feature rustdoc and deny, the new ci-scripts suite), fix the metadata gate for macOS Bash 3.2, and route `make msrv` through rustup run. Verified locally: make ci-scripts, make zizmor, make release-scripts crate-metadata, and the complete Metal lane on Apple Silicon including the on-device conformance test. No speed-up is claimed until warm runs are compared against the recorded baseline. ADR-0017 records the decision. Signed-off-by: Vyncint Ng <vyncint@icloud.com>
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.
Today
Ordinary CI takes about an hour, and almost none of it is tests. In run
34074441576
the macOS job spent 53m13s of its 54m12s in Cargo build/check phases; the
conformance step built for 14m28s and ran its one test in about a second.
Arrow and DataFusion compiled three times per job because each step selected
a different package set. Main CI was serialised behind the previous main run
(one run waited 54 minutes before its first job started), and the stress
matrix built the same release targets three times per OS.
Change
Swatinem/rust-cache, pinned to v2.9.2) on the Linuxtest lanes, the Metal job and stress. Workspace crates and installed tools
are excluded; every Cargo command still runs after a restore. Release calls
into
ci.ymlnever restore or save a cache (cleandefaults totrueforworkflow_call, and the step is also gated ongithub.workflow == 'CI').test-metalandtest-metal-deviceshareMETAL_TEST_ARGS, which now includes the TUIpackage and uses
oxidelake-runtime/metalso the same five packages resolveonce. The device probe moved into the Makefile so
make metaland CI arethe same command.
keeping its companion checks (CUDA compile gate and coherence on default,
no-second-CUDA on predict).
workflow name;
release.yml's own concurrency group is unchanged.20/40/40 iteration split, via
.github/scripts/stress-tui.py.(
docs/**/*.mdplus five root Markdown files).README.md, manifests,lockfile, workflows, scripts and anything unknown take the full gate.
required-greenmoved to.github/scripts/ci-policy.py, which rejects anyfailure, cancellation, missing job or skip outside that policy.
--timingsreports are uploaded astimings-*artifacts (7 days) sothe next round can be measured rather than guessed.
make gatenow matches CI: it runs MSRV, the full Metal lane on macOS,all-feature rustdoc and
cargo deny --all-features, and the newmake ci-scriptssuite.mapfile,which macOS's Bash 3.2 lacks, and
make msrvnow goes throughrustup runso a standalone Cargo earlier on
PATHcannot bypass the toolchain pin.ADR-0017 records the decision and supersedes the no-cache comment in
ci.yml.Verified
make ci-scripts(16 tests): gate policy, change classification with areal git repo (deletion, rename, newline in a path), stress coverage,
Metal argument reuse, the metadata script under Bash 3.2, and
make msrvwith a non-proxy Cargo first on
PATH.make zizmorat the pedantic persona: no findings.cargo tree --depth 0on the shared Metal selection: compute, device,memory and runtime resolve
[default,metal]; the TUI resolves[]; theCUDA-only
#[ignore]tests arecfg-gated out, so-- --ignoredacrossthe five packages runs exactly the conformance test it did before.
make release-scripts crate-metadata metalon an Apple Silicon Mac: allgreen, and the
-- --ignoredpass rangpu_backend_matches_datafusion_when_availableonce on the Metal device (1 passed, 6 filtered out); every other package
reported 0 ignored tests selected.
Swatinem/rust-cache@6323deb…isthe commit behind tag v2.9.2;
actions/upload-artifact@ea165f8…is v4.6.2.Not done
caches; compare a warm run and a small-source-change run against the
baseline above before setting a target.
10 GB repository budget have been observed.
opt-level, the TUI's dependency on DataFusion, and releasebinary parallelism are out of scope (audit items 6 and the release notes).