diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 00000000..e466adc2 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,57 @@ +name: Release + +on: + push: + tags: + - 'v*.*.*' + - 'v*.*.*-*' +permissions: + contents: write + id-token: write + packages: write + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '26.x' + registry-url: 'https://registry.npmjs.org' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Run all checks and build + run: npm run all + + - name: Verify the integrity of provenance attestations and registry signatures for installed dependencies + run: npm audit signatures + + - name: Determine npm tag and release type + id: release-info + run: | + VERSION=$(node -p "require('./package.json').version") + if [[ "$VERSION" =~ -.*$ ]]; then + echo "npm_tag=next" >> $GITHUB_OUTPUT + echo "is_prerelease=true" >> $GITHUB_OUTPUT + else + echo "npm_tag=latest" >> $GITHUB_OUTPUT + echo "is_prerelease=false" >> $GITHUB_OUTPUT + fi + + - name: Stage publish to npm + run: npm stage publish --provenance --access public --tag ${{ steps.release-info.outputs.npm_tag }} + + - name: Create GitHub Release + uses: softprops/action-gh-release@v3 + with: + generate_release_notes: true + prerelease: true + make_latest: false