cargo-all 0.2.0

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-apple-darwin, os: macos-latest },
            {
              name: x86_64-pc-windows-msvc,
              os: windows-latest,
              extension: .exe,
            },
          ]
    steps:
      - name: Fetch latest code
        uses: actions/checkout@v3
      - name: Setup Rust toolchain
        run: rustup target add ${{ matrix.target.name }}
      - name: Build
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: --release --locked --target ${{ matrix.target.name }}
      - name: Compress
        run: |
          mv target/${{ matrix.target.name }}/release/cargo-all${{ matrix.target.extension }} .
          zstd --ultra -22 -o cargo-all-${{ matrix.target.name }}.zst cargo-all${{ matrix.target.extension }}
      - name: Collect artifact
        run: |
          mkdir -p artifacts
          mv cargo-all-${{ matrix.target.name }}.zst artifacts
      - name: Upload artifact
        uses: actions/upload-artifact@v3.1.2
        with:
          name: artifacts
          path: artifacts

  release:
    name: Release
    runs-on: ubuntu-latest
    needs: [build]
    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v3
        with:
          name: artifacts
          path: artifacts
      - name: Hash
        run: |
          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@v3
      - name: Login
        run: cargo login ${{ secrets.CARGO_REGISTRY_TOKEN }}
      - name: Publish
        run: cargo publish

  clean-artifacts:
    name: Clean artifacts
    if: always()
    needs: [release]
    steps:
      - name: Clean artifacts
        uses: geekyeggo/delete-artifact@v2
        with:
          name: artifacts
    runs-on: ubuntu-latest