Skip to content

ci: migrate 9 of 12 workflow jobs to smithy self-hosted runners#134

Merged
avrabe merged 2 commits into
mainfrom
smithy-migration
May 10, 2026
Merged

ci: migrate 9 of 12 workflow jobs to smithy self-hosted runners#134
avrabe merged 2 commits into
mainfrom
smithy-migration

Conversation

@avrabe
Copy link
Copy Markdown
Contributor

@avrabe avrabe commented May 3, 2026

Summary

Migrates meld's CI from GitHub-hosted to the pulseengine smithy
self-hosted fleet, following the playbook proven on spar (#201),
rivet (#262), kiln (#247), and gale (#35). Nine of twelve jobs
move; the three that stay are constrained by toolchain or OS.

meld is a WebAssembly component fusion tool. wasm32-wasip2 (used
by fixtures.yml) and nightly Rust (used by fuzz-smoke) are both
pre-installed on smithy via rustup, so no extra setup is needed.

Migrated -> smithy

Workflow Job Class
ci.yml test rust-cpu
ci.yml coverage rust-cpu
ci.yml clippy rust-cpu
ci.yml fmt light
bench.yml bench-smoke rust-cpu
fixtures.yml update-fixtures rust-cpu
fuzz.yml fuzz-smoke (4-target matrix) rust-cpu
release.yml build (x86_64-unknown-linux-gnu) rust-cpu
release.yml release (publish) light

light for fmt + release-publish (no compile work). All compile-bound
jobs go to rust-cpu (12 G MemoryHigh, plenty for cargo work).

Stays on hosted (release.yml matrix)

Target Reason
aarch64-unknown-linux-gnu uses cross which launches a Docker container; podman-docker compat shim on smithy is untested for cross images
x86_64-apple-darwin macOS only on GitHub-hosted (smithy is Linux x86_64)
aarch64-apple-darwin macOS only on GitHub-hosted (smithy is Linux x86_64)

In-place comments above each kept-hosted matrix entry capture the reason.

Workarounds applied

None. Every migrated job is a clean cargo build/test/clippy/fmt on
Linux with no sudo, apt-get, or container directive. actions-rs/toolchain
and dtolnay/rust-toolchain both no-op cleanly when rustup is already
present on PATH.

Expected win

Same shape as the prior migrations: queue elimination on the org-free
Actions tier dominates total wall time. fuzz-smoke's 4-target matrix
and the test/coverage/clippy trio are the largest individual wins.

Test plan

  • All 9 migrated jobs land on smithy runners and finish green
  • Three release.yml hosted entries unchanged
  • No EACCES events in smithy's journalctl -u smithy-trace-eacces.service
  • No "no space left on device" — TMPDIR fix should hold
  • wasm32-wasip2 target available for fixtures.yml without extra install
  • Nightly Rust available for fuzz-smoke via rustup

Rollback

Revert this commit; all runs-on: entries flip back to ubuntu-latest
and the release matrix returns to its prior shape.

avrabe and others added 2 commits May 3, 2026 19:48
  rust-cpu     test, coverage, clippy, bench-smoke, update-fixtures,
               fuzz-smoke, release build (x86_64-linux)
  light        fmt, release publish

Stays on hosted (release.yml matrix):
  - build aarch64-linux  uses `cross` (Docker container; podman compat untested)
  - build x86_64-darwin  macOS only on GitHub-hosted
  - build aarch64-darwin macOS only on GitHub-hosted

No special workarounds needed: every migrated job is a clean
cargo build/test/clippy/fmt on Linux with no sudo, apt-get, or
container directive. wasm32-wasip2 used by fixtures.yml is
pre-installed on smithy. Nightly Rust used by fuzz-smoke is
available via rustup.
cargo-fuzz builds with --target x86_64-unknown-linux-musl by default on
Linux. GitHub-hosted runners ship the musl std target preinstalled;
smithy's nightly install does not, so the build fails with
`can't find crate for std` for x86_64-unknown-linux-musl.

Add an explicit targets line to the dtolnay/rust-toolchain step so
rustup pulls the musl std for nightly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@avrabe avrabe merged commit da9e294 into main May 10, 2026
9 of 10 checks passed
@avrabe avrabe deleted the smithy-migration branch May 10, 2026 04:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant