permissions:
contents: write
on:
push:
branches: [main]
tags: ["v*"]
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- uses: Swatinem/rust-cache@v2
- run: cargo test --all-features --workspace
- run: cargo fmt --all --check
- run: cargo clippy --all-targets --all-features --workspace -- -D warnings
- env:
RUSTDOCFLAGS: -D warnings
run: cargo doc --no-deps --document-private-items --all-features --workspace --examples
build:
if: startsWith(github.ref, 'refs/tags/v')
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- run: sudo apt-get install -y musl-tools
- uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-unknown-linux-musl
- uses: Swatinem/rust-cache@v2
- run: cargo build --release --target x86_64-unknown-linux-musl
- run: |
PACKAGE_NAME=$(cargo metadata --no-deps --format-version=1 | jq -r '.packages[0].name')
BINS=($(cargo metadata --no-deps --format-version=1 | jq -r '.packages[].targets[] | select(.kind[]=="bin").name'))
BASE_NAME="${PACKAGE_NAME}-${GITHUB_REF_NAME}-x86_64-unknown-linux-musl"
ARCHIVE="${BASE_NAME}.tar.gz"
CHECKSUM="${BASE_NAME}.sha256"
cd target/x86_64-unknown-linux-musl/release
strip "${BINS[@]}"
tar czf "../../../$ARCHIVE" "${BINS[@]}"
cd ../../../
sha256sum "$ARCHIVE" > "$CHECKSUM"
- uses: actions/upload-artifact@v4
with:
path: |
*.tar.gz
*.sha256
release:
if: startsWith(github.ref, 'refs/tags/v')
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
- name: Publish to crates.io
run: cargo publish
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
- uses: actions/download-artifact@v4
- uses: softprops/action-gh-release@v2
with:
files: |
*.tar.gz
*.sha256
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}