name: Release

permissions:
  contents: write

on:
  push:
    tags:
      - v[0-9]+.*

jobs:
  create-release:
    name: Create GH release draft
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v5

      - name: Create the release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: gh release create ${{ github.ref_name }} --draft --verify-tag --title ${{ github.ref_name }}

  upload-binary:
    needs: create-release
    name: ${{ matrix.target }}
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            target: x86_64-unknown-linux-gnu
            use-cross: false

          - os: ubuntu-latest
            target: x86_64-unknown-linux-musl
            use-cross: false

          - os: ubuntu-latest
            target: aarch64-unknown-linux-gnu
            use-cross: true

          - os: macos-latest
            target: x86_64-apple-darwin
            use-cross: false

          - os: macos-latest
            target: aarch64-apple-darwin
            use-cross: false

    env:
      CARGO: cargo

    steps:
      - uses: actions/checkout@v5

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}

      - name: Install cross
        if: matrix.use-cross
        uses: taiki-e/install-action@v2
        with:
          tool: cross

      - name: Overwrite build command env variable
        if: matrix.use-cross
        shell: bash
        run: echo "CARGO=cross" >> $GITHUB_ENV

      - name: Install build deps
        shell: bash
        run: |
          if [[ ${{ matrix.target }} == x86_64-unknown-linux-musl ]]; then
              sudo apt-get update
              sudo apt-get install -y musl-tools
          fi

      - name: Build release binary
        run: ${{ env.CARGO }} build --release --locked --target ${{ matrix.target }}

      - name: Upload the binary to the release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          mv target/${{ matrix.target }}/release/asciinema target/release/asciinema-${{ matrix.target }}
          gh release upload ${{ github.ref_name }} target/release/asciinema-${{ matrix.target }}
