name: Build and Release
on:
push:
tags:
- 'v*'
jobs:
build:
name: Build Linux binary
runs-on: ubuntu-22.04
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y pkg-config libssl-dev libdbus-1-dev
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 with:
toolchain: "1.88.0"
- name: Cache cargo registry & build
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-1.88.0-x86_64-unknown-linux-gnu-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Build release binary
run: cargo build --release --locked
- name: Prepare release asset
run: |
VERSION="${GITHUB_REF_NAME#v}"
echo "VERSION=${VERSION}" >> "$GITHUB_ENV"
cp target/release/ferrosonic "target/release/ferrosonic-${VERSION}-linux-x86_64"
sha256sum "target/release/ferrosonic-${VERSION}-linux-x86_64" > "target/release/ferrosonic-${VERSION}-linux-x86_64.sha256"
- name: Create GitHub Release
uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda with:
files: |
target/release/ferrosonic-${{ env.VERSION }}-linux-x86_64
target/release/ferrosonic-${{ env.VERSION }}-linux-x86_64.sha256
generate_release_notes: true
publish:
name: Publish to crates.io
needs: build
runs-on: ubuntu-22.04
environment: release
permissions:
contents: read
id-token: write
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y pkg-config libssl-dev libdbus-1-dev
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 with:
toolchain: "1.88.0"
- name: Cache cargo registry
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-1.88.0-cargo-publish-${{ hashFiles('**/Cargo.lock') }}
- name: Authenticate with crates.io
uses: rust-lang/crates-io-auth-action@bbd81622f20ce9e2dd9622e3218b975523e45bbe id: auth
- name: Publish to crates.io
run: cargo publish
env:
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}