name: CI on: push: branches: [master] tags: ["v*"] pull_request: branches: [master] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "20" cache: "npm" - run: npm ci - run: npm run typecheck - run: npm test publish: needs: test runs-on: ubuntu-latest if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') permissions: id-token: write steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "20" cache: "npm" registry-url: "https://registry.npmjs.org" - name: Verify tag matches package.json version run: | TAG_VERSION="${GITHUB_REF#refs/tags/v}" PKG_VERSION=$(node -p "require('./package.json').version") if [ "$TAG_VERSION" != "$PKG_VERSION" ]; then echo "Tag v$TAG_VERSION does not match package.json version $PKG_VERSION" exit 1 fi - run: npm ci - run: npm run build - run: npm publish --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}