cargo-all 0.2.5

Manage all your crates with a single command.
name: Release
on:
  push:
    tags:
      - "v[0-9]+.[0-9]+.[0-9]+"

env:
  CARGO_TERM_COLOR: always

jobs:
  build:
    name: Build ${{ matrix.target.name }} package
    runs-on: ${{ matrix.target.os }}
    strategy:
      matrix:
        target:
          [
            { name: x86_64-unknown-linux-gnu, os: ubuntu-latest },
            { name: aarch64-apple-darwin, os: macos-latest },
            {
              name: x86_64-pc-windows-msvc,
              os: windows-latest,
              extension: .exe,
            },
          ]
    steps:
      - name: Fetch latest code
        uses: actions/checkout@v4
      - name: Setup Rust toolchain
        run: rustup target add ${{ matrix.target.name }}
      - name: Build
        run: cargo build --profile ci-release --locked --target ${{ matrix.target.name }}
      - name: Compress
        run: |
          mv target/${{ matrix.target.name }}/ci-release/cargo-all${{ matrix.target.extension }} .
          zstd --ultra -22 -o cargo-all-${{ matrix.target.name }}.zst cargo-all${{ matrix.target.extension }}
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: cargo-all-${{ matrix.target.name }}
          path: cargo-all-${{ matrix.target.name }}.zst
          retention-days: 1

  release:
    name: Release
    runs-on: ubuntu-latest
    needs: [build]
    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v4
      - name: Hash
        run: |
          mkdir -p artifacts
          mv cargo-all-*/* artifacts/
          cd artifacts
          sha256sum * | tee ../SHA256
          md5sum * | tee ../MD5
          mv ../SHA256 .
          mv ../MD5 .
      - name: Publish
        uses: softprops/action-gh-release@v1
        with:
          discussion_category_name: Announcements
          generate_release_notes: true
          files: artifacts/*

  publish-on-crates-io:
    name: Publish on crates.io
    runs-on: ubuntu-latest
    steps:
      - name: Fetch latest code
        uses: actions/checkout@v4
      - name: Login
        run: cargo login ${{ secrets.CARGO_REGISTRY_TOKEN }}
      - name: Publish
        run: cargo publish --locked