name: release

on:
  push:
    tags:
      - v*.*.*
  workflow_dispatch:

jobs:
  goreleaser:
    runs-on: ubuntu-24.04
    steps:
    - name: Harden Runner
      uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
      with:
        egress-policy: audit

    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
      with:
        submodules: true

    - uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5
      with:
        go-version-file: go.mod

    - name: Run GoReleaser for stable release
      uses: goreleaser/goreleaser-action@9c156ee8a17a598857849441385a2041ef570552 # v6
      if: (!contains(github.ref, 'pre'))
      with:
        # You can pass flags to goreleaser via GORELEASER_ARGS
        # --clean will save you deleting the dist dir
        args: release --clean
        distribution: goreleaser # or 'goreleaser-pro'
        version: "~> v2" # or 'latest', 'nightly', semver
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    - name: Generate changelog for pre release
      if: contains(github.ref, 'pre')
      id: changelog
      run: |
        echo "RELEASE_TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
        gh api repos/$GITHUB_REPOSITORY/releases/generate-notes \
          -f tag_name="${GITHUB_REF#refs/tags/}" \
          -f target_commitish=main \
          -q .body > tmp-CHANGELOG.md
      env:
        GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
