name: release binaries
on:
release:
types: [created]
permissions:
contents: write
jobs:
upload-bins:
name: "Upload release binaries"
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
- target: x86_64-pc-windows-msvc
os: windows-latest
- target: aarch64-pc-windows-msvc
os: windows-latest
- target: x86_64-apple-darwin
os: macos-latest
- target: aarch64-apple-darwin
os: macos-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Install stable
uses: dtolnay/rust-toolchain@stable
- uses: taiki-e/upload-rust-binary-action@v1
with:
target: ${{ matrix.target }}
bin: wiretrail
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
publish-crate:
name: "Publish on crates.io"
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v4
- name: Install stable
uses: dtolnay/rust-toolchain@stable
- name: Publish (skip if already on crates.io)
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: |
set -euo pipefail
NAME=$(awk -F\" '/^name *=/ {print $2; exit}' Cargo.toml)
VERSION=$(awk -F\" '/^version *=/ {print $2; exit}' Cargo.toml)
echo "Checking if $NAME $VERSION is already on crates.io..."
if curl -sfL "https://crates.io/api/v1/crates/$NAME/$VERSION" \
-H 'User-Agent: wiretrail-release-workflow' \
-o /dev/null; then
echo "$NAME $VERSION already published — skipping cargo publish."
else
cargo publish
fi