name: On release
on:
  pull_request:
    types: closed
    branches: [main] # target branch of release PRs

jobs:
  info:
    if: github.event.pull_request.merged

    outputs:
      is-release: ${{ steps.meta.outputs.is-release }}
      crate: ${{ steps.meta.outputs.crates-names }}
      version: ${{ steps.meta.outputs.version-actual }}
      notes: ${{ steps.meta.outputs.notes }}

    runs-on: ubuntu-latest
    steps:
    - id: meta
      uses: cargo-bins/release-meta@v1
      with:
        event-data: ${{ toJSON(github.event) }}
        extract-notes-under: '### Release notes'

  tag:
    if: needs.info.outputs.is-release == 'true'
    needs: info
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Push lib release tag
      if: needs.info.outputs.crate != 'cargo-binstall'
      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 }}-v
    - name: Push cli release tag
      if: needs.info.outputs.crate == 'cargo-binstall'
      uses: mathieudutour/github-tag-action@v6.1
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        custom_tag: ${{ needs.info.outputs.version }}
        tag_prefix: v

  package:
    if: needs.info.outputs.is-release == 'true' && needs.info.outputs.crate == 'cargo-binstall'
    needs:
    - info
    - tag
    uses: ./.github/workflows/release-build.yml
    with:
      publish: ${{ toJSON(needs.info.outputs) }}