diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml new file mode 100644 index 0000000..835097b --- /dev/null +++ b/.github/workflows/snapshot.yml @@ -0,0 +1,110 @@ +name: Publish snapshot + +on: + workflow_dispatch: + inputs: + packages: + required: true + description: "The packages to publish (e.g. @nylas/connect, @nylas/react)" + type: choice + options: + - "@nylas/connect" + - "@nylas/react" + snapshot_tag: + description: "Snapshot tag (e.g., alpha, beta, canary, dev)" + required: true + default: "canary" + type: choice + options: + - "canary" + - "alpha" + - "beta" + - "snapshot" + - "dev" + environment: + required: true + type: choice + options: + - "staging" + - "production" + default: "production" + description: "The environment to publish to (staging or production)" +run-name: "Publishing ${{ inputs.snapshot_tag }} for ${{ inputs.packages }} to ${{ inputs.environment }} by @${{ github.actor }}" + +env: + NODE_VERSION: 22.12.0 + PNPM_VERSION: 10.7.1 + IS_CI: true + +permissions: + contents: read + id-token: write # needed for provenance data generation + +jobs: + publish-snapshot: + runs-on: blacksmith-2vcpu-ubuntu-2404 + environment: ${{ inputs.environment }} + steps: + # Checkout the repo + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Setup Node.js and pnpm + - uses: pnpm/action-setup@v3 + with: + version: ${{ env.PNPM_VERSION }} + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: pnpm + registry-url: "https://registry.npmjs.org" + + # Install dependencies + - name: Install dependencies + run: pnpm install --frozen-lockfile + + # Create snapshot version + - name: Create snapshot version + run: pnpm changeset version --snapshot ${{ inputs.snapshot_tag }} && git add --all + env: + GITHUB_TOKEN: ${{ secrets.BOT_PAT }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + # Build packages + - name: Build packages + run: pnpm nx run-many -t build --parallel=3 --projects=${{ inputs.packages }} + env: + IMAGE_TAG: ${{ inputs.snapshot_tag }} + + # Publish snapshot to npm and output release tags to $GITHUB_STEP_SUMMARY + - name: Publish snapshot + run: | + # Publish packages and capture output + pnpm changeset publish --no-git-tag --snapshot --tag ${{ inputs.snapshot_tag }} | tee /tmp/changeset_publish.log + + # Add formatted output to GitHub step summary + echo '### 📦 Published Snapshot Packages' >> $GITHUB_STEP_SUMMARY + echo '' >> $GITHUB_STEP_SUMMARY + + # Extract and display only the published package versions + grep -Eo '🦋[[:space:]]+(@nylas/(connect|react)@[0-9]+\.[0-9]+\.[0-9]+-[a-zA-Z0-9]+)' /tmp/changeset_publish.log | \ + sed 's/🦋[[:space:]]\+/- /' >> $GITHUB_STEP_SUMMARY || echo '- No packages published' >> $GITHUB_STEP_SUMMARY + + # Optionally add full log in a collapsible section + echo '' >> $GITHUB_STEP_SUMMARY + echo '
📋 Full publish log' >> $GITHUB_STEP_SUMMARY + echo '' >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + cat /tmp/changeset_publish.log >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + echo '
' >> $GITHUB_STEP_SUMMARY + env: + GITHUB_TOKEN: ${{ secrets.BOT_PAT }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }}