name: Create Release
on:
  workflow_call:
    outputs:
      release_name:
        description: "Name of the created release"
        value: ${{ jobs.create_release.outputs.release_name }}
      success:
        description: "Was the release created successfully?"
        value: ${{ jobs.create_release.outputs.success }}

jobs:
  create_release:
    name: Create Release
    runs-on: ubuntu-latest
    outputs:
      release_name: ${{ steps.tag_version.outputs.new_tag }}
      success: ${{ steps.set_flag.outputs.success }}
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Changes since last tag
        id: changes
        run: |
          CHANGES=$(git log $(git describe --tags --abbrev=0)..HEAD --no-merges --oneline)
          echo "$CHANGES"
          if [ -z "$CHANGES" ]; then echo "changes=false" >> "$GITHUB_OUTPUT"; else echo "changes=true" >> "$GITHUB_OUTPUT"; fi

      - name: Bump version and push tag
        id: tag_version
        if: steps.changes.outputs.changes == 'true'
        uses: mathieudutour/github-tag-action@v6.2
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          default_bump: minor
          # default_bump: false

      - name: Create a GitHub release
        if: steps.changes.outputs.changes == 'true'
        uses: ncipollo/release-action@v1
        with:
          tag: ${{ steps.tag_version.outputs.new_tag }}
          name: ${{ steps.tag_version.outputs.new_tag }}
          body: ${{ steps.tag_version.outputs.changelog }}
          generateReleaseNotes: true

      - name: Set success/fail flag
        id: set_flag
        if: steps.changes.outputs.changes == 'true'
        run: if test "${{ steps.changes.outputs.changes }}" = "true"; then echo "success=true" >> "$GITHUB_OUTPUT"; else echo "success=false" >> "$GITHUB_OUTPUT"; fi