name: CI & Publish
on:
push:
branches: [master]
pull_request:
branches: [master]
release:
types: [published]
env:
CARGO_TERM_COLOR: always
jobs:
check:
name: Check & Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: nightly,stable
components: rustfmt,clippy
- run: cargo --version && rustc --version
- run: cargo install cargo-sort cargo-audit cargo-pants cargo-update cargo-udeps
- run: cargo install-update --all
- run: cargo sort --workspace --check
- run: cargo +nightly fmt --all --check
- run: cargo clippy --all-targets
- run: cargo audit
- run: cargo build --release
publish:
if: github.event_name == 'release'
needs: check
name: Publish to crates.io
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
- run: cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
release-assets:
if: github.event_name == 'release'
needs: publish
name: Upload Binaries to GitHub Release
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
- run: cargo build --release
- name: Rename binary
run: |
mkdir -p dist
BIN_NAME="cargo-toolchain-manager"
EXT=""
if [[ "${{ runner.os }}" == "Windows" ]]; then EXT=".exe"; fi
cp target/release/${BIN_NAME}${EXT} dist/${BIN_NAME}-${{ runner.os }}${EXT}
- uses: softprops/action-gh-release@v2
with:
files: dist/*