name: Create GitHub Release and Publish to crates.io
on:
push:
tags: ['v*']
jobs:
validate:
name: Validate release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - run: rustup update stable
- run: rustup default stable
- run: rustup component add rustfmt clippy
- name: Tag matches Cargo.toml version
run: |
set -euo pipefail
tag_version="${GITHUB_REF_NAME#v}"
cargo_version="$(cargo metadata --format-version=1 --no-deps \
| jq -r '.packages[] | select(.name == "elint") | .version')"
if [ "$tag_version" != "$cargo_version" ]; then
echo "tag version ($tag_version) does not match Cargo.toml version ($cargo_version)"
exit 1
fi
- run: cargo test --all
- run: cargo test --doc
- run: cargo fmt --all -- --check
- run: cargo clippy --all -- -D warnings
- env:
RUSTDOCFLAGS: -D warnings
run: cargo doc --no-deps
- run: cargo publish --dry-run
publish:
needs: validate
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: rust-lang/crates-io-auth-action@c6f97d42243bad5fab37ca0427f495c86d5b1a18 id: auth
- run: cargo publish
env:
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
github-release:
needs: publish
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - id: create-release
run: gh release create ${{ github.ref_name }} --title "${{ github.ref_name }}" --generate-notes
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
linux-x86_64-binary:
name: Upload Binary for Linux x86_64
needs: github-release
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - run: sudo apt install -y musl-tools
- run: rustup update stable
- run: rustup target add x86_64-unknown-linux-musl
- run: cargo build --release --target=x86_64-unknown-linux-musl
- name: Upload Release Asset
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
mv target/x86_64-unknown-linux-musl/release/elint \
elint-${GITHUB_REF_NAME#v}.x86_64-unknown-linux-musl
gh release upload ${{ github.ref_name }} \
elint-${GITHUB_REF_NAME#v}.x86_64-unknown-linux-musl
linux-arm64-binary:
name: Upload Binary for Linux arm64
needs: github-release
runs-on: ubuntu-24.04-arm
permissions:
contents: write
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - run: sudo apt install -y musl-tools
- run: rustup update stable
- run: rustup target add aarch64-unknown-linux-musl
- run: cargo build --release --target=aarch64-unknown-linux-musl
- name: Upload Release Asset
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
mv target/aarch64-unknown-linux-musl/release/elint \
elint-${GITHUB_REF_NAME#v}.aarch64-unknown-linux-musl
gh release upload ${{ github.ref_name }} \
elint-${GITHUB_REF_NAME#v}.aarch64-unknown-linux-musl
macos-binary:
name: Upload Binary for macOS
needs: github-release
runs-on: macos-15
permissions:
contents: write
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - run: rustup update stable
- run: rustup target add aarch64-apple-darwin
- run: cargo build --release --target=aarch64-apple-darwin
- name: Upload Release Asset
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
mv target/aarch64-apple-darwin/release/elint \
elint-${GITHUB_REF_NAME#v}.aarch64-apple-darwin
gh release upload ${{ github.ref_name }} \
elint-${GITHUB_REF_NAME#v}.aarch64-apple-darwin