name: npm-publish
on:
  push:
    branches:
      - main
jobs:
  npm-publish:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      id-token: write
    env:
      NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
    steps:
      - uses: actions/checkout@v6
      - name: Check commit message and version match
        id: check
        run: |
          COMMIT_MSG=$(git log -1 --pretty=%s)
          PKG_VERSION=$(node -p "require('./package.json').version")
          EXPECTED="Release ${PKG_VERSION}"
          if [[ "$COMMIT_MSG" == "$EXPECTED" ]]; then
            echo "should_publish=true" >> "$GITHUB_OUTPUT"
          else
            echo "Commit message '$COMMIT_MSG' does not match '$EXPECTED', skipping publish."
            echo "should_publish=false" >> "$GITHUB_OUTPUT"
          fi
      - uses: actions/setup-node@v4
        if: steps.check.outputs.should_publish == 'true'
        with:
          node-version: '20.x'
          registry-url: 'https://registry.npmjs.org'
      - name: Publish to npm
        if: steps.check.outputs.should_publish == 'true'
        run: npm publish --access public
      - name: Create git tag
        if: steps.check.outputs.should_publish == 'true'
        run: |
          VERSION=$(node -p "require('./package.json').version")
          git tag "v${VERSION}"
          git push origin "v${VERSION}"