name: CI/CD Pipeline

on:
  push:
    branches:
      - main
      - master

permissions:
  contents: write
  pull-requests: write

jobs:
  version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          token: ${{ secrets.GITHUB_TOKEN }}
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 'latest'
      
      - name: Configure Git
        run: |
          git config --global user.name "GitHub Actions"
          git config --global user.email "github-actions@github.com"
      
      - name: Bump Version
        run: |
          git config --global url."https://${{ secrets.GITHUB_TOKEN }}@github.com/".insteadOf "https://github.com/"
          npm version patch -m "[skip ci] Bump version to %s"
          git push origin HEAD:${{ github.ref_name }} --tags
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  publish:
    needs: version
    runs-on: ubuntu-latest
    env: 
      NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 'latest'
      - name: Check if NPM_TOKEN is defined
        run: |
          if [ -z "$NODE_AUTH_TOKEN" ]; then
            echo "❌ NODE_AUTH_TOKEN is EMPTY"
            exit 1
          else
            echo "✅ NODE_AUTH_TOKEN is SET"
          fi
      - name: Manually write .npmrc
        run: echo "//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}" > ~/.npmrc
      - run: npm ci
      - run: npm whoami
      - run: echo "Publishing version $(node -p "require('./package.json').version") of $(node -p "require('./package.json').name")"
      - run: npm publish