Context
PR #434 added a Skit / Coverage job, which made the existing copy-paste prelude across Skit / Lint, Skit / Test, Skit / Coverage, and Skit / Build jobs visible:
- Free disk space (jlumbroso/free-disk-space)
- actions/checkout@v5
- oven-sh/setup-bun@v2 (bun 1.3.5)
- bun install + bun run build (because streamkit-server embeds UI assets)
- apt install libvpx-dev nasm
- dtolnay/rust-toolchain@master (1.95.0 + components)
- Swatinem/rust-cache@v2
Same sequence appears in .github/workflows/skit.yml at:
E2E workflow has overlapping but not identical prelude (it also boots the server).
Why this matters
- Bumping any tool version (Bun, Rust toolchain, libvpx, NASM, free-disk-space action) requires 4–5 identical edits across the file. Easy to miss one, and we've already shipped at least one mismatch from manual sync (different action SHAs on otherwise-identical steps).
- Adding a sixth job in the future (e.g.
bench, fuzz, coverage-gpu) will be a copy-paste exercise rather than a one-line addition.
Proposed shape
Extract to .github/actions/setup-skit/action.yml as a composite action with inputs for the variations:
rust-cache-key (different per job)
rust-cache-workspaces (Coverage uses . -> target/coverage, others use default)
rust-components (Coverage needs llvm-tools-preview)
skip-ui-build (Lint job doesn't need it)
runs-on-self-hosted (Test (GPU) skips the free-disk + apt steps)
Each job collapses to: uses: ./.github/actions/setup-skit + 1–4 inputs.
Out of scope
- Refactoring the UI workflow's prelude similarly (smaller, less duplication).
- Touching the E2E workflow — its prelude has more variation (runs the server, manages browser deps) and is its own thing.
Refs
Context
PR #434 added a
Skit / Coveragejob, which made the existing copy-paste prelude acrossSkit / Lint,Skit / Test,Skit / Coverage, andSkit / Buildjobs visible:Same sequence appears in
.github/workflows/skit.ymlat:E2E workflow has overlapping but not identical prelude (it also boots the server).
Why this matters
bench,fuzz,coverage-gpu) will be a copy-paste exercise rather than a one-line addition.Proposed shape
Extract to
.github/actions/setup-skit/action.ymlas a composite action with inputs for the variations:rust-cache-key(different per job)rust-cache-workspaces(Coverage uses. -> target/coverage, others use default)rust-components(Coverage needsllvm-tools-preview)skip-ui-build(Lint job doesn't need it)runs-on-self-hosted(Test (GPU) skips the free-disk + apt steps)Each job collapses to:
uses: ./.github/actions/setup-skit+ 1–4 inputs.Out of scope
Refs