Modernize GitHub Actions jobs #131
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build | |
on: [push, pull_request] | |
env: | |
CRATE: powerpack | |
jobs: | |
# --------------------------------------------------------------------------- | |
# Build | |
# --------------------------------------------------------------------------- | |
build: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
toolchain: [stable, beta, nightly] | |
env: | |
RUSTFLAGS: --deny warnings | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.toolchain }} | |
components: clippy, rustfmt | |
- name: Rustfmt | |
run: cargo fmt -- --check | |
- name: Clippy | |
continue-on-error: ${{ matrix.toolchain == 'nightly' }} | |
run: cargo clippy --workspace --all-targets | |
- name: Test | |
run: cargo test --workspace | |
# --------------------------------------------------------------------------- | |
# Check version against tag | |
# --------------------------------------------------------------------------- | |
prepare: | |
needs: build | |
if: startsWith(github.ref, 'refs/tags/') | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Calculate version from tag | |
id: version | |
run: echo "value=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT | |
- name: Check tag against package versions | |
run: | | |
grep '^version = "${{ steps.version.outputs.value }}"$' Cargo.toml | |
grep '^version = "${{ steps.version.outputs.value }}"$' crates/cli/Cargo.toml | |
grep '^version = "${{ steps.version.outputs.value }}"$' crates/detach/Cargo.toml | |
grep '^version = "${{ steps.version.outputs.value }}"$' crates/env/Cargo.toml | |
# --------------------------------------------------------------------------- | |
# Publish | |
# --------------------------------------------------------------------------- | |
publish: | |
needs: prepare | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
- name: Publish | |
env: | |
CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} | |
run: | | |
cargo publish --package powerpack-detach | |
cargo publish --package powerpack-env | |
cargo publish --package powerpack | |
cargo publish --package powerpack-cli | |
# --------------------------------------------------------------------------- | |
# Release | |
# --------------------------------------------------------------------------- | |
release: | |
needs: prepare | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
target: [x86_64-apple-darwin, aarch64-apple-darwin] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
target: ${{ matrix.target }} | |
- name: Calculate version from tag | |
id: version | |
run: echo "value=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT | |
- name: Build | |
run: cargo build --package powerpack-cli --locked --release --target ${{ matrix.target }} | |
- name: Archive | |
id: archive | |
run: | | |
mkdir release | |
archive=$CRATE-${{ steps.version.outputs.value }}-${{ matrix.target }}.tar.gz | |
cp target/${{ matrix.target }}/release/$CRATE release/$CRATE | |
cp LICENSE* release | |
cp README.md release | |
cd release | |
tar cfz "../$archive" -- * | |
cd .. | |
rm -r release | |
echo "path=$archive" >> $GITHUB_OUTPUT | |
- uses: softprops/action-gh-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
files: ${{ steps.archive.outputs.path }} |