name: CI on: push: branches: [main] tags: ['v*'] pull_request: branches: [main] jobs: build: name: Typecheck, Test & Build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '24' cache: 'npm' - name: Install dependencies run: npm ci - name: Audit production dependencies run: npm audit --omit=dev - name: Audit dev dependencies (report only) run: npm audit || true - name: Typecheck run: npm run typecheck - name: Run tests run: npm test - name: Build library run: npm run build - name: Upload dist artifact uses: actions/upload-artifact@v4 with: name: dist path: dist/ publish: name: Publish to npm runs-on: ubuntu-latest needs: build if: startsWith(github.ref, 'refs/tags/v') permissions: id-token: write contents: read steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: '24' registry-url: 'https://registry.npmjs.org' cache: 'npm' - name: Install dependencies run: npm ci - 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 - name: Ensure npm CLI supports trusted publishing (>=11.5.1) run: npm install -g npm@latest - name: Build library run: npm run build - name: Publish package (npm trusted publishing / OIDC) run: npm publish --access public env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true