name: Release on: push: branches: - release jobs: release: name: Release runs-on: ubuntu-latest permissions: contents: write id-token: write packages: write pull-requests: write steps: - name: Checkout code uses: actions/checkout@v7 with: # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits fetch-depth: 0 - uses: pnpm/action-setup@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: '20' cache: 'pnpm' - run: pnpm install env: HUSKY: 0 - run: pnpm build - run: pnpm test - name: Ensure main is present run: | git checkout main git checkout release - name: Prep commit message run: | echo "NEW_VERSION=$(pnpm changeset status --output=release.json > /dev/null && jq -r '.releases[0].newVersion' release.json && rm release.json)" >> "$GITHUB_ENV" - name: Create PR or publish to npm id: changesets uses: changesets/action@v1 with: version: pnpm changeset:version publish: pnpm changeset publish title: 'Release v${{ env.NEW_VERSION }}' commit: 'Release v${{ env.NEW_VERSION }}' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} NPM_CONFIG_PROVENANCE: true - name: Create pull request if: steps.changesets.outputs.published == 'true' run: gh pr create -B main -H release --title 'Merge release into main' --body 'Merges release into main' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}