From 8d11df1b3b9eb40510e0877318b238a7780a16fc Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Thu, 18 Dec 2025 14:33:40 -0600 Subject: [PATCH] ci: handle case where generate.yml fails better --- .github/workflows/generate.yml | 35 +++++++++++++++++++++++++--------- script/format.ts | 9 --------- script/generate.ts | 12 ++++++++++++ 3 files changed, 38 insertions(+), 18 deletions(-) create mode 100644 script/generate.ts diff --git a/.github/workflows/generate.yml b/.github/workflows/generate.yml index 326090f7a..4836a78d6 100644 --- a/.github/workflows/generate.yml +++ b/.github/workflows/generate.yml @@ -14,6 +14,7 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 permissions: contents: write + pull-requests: write steps: - name: Checkout repository uses: actions/checkout@v4 @@ -25,14 +26,30 @@ jobs: - name: Setup Bun uses: ./.github/actions/setup-bun - - name: Generate SDK - run: | - bun ./packages/sdk/js/script/build.ts - (cd packages/opencode && bun dev generate > ../sdk/openapi.json) - bun x prettier --write packages/sdk/openapi.json + - name: Generate + run: ./script/generate.ts - - name: Format - run: ./script/format.ts + - name: Commit and push + id: push + run: | + if [ -z "$(git status --porcelain)" ]; then + echo "No changes to commit" + exit 0 + fi + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add -A + git commit -m "chore: generate" + git push origin HEAD:${{ github.event.pull_request.head.ref || github.ref_name }} --no-verify + + - name: Comment on failure + if: failure() + run: | + MESSAGE=$'Failed to push generated code. Please run locally and push:\n```\n./script/generate.ts\ngit add -A && git commit -m "chore: generate" && git push\n```' + if [ -n "${{ github.event.pull_request.number }}" ]; then + gh pr comment ${{ github.event.pull_request.number }} --body "$MESSAGE" + else + gh api repos/${{ github.repository }}/commits/${{ github.sha }}/comments -f body="$MESSAGE" + fi env: - CI: true - PUSH_BRANCH: ${{ github.event.pull_request.head.ref || github.ref_name }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/script/format.ts b/script/format.ts index 2ae93f169..996de9ad0 100755 --- a/script/format.ts +++ b/script/format.ts @@ -3,12 +3,3 @@ import { $ } from "bun" await $`bun run prettier --ignore-unknown --write .` - -if (process.env["CI"] && (await $`git status --porcelain`.text())) { - await $`git config --local user.email "action@github.com"` - await $`git config --local user.name "GitHub Action"` - await $`git add -A` - await $`git commit -m "chore: format code"` - const branch = process.env["PUSH_BRANCH"] - await $`git push origin HEAD:${branch} --no-verify` -} diff --git a/script/generate.ts b/script/generate.ts new file mode 100644 index 000000000..6a040e2e4 --- /dev/null +++ b/script/generate.ts @@ -0,0 +1,12 @@ +#!/usr/bin/env bun + +import { $ } from "bun" + +// Build SDK +await $`bun ./packages/sdk/js/script/build.ts` + +// Generate openapi.json +await $`bun dev generate > ../sdk/openapi.json`.cwd("packages/opencode") + +// Format +await $`./script/format.ts`