Shared release pipeline for cablehead's Rust projects. One Dagger module and one reusable GitHub Actions workflow replace the per-repo copies that had drifted apart across pai-sho, http-nu, and friends.
On a v* tag push in a consuming repo it cross-builds the crate for
macos-arm64, linux-arm64 (musl), and linux-amd64 (musl), then publishes a
GitHub release with the tarballs and a changelog from changes/<tag>.md
(generated from git log when the file is missing).
Add one file to the project:
# .github/workflows/release.yml
name: Release
on:
push:
tags: ["v*"]
workflow_dispatch:
permissions:
contents: write
jobs:
release:
uses: cablehead/pipelines/.github/workflows/release-binaries.yml@main
with:
name: my-cratename is the crate/binary name and the artifact prefix. Projects whose
darwin build needs a custom driver (http-nu) pass
darwin-build-script: ./scripts/cross-build-darwin.sh.
dagger.json, .dagger/main.go the build functions (Dagger, Go SDK)
.github/workflows/
release-binaries.yml the reusable workflow (workflow_call)
The Dagger module is also callable directly:
dagger call -m github.com/cablehead/pipelines \
linux-amd-64-build --src . --name my-crate --version v0.1.0 \
export --path ./my-crate-v0.1.0-linux-amd64.tar.gz