Skip to content

[ci] release (#1109) #718

[ci] release (#1109)

[ci] release (#1109) #718

Workflow file for this run

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 }}