name: Release
on:
  push:
    branches:
      - main
    tags-ignore:
      - "*"

jobs:
  info:
    runs-on: ubuntu-latest
    # the commit message will look like: `release: {crate-name} v{version} (#{pr-number})`
    if: "startsWith(github.event.head_commit.message, 'release: ')"
    outputs:
      crate: ${{ steps.version.outputs.crate }}
      version: ${{ steps.version.outputs.version }}
      notes: ${{ fromJSON(steps.notes.outputs.notes_json) }}
    env:
      COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
    steps:
    - uses: actions/checkout@v3
    - name: Extract tag from commit message
      id: version
      run: .github/scripts/extract-tag-from-release-commit.sh
    - name: Extract release notes
      id: notes
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        GITHUB_REPO: ${{ github.repository }}
      run: .github/scripts/extract-release-notes.sh

  tag:
    needs: info
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Push lib release tag
      if: "! startsWith(github.event.head_commit.message, 'release: cargo-binstall v')"
      uses: mathieudutour/github-tag-action@v6.1
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        custom_tag: ${{ needs.info.outputs.version }}
        tag_prefix: ${{ needs.info.outputs.crate }}-
    - name: Push cli release tag
      if: "startsWith(github.event.head_commit.message, 'release: cargo-binstall v')"
      uses: mathieudutour/github-tag-action@v6.1
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        custom_tag: ${{ needs.info.outputs.version }}
        tag_prefix: ''

  build:
    if: "startsWith(github.event.head_commit.message, 'release: cargo-binstall v')"
    needs: info # not really, but just so it fails fast
    uses: ./.github/workflows/build.yml
    with:
      for_release: true

  release:
    if: "startsWith(github.event.head_commit.message, 'release: cargo-binstall v')"
    needs:
      - info
      - tag
      - build
    name: Package and release
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Get outputs
      uses: actions/download-artifact@v3
      with:
        path: outputs/

    - name: Pack archives
      run: .github/scripts/pack-release-archives.sh

    - name: Publish release
      uses: softprops/action-gh-release@1e07f4398721186383de40550babbdf2b84acfc5
      with:
        tag_name: ${{ needs.info.outputs.version }}
        name: ${{ needs.info.outputs.version }}
        body: ${{ needs.info.outputs.notes }}
        append_body: true
        files: |
          outputs/cargo-binstall-*.zip
          outputs/cargo-binstall-*.tgz
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}