cargo-toolchain-manager 0.2.0

A CLI helper to install all stable (or custom) Rust versions via rustup.
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/*