name: Release

on:
    workflow_dispatch:
        inputs:
            author:
                description: "GitHub Author Username"
                required: true
                default: "capricorn86"

jobs:
    check-next-version:
        runs-on: ubuntu-latest

        strategy:
            matrix:
                node-version: [24]

        outputs:
            next_version: ${{ steps.versionCheck.outputs.next_version }}
            current_version: ${{ steps.versionCheck.outputs.current_version }}

        steps:
            - uses: actions/checkout@v4
              with:
                  fetch-depth: 0
                  token: ${{ secrets.GIT_REPOSITORY_ACCESS_TOKEN }}
                  ref: main

            - name: Use Node.js ${{ matrix.node-version }}
              uses: actions/setup-node@v4
              with:
                  node-version: ${{ matrix.node-version }}

            - name: Install dependencies
              run: npm ci --ignore-scripts

            - id: versionCheck
              run: |
                  echo "next_version=$(node ./node_modules/.bin/happy-next-version)" >> $GITHUB_OUTPUT
                  echo "current_version=$(node ./node_modules/.bin/happy-current-version)" >> $GITHUB_OUTPUT

    publish:
        runs-on: ubuntu-latest
        needs: [check-next-version]
        if: ${{ needs.check-next-version.outputs.next_version != '' }}

        strategy:
            matrix:
                node-version: [24]

        steps:
            - uses: actions/checkout@v4
              with:
                  fetch-depth: 0
                  token: ${{ secrets.GIT_REPOSITORY_ACCESS_TOKEN }}
                  ref: main

            - name: Use Node.js ${{ matrix.node-version }}
              uses: actions/setup-node@v4
              with:
                  node-version: ${{ matrix.node-version }}

            - name: Install dependencies
              run: npm ci --ignore-scripts

            - name: Set version
              run: npm --no-git-tag-version version ${{needs.check-next-version.outputs.next_version }}

            - name: Compile packages
              run: npm run compile

            - name: Pushes Git tag
              run: |
                  git tag --force v${{ needs.check-next-version.outputs.next_version }} ${GITHUB_SHA}
                  git push origin --tags

            - name: Set .npmrc for publish
              run: |
                  echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_PUBLISH_TOKEN }}" > ./.npmrc
                  npm whoami

            - name: Publish packages
              run: npm publish

    create-release:
        runs-on: ubuntu-latest
        needs: [publish, check-next-version]

        strategy:
            matrix:
                node-version: [24]

        steps:
            - uses: actions/checkout@v4
              with:
                  fetch-depth: 0
                  token: ${{ secrets.GIT_REPOSITORY_ACCESS_TOKEN }}
                  ref: main

            - name: Use Node.js ${{ matrix.node-version }}
              uses: actions/setup-node@v4
              with:
                  node-version: ${{ matrix.node-version }}

            - name: Install dependencies
              run: npm ci --ignore-scripts

            - name: Generate release notes
              run: node ./node_modules/.bin/happy-release-notes --authorUsername=${{ github.event.inputs.author }} > ./RELEASE_NOTES.md

            - name: Create release
              id: create_release
              uses: actions/create-release@v1
              env:
                  GITHUB_TOKEN: ${{ secrets.GIT_REPOSITORY_ACCESS_TOKEN }}
              with:
                  tag_name: v${{ needs.check-next-version.outputs.next_version }}
                  release_name: v${{ needs.check-next-version.outputs.next_version }}
                  body_path: ./RELEASE_NOTES.md
                  draft: false
                  prerelease: false
