# Cuts a GitHub release with prebuilt binaries whenever a v* tag is pushed.
#
# Build provenance attestations are generated for all binaries. Users can verify
# a downloaded binary with:
#   gh attestation verify buildifier-linux-amd64 --repo bazel-contrib/buildtools
name: Release

on:
  push:
    tags:
      - "v*"

# Never let two runs race on the release for the same tag.
concurrency:
  group: release-${{ github.ref_name }}

jobs:
  release:
    runs-on: ubuntu-latest
    timeout-minutes: 60
    permissions:
      # Create the release and upload its assets.
      contents: write
      # Generate build provenance attestations, see
      # https://github.com/actions/attest#usage
      id-token: write
      attestations: write
      artifact-metadata: write
    env:
      TAG: ${{ github.ref_name }}
    steps:
      - name: Check out ${{ env.TAG }}
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          # status.py stamps the binaries with the output of `git describe --tags`.
          fetch-depth: 0

      - name: Build release binaries
        run: release/build_binaries.sh dist

      - name: Attest build provenance
        uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2
        with:
          subject-path: dist/*

      - name: Create or update the release
        shell: bash
        env:
          GH_TOKEN: ${{ github.token }}
          GH_REPO: ${{ github.repository }}
        run: |
          if release="$(gh release view "${TAG}" --json isDraft,isImmutable 2> /dev/null)"; then
            is_draft="$(jq -r .isDraft <<< "${release}")"
            if [[ "${is_draft}" == false && "$(jq -r .isImmutable <<< "${release}")" == true ]]; then
              echo "::error::The release for ${TAG} has already been published as immutable," \
                "so its assets can no longer be changed. Cut a new release with a new tag instead."
              exit 1
            fi
            echo "Attaching binaries to the existing release for ${TAG}"
          else
            echo "Creating a draft release for ${TAG}"
            gh release create "${TAG}" --draft --verify-tag --generate-notes \
              --title "Release ${TAG#v} ($(date +%Y-%m-%d))"
            is_draft=true
          fi

          gh release upload "${TAG}" --clobber dist/*

          if [[ "${is_draft}" == true ]]; then
            echo "Publishing the release for ${TAG}"
            gh release edit "${TAG}" --draft=false
          fi
