agentsclimarketplace

Cross compile matrix

Skill zakelfassi/skills-driven-development/examples/cli-tool/skills/cross-compile-matrix

Agents that learn by doing — and remember how they did it. A methodology for AI agents to create, evolve, and share reusable skills.

Install
npx -y skills add zakelfassi/skills-driven-development --skill cross-compile-matrix

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing 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.

What its author says it does

Copied from the file, not written here

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.

SKILL.md

3.4 KB, 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 native if the runner natively supports the target)
  • Smoke test command (a simple invocation to verify the binary works, e.g., shipctl --version)

Steps

  1. Verify the triple is valid

    rustup target list | grep {triple}
    

    For Go: check go tool dist list | grep {os}/{arch}.

  2. Add the target to the CI matrix Edit .github/workflows/release.yml — add the triple to the matrix.target array:

    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
    
  3. 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.

  4. Register the rustup target (Rust only)

    rustup target add {triple}
    

    For CI: add to the rustup target add step in the workflow.

  5. 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.

  6. Test locally (if the host supports the target)

    make build-{safe-triple}
    ./dist/shipctl-{triple} --version
    
  7. 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 .exe and are archived as .zip instead of .tar.gz
  • musl targets 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-rs Docker image for that triple; add the image: 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-darwin with Rosetta or a self-hosted arm64 runner; document in the workflow.
  • Windows MSVC vs GNU: Prefer x86_64-pc-windows-msvc for best compatibility; GNU works but requires MinGW on the runner.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.