Browse Source

ci: handle case where generate.yml fails better

Aiden Cline 1 tháng trước cách đây
mục cha
commit
8d11df1b3b
3 tập tin đã thay đổi với 37 bổ sung17 xóa
  1. 25 8
      .github/workflows/generate.yml
  2. 0 9
      script/format.ts
  3. 12 0
      script/generate.ts

+ 25 - 8
.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
+      - name: Generate
+        run: ./script/generate.ts
+
+      - name: Commit and push
+        id: push
         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
+          if [ -z "$(git status --porcelain)" ]; then
+            echo "No changes to commit"
+            exit 0
+          fi
+          git config --local user.email "[email protected]"
+          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: Format
-        run: ./script/format.ts
+      - 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 }}

+ 0 - 9
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 "[email protected]"`
-  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`
-}

+ 12 - 0
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`