Cross compile matrix
Skill zakelfassi/skills-driven-development/examples/cli-tool/skills/cross-compile-matrix
Add a new target triple to the shipctl cross-platform build matrix — CI YAML, Makefile, and a smoke test. Use when adding support for a new OS/architecture, when a user requests a new platform binary, or when a target triple is missing from the release artifacts.From its SKILL.md
npx -y skills add zakelfassi/skills-driven-development --skill cross-compile-matrixAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 17 stars17 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 8 commands, including `rustup target list | grep {triple}` and 7 more.
SKILL.md
3.4 KB, 774 tokens by cl100k_base, as published. Nobody here has run it
Cross-Compile Matrix
Add a new target triple to the build matrix so CI produces a binary for the new platform.
Inputs
- Target triple (e.g.,
aarch64-apple-darwin,x86_64-pc-windows-gnu) - Cross-compiler image (Docker image or
nativeif the runner natively supports the target) - Smoke test command (a simple invocation to verify the binary works, e.g.,
shipctl --version)
Steps
-
Verify the triple is valid
rustup target list | grep {triple}For Go: check
go tool dist list | grep {os}/{arch}. -
Add the target to the CI matrix Edit
.github/workflows/release.yml— add the triple to thematrix.targetarray:strategy: matrix: include: - target: {triple} runner: ubuntu-latest # or macos-latest, windows-latest cross: true # false if runner supports the target natively image: ghcr.io/cross-rs/{triple}:latest # omit if cross: false -
Add the Makefile target
build-{safe-triple}: cargo build --release --target {triple} mkdir -p dist cp target/{triple}/release/shipctl dist/shipctl-{triple}{safe-triple}replaces-with_in Make target names. -
Register the rustup target (Rust only)
rustup target add {triple}For CI: add to the
rustup target addstep in the workflow. -
Add a smoke test step in the workflow:
- name: Smoke test ({triple}) run: ./dist/shipctl-{triple} --version if: matrix.target == '{triple}'If cross-testing is not feasible (e.g., Windows binary on a Linux runner), document this in a comment.
-
Test locally (if the host supports the target)
make build-{safe-triple} ./dist/shipctl-{triple} --version -
Update the release notes template Add a row to
docs/install.md:| {OS} | {Arch} | `{triple}` | `shipctl-{version}-{triple}.tar.gz` |
Conventions
- Target naming in artifacts:
shipctl-{version}-{triple}.tar.gz - Windows targets produce
.exeand are archived as.zipinstead of.tar.gz musltargets are preferred for Linux binaries to avoid glibc dependency issues- All targets are smoke-tested in CI before a release is published
Edge Cases
- Cross-compilation fails with linker errors: Switch to the
cross-rsDocker image for that triple; add theimage:field in the matrix. - Target is tier 3 (Rust): Add a comment noting reduced support guarantees; test manually before each release.
- macOS arm64 on amd64 runner: Use
--target aarch64-apple-darwinwith Rosetta or a self-hosted arm64 runner; document in the workflow. - Windows MSVC vs GNU: Prefer
x86_64-pc-windows-msvcfor best compatibility; GNU works but requires MinGW on the runner.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.