Skip to content

ci: extract per-job prelude (free-disk → checkout → bun → ui-build → apt → rust) into a composite action #436

@staging-devin-ai-integration

Description

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions