name: npm publish on: push: tags: - 'v*' workflow_dispatch: jobs: publish: runs-on: ubuntu-latest permissions: contents: read steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 registry-url: https://registry.npmjs.org/ - name: Verify tag matches package version (tag pushes only) if: github.event_name == 'push' run: | TAG="${GITHUB_REF#refs/tags/}" VER="v$(node -p "require('./package.json').version")" if [ "$TAG" != "$VER" ]; then echo "::error::tag ${TAG} does not match package version ${VER} — bump package.json first" exit 1 fi - name: Publish to npm run: npm publish env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}