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'

  release-lib:
    if: needs.info.outputs.is-release == 'true' && needs.info.outputs.crate != 'cargo-binstall'
    needs: info
    permissions:
      contents: write
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Push lib release tag
      if: needs.info.outputs.crate != 'cargo-binstall'
      uses: mathieudutour/github-tag-action@v6.2
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        custom_tag: ${{ needs.info.outputs.version }}
        tag_prefix: ${{ needs.info.outputs.crate }}-v
    - name: Publish to crates.io
      run: |
        cargo publish -p '${{ needs.info.outputs.crate }}'
      env:
        CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

  release-cli:
    if: needs.info.outputs.crate == 'cargo-binstall'
    needs: info
    uses: ./.github/workflows/release-cli.yml
    secrets: inherit
    with:
      info: ${{ toJSON(needs.info.outputs) }}