name: Release
on:
push:
tags:
- "v*.*.*"
permissions:
contents: write
jobs:
build:
name: Build (${{ matrix.arch }})
strategy:
fail-fast: false
matrix:
include:
- arch: x86_64
runner: ubuntu-latest
- arch: aarch64
runner: ubuntu-24.04-arm
runs-on: ${{ matrix.runner }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache dependencies
uses: Swatinem/rust-cache@v2
- name: Build release binary
run: cargo build --release --locked
- name: Smoke-test binary
run: ./target/release/warren --version
- name: Package asset
run: tar -czf "${RUNNER_TEMP}/warren-linux-${{ matrix.arch }}.tar.gz" -C target/release warren
- name: Upload asset
uses: actions/upload-artifact@v4
with:
name: warren-linux-${{ matrix.arch }}.tar.gz
path: ${{ runner.temp }}/warren-linux-${{ matrix.arch }}.tar.gz
retention-days: 7
release:
name: Release + publish
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache dependencies
uses: Swatinem/rust-cache@v2
- name: Check tag matches Cargo.toml
run: |
tag="${GITHUB_REF_NAME#v}"
version="$(sed -n 's/^version = "\(.*\)"$/\1/p' Cargo.toml | head -n1)"
if [ "$tag" != "$version" ]; then
echo "Tag v$tag does not match Cargo.toml version $version. Refusing to release."
exit 1
fi
echo "Releasing warren-cli v$version"
- name: Download assets
uses: actions/download-artifact@v4
with:
path: ${{ runner.temp }}/dist
merge-multiple: true
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: ${{ runner.temp }}/dist/warren-linux-*.tar.gz
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish to crates.io
run: cargo publish --locked
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.RUST_TOKEN }}