name: Release # Publishes the package when a GitHub release is published. # The release tag must match the version in package.json (e.g. v1.1.0). on: release: types: [published] permissions: contents: read jobs: test: runs-on: ubuntu-latest strategy: matrix: node-version: [22, 24, 26] steps: - uses: actions/checkout@v7 - uses: actions/setup-node@v7 with: node-version: ${{ matrix.node-version }} package-manager-cache: false - run: npm ci - run: npm run lint - run: npm test publish: needs: test runs-on: ubuntu-latest environment: npm permissions: contents: read id-token: write # npm trusted publishing (OIDC) and provenance steps: - uses: actions/checkout@v7 - uses: actions/setup-node@v7 with: node-version: 24 registry-url: https://registry.npmjs.org package-manager-cache: false - name: Check that the tag matches package.json env: TAG: ${{ github.event.release.tag_name }} run: | VERSION="$(node -p "require('./package.json').version")" if [ "${TAG#v}" != "$VERSION" ]; then echo "::error::Release tag $TAG does not match package.json version $VERSION" exit 1 fi - run: npm ci - name: Publish # Uses npm trusted publishing when configured on npmjs.com, # otherwise falls back to the NPM_TOKEN secret. run: npm publish --provenance --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}