name: Release

on:
  push:
    tags:
      - 'v*'

permissions:
  contents: write

jobs:
  release:
    name: Create GitHub Release
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Generate release notes
        id: notes
        run: |
          previous_tag=$(git describe --tags --abbrev=0 "${GITHUB_REF_NAME}^" 2>/dev/null || true)
          {
            echo "notes<<EOF"
            if [ -n "$previous_tag" ]; then
              echo "## Changes since ${previous_tag}"
              echo
              git log --pretty=format:'- %s (%h)' "${previous_tag}..${GITHUB_REF_NAME}"
            else
              echo "## Changes"
              echo
              git log --pretty=format:'- %s (%h)' "${GITHUB_REF_NAME}"
            fi
            echo
            echo EOF
          } >> "$GITHUB_OUTPUT"

      - name: Create release
        uses: softprops/action-gh-release@v2
        with:
          tag_name: ${{ github.ref_name }}
          name: ${{ github.ref_name }}
          body: ${{ steps.notes.outputs.notes }}
          draft: false
          prerelease: ${{ contains(github.ref_name, '-') }}
