name: Release

on:
  push:
    tags:
      - "v*"

jobs:
  build:
    name: Build (${{ matrix.os }})
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - os: ubuntu-22.04
            target: x86_64-unknown-linux-gnu
            ext: ""
            asset_name: x86_64-unknown-linux-gnu
          - os: ubuntu-22.04-arm
            target: aarch64-unknown-linux-gnu
            ext: ""
            asset_name: aarch64-unknown-linux-gnu
          - os: windows-latest
            target: x86_64-pc-windows-msvc
            ext: ".exe"
            asset_name: x86_64-pc-windows-msvc
          - os: macos-latest
            target: aarch64-apple-darwin
            ext: ""
            asset_name: aarch64-apple-darwin
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rust-lang/setup-rust-toolchain@v1
      - name: Build
        run: cargo build --release --target ${{ matrix.target }}
      - name: Rename artifact
        run: |
          mv target/${{ matrix.target }}/release/mq-update${{ matrix.ext }} target/${{ matrix.target }}/release/mq-update-${{ matrix.asset_name}}${{ matrix.ext }}
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: mq-update-${{ matrix.asset_name }}
          path: |
            target/${{ matrix.target }}/release/mq-update-${{ matrix.asset_name}}${{ matrix.ext }}
          if-no-files-found: error
          retention-days: 1

  release:
    name: Create Release
    needs: build
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: write
    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v4
        with:
          pattern: mq-update*
          path: target
      - name: Generate checksums
        run: |
          cd target
          for file in mq-update*/*; do
            sha256sum "$file" >> checksums.txt
          done
          mkdir checksums
          mv checksums.txt ./checksums/checksums.txt
      - name: Create Release
        id: create_release
        uses: softprops/action-gh-release@v2
        with:
          files: target/*/*
          draft: true
          prerelease: false
          generate_release_notes: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
