name: Create Release

on:
  push:
    paths:
      - 'src/**'
      - 'dist/**'
      - 'package.json'
  workflow_dispatch:

jobs:
  create-release:
    runs-on: self-hosted

    steps:
      # Step 1: Check out the code
      - name: Checkout code
        uses: actions/checkout@v5

      # Step 2: Set up Node.js
      - name: Set up Node.js
        uses: actions/setup-node@v5
        with:
          node-version: 20

      # Step 3: Read the version from package.json
      - name: Get version from package.json
        id: get_version
        run: |
          PACKAGE_VERSION=$(node -p "require('./package.json').version")
          echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >> $GITHUB_ENV

      # Step 4: Check if tag already exists
      - name: Check if tag exists
        id: check_tag
        run: |
          if git ls-remote --tags origin | grep -q "refs/tags/${PACKAGE_VERSION}$"; then
            echo "exists=true" >> $GITHUB_OUTPUT
            echo "Tag ${PACKAGE_VERSION} already exists, skipping release"
          else
            echo "exists=false" >> $GITHUB_OUTPUT
          fi

      # Step 5: Create the tag
      - name: Create tag
        if: steps.check_tag.outputs.exists != 'true'
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git tag -a "${PACKAGE_VERSION}" -m "Release ${PACKAGE_VERSION}"
          git push origin "${PACKAGE_VERSION}"

      # Step 6: Create GitHub release
      - name: Create GitHub Release
        if: steps.check_tag.outputs.exists != 'true'
        uses: actions/create-release@v1
        with:
          tag_name: "${{ env.PACKAGE_VERSION }}"
          release_name: "Release ${{ env.PACKAGE_VERSION }}"
          draft: false
          prerelease: false
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
