name: Publish to npm

on:
  push:
    tags:
      - 'v*'

jobs:
  publish:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
          registry-url: 'https://registry.npmjs.org/'

      - name: Install dependencies
        run: npm ci

      - name: Build
        run: npm run build

      - name: Determine npm tag
        id: tag
        run: |
          # Extract tag name without "refs/tags/"
          TAG_REF=${GITHUB_REF#refs/tags/}
          echo "Detected Git tag: $TAG_REF"

          # Determine npm tag
          if [[ "$TAG_REF" == *-* ]]; then
            # prerelease (contains a hyphen)
            NPM_TAG=$(echo "$TAG_REF" | sed -E 's/^v[0-9]+\.[0-9]+\.[0-9]+-([a-zA-Z0-9]+).*/\1/')
          else
            NPM_TAG="latest"
          fi
          echo "npm publish will use tag: $NPM_TAG"
          echo "tag=$NPM_TAG" >> $GITHUB_OUTPUT

      - name: Publish to npm
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
        run: npm publish --tag ${{ steps.tag.outputs.tag }}
