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@34e114876b0b11c390a56381ad16ebd13914f8d5
- 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@1.88.0
- name: Cache cargo registry & build
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 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@153bb8e04406b158c6c84fc1615b65b24149a1fe 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@34e114876b0b11c390a56381ad16ebd13914f8d5
- 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@1.88.0
- name: Authenticate with crates.io
uses: rust-lang/crates-io-auth-action@v1
id: auth
- name: Publish to crates.io
run: cargo publish
env:
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}