[ci] release (#1109) #718
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| push: | |
| branches: | |
| - main | |
| permissions: | |
| id-token: write # Required for OIDC | |
| contents: write | |
| pull-requests: write | |
| packages: write | |
| concurrency: ${{ github.workflow }}-${{ github.ref }} | |
| env: | |
| CI: true | |
| jobs: | |
| release: | |
| name: Release | |
| runs-on: ubuntu-latest | |
| environment: | |
| name: 'release' | |
| steps: | |
| - name: Checkout Repo | |
| uses: actions/checkout@v4 | |
| - uses: pnpm/action-setup@v4 | |
| name: Install pnpm | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| cache: 'pnpm' | |
| registry-url: 'https://registry.npmjs.org' | |
| - name: Setup Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: latest | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: wasm32-wasip1 | |
| - name: Install Dependencies | |
| # not frozen since we are using workspaces & package versions will change | |
| run: pnpm install --no-frozen-lockfile | |
| - name: Build packages | |
| run: pnpm run build:release | |
| env: | |
| SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} | |
| - name: Create Release Pull Request or Publish to npm | |
| id: changesets | |
| uses: changesets/action@v1 | |
| with: | |
| publish: pnpm run release | |
| commit: '[ci] release' | |
| title: '[ci] release' | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Trigger benchmark baseline update | |
| if: steps.changesets.outputs.published == 'true' | |
| uses: peter-evans/repository-dispatch@v3 | |
| with: | |
| event-type: release-published | |
| client-payload: '{"publishedPackages": ${{ steps.changesets.outputs.publishedPackages }}}' | |
| # gt (primary CLI package, lives in packages/cli/) | |
| - name: Check if gt was published | |
| id: check-gt | |
| if: steps.changesets.outputs.published == 'true' | |
| run: | | |
| published_packages='${{ steps.changesets.outputs.publishedPackages }}' | |
| if echo "$published_packages" | grep -q '"name": *"gt"'; then | |
| echo "should_release_bin=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "should_release_bin=false" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Extract gt version | |
| id: gt-version | |
| if: steps.check-gt.outputs.should_release_bin == 'true' | |
| run: | | |
| published_packages='${{ steps.changesets.outputs.publishedPackages }}' | |
| version=$(echo "$published_packages" | grep -A1 '"name": *"gt"' | grep '"version"' | sed 's/.*"version": *"\([^"]*\)".*/\1/') | |
| echo "version=$version" >> $GITHUB_OUTPUT | |
| - name: Build gt binaries | |
| if: steps.check-gt.outputs.should_release_bin == 'true' | |
| run: pnpm --filter gt run build:bin:clean | |
| - name: Upload gt binaries to R2 | |
| if: steps.check-gt.outputs.should_release_bin == 'true' | |
| uses: ryand56/r2-upload-action@v1.4 | |
| with: | |
| r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} | |
| r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} | |
| r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} | |
| r2-bucket: ${{ secrets.R2_BUCKET_NAME }} | |
| source-dir: packages/cli/binaries | |
| destination-dir: cli/v${{ steps.gt-version.outputs.version }} | |
| - name: Upload gt binaries to R2 (latest) | |
| if: steps.check-gt.outputs.should_release_bin == 'true' | |
| uses: ryand56/r2-upload-action@v1.4 | |
| with: | |
| r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} | |
| r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} | |
| r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} | |
| r2-bucket: ${{ secrets.R2_BUCKET_NAME }} | |
| source-dir: packages/cli/binaries | |
| destination-dir: cli/latest | |
| - name: Release gt binary to npm | |
| if: steps.check-gt.outputs.should_release_bin == 'true' | |
| run: pnpm --filter gt run bin:prep && pnpm --filter gt publish --tag bin --no-git-checks && pnpm --filter gt run bin:restore && pnpm --filter gt run build:clean | |
| env: | |
| NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
| # gtx-cli (backward-compat wrapper, lives in packages/gtx-cli/) | |
| - name: Check if gtx-cli was published | |
| id: check-gtx-cli | |
| if: steps.changesets.outputs.published == 'true' | |
| run: | | |
| published_packages='${{ steps.changesets.outputs.publishedPackages }}' | |
| if echo "$published_packages" | grep -q '"name": *"gtx-cli"'; then | |
| echo "should_release_bin=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "should_release_bin=false" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Extract gtx-cli version | |
| id: gtx-cli-version | |
| if: steps.check-gtx-cli.outputs.should_release_bin == 'true' | |
| run: | | |
| published_packages='${{ steps.changesets.outputs.publishedPackages }}' | |
| version=$(echo "$published_packages" | grep -A1 '"name": *"gtx-cli"' | grep '"version"' | sed 's/.*"version": *"\([^"]*\)".*/\1/') | |
| echo "version=$version" >> $GITHUB_OUTPUT | |
| - name: Build gtx-cli binaries | |
| if: steps.check-gtx-cli.outputs.should_release_bin == 'true' | |
| run: pnpm --filter gtx-cli run build:bin:clean | |
| - name: Upload gtx-cli binaries to R2 | |
| if: steps.check-gtx-cli.outputs.should_release_bin == 'true' | |
| uses: ryand56/r2-upload-action@v1.4 | |
| with: | |
| r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} | |
| r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} | |
| r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} | |
| r2-bucket: ${{ secrets.R2_BUCKET_NAME }} | |
| source-dir: packages/gtx-cli/binaries | |
| destination-dir: gtx-cli/v${{ steps.gtx-cli-version.outputs.version }} | |
| - name: Upload gtx-cli binaries to R2 (latest) | |
| if: steps.check-gtx-cli.outputs.should_release_bin == 'true' | |
| uses: ryand56/r2-upload-action@v1.4 | |
| with: | |
| r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} | |
| r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} | |
| r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} | |
| r2-bucket: ${{ secrets.R2_BUCKET_NAME }} | |
| source-dir: packages/gtx-cli/binaries | |
| destination-dir: gtx-cli/latest | |
| - name: Release gtx-cli binary to npm | |
| if: steps.check-gtx-cli.outputs.should_release_bin == 'true' | |
| run: pnpm --filter gtx-cli run bin:prep && pnpm --filter gtx-cli publish --tag bin --no-git-checks && pnpm --filter gtx-cli run bin:restore && pnpm --filter gtx-cli run build:clean | |
| env: | |
| NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} |