戰國時期張儀遊說各國開放 API 給秦整合,才能夠瓦解合縱聯盟。

在這篇教程中,我們將探討如何集成外部 API 和服務,自動化 GitHub issue 管理,並使用 CodeRabbit 自動進行代碼審查,Vercel 與 Zeabur 來實現自動化部屬。

今日範例程式:https://github.com/Edit-Mr/2024-GitHub-Actions/tree/main/19

自動化 GitHub Issue 管理

步驟 1:設置 GitHub Actions 工作流程

我們首先需要設置一個 GitHub Actions 工作流程,當有新的 issue 創建或更新時,自動執行指定操作。例如,我們可以自動為新創建的 issue 標籤。

.github/workflows 目錄下創建一個 YAML 文件,例如 issue-management.yml,並添加以下內容:

1name: Manage GitHub Issues
2
3on:
4    issues:
5        types: [opened, edited]
6
7jobs:
8    label:
9        runs-on: ubuntu-latest
10        steps:
11            - name: Checkout repository
12              uses: actions/checkout@v3
13
14            - name: Label new issues
15              uses: actions/github-script@v6
16              with:
17                  script: |
18                      const issue = context.issue;
19                      const labels = ['new-issue'];
20                      await github.issues.addLabels({
21                        ...issue,
22                        labels
23                      });

這個工作流程在每次 issue 被創建或更新時自動為其添加一個標籤 new-issue

步驟 2:自動處理 Issue

假設我們想要在 issue 被標記為 bug 時,自動將其分配給一個特定的用戶。我們可以擴展上述 YAML 文件:

1name: Manage GitHub Issues
2
3on:
4    issues:
5        types: [opened, edited]
6
7jobs:
8    label:
9        runs-on: ubuntu-latest
10        steps:
11            - name: Checkout repository
12              uses: actions/checkout@v3
13
14            - name: Label new issues
15              uses: actions/github-script@v6
16              with:
17                  script: |
18                      const issue = context.issue;
19                      const labels = ['new-issue'];
20                      await github.issues.addLabels({
21                        ...issue,
22                        labels
23                      });
24
25            - name: Assign bug issues
26              if: contains(github.event.issue.labels.*.name, 'bug')
27              uses: actions/github-script@v6
28              with:
29                  script: |
30                      const issue = context.issue;
31                      await github.issues.addAssignees({
32                        ...issue,
33                        assignees: ['specific-user']
34                      });

集成第三方服務

有許多第三方服務可以幫助我們提高開發效率,大多不須要手動設定,只需要設置一些配置即可。這裡會介紹幾個我自己常用的服務。

CodeRabbit 代碼審查

官網:CodeRabbit

比如說面對中電會大量的代碼審查,有時候難免會出現遺漏的情況,這時候就可以使用 CodeRabbit 來自動進行代碼審查。CodeRabbit 對於開源專案是完全免費的。

CodeRabbit
CodeRabbit

你只需要註冊並安裝至你的 GitHub 存儲庫,然後設置一些基本配置,就可以開始使用了。CodeRabbit 會自動檢查你的代碼,並提供有關代碼品質和風格的反饋。

安裝 CodeRabbit
安裝 CodeRabbit

你可以建立 .coderabbit.yaml 文件來配置代碼審查的規則,例如以下是我們中電喵的設置:

1# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
2language: "en-US"
3early_access: false
4tone_instructions: "You are a smart cat"
5reviews:
6    profile: "assertive"
7    path_instructions:
8        - path: "templates/*.html"
9          instructions: "All text should follow sparanoid/chinese-copywriting-guidelines. There should be space between English and Chinese."
10    request_changes_workflow: false
11    high_level_summary: true
12    poem: true
13    review_status: true
14    collapse_walkthrough: false
15    auto_review:
16        enabled: true
17        drafts: true
18        base_branches:
19            - main
20            - development
21chat:
22    auto_reply: true

Vercel 部署

官網:Vercel

Vercel 是一個 serverless 的部署平台,可以幫助你快速部署靜態網站、API 和 Serverless 函數。只需將你的代碼推送到 GitHub 存儲庫,Vercel 將自動構建和部署你的應用程序。

Vercel
Vercel

Vercel 最方便的是它會在每次代碼推送後自動部署你的應用程序,你不需要手動操作。你可以訪問 Vercel 的控制台來查看應用程序的部署狀態和日誌。

你可以使用 vercel.json 設置自動部署的規則,或是重新導向規則。例如只在特定分支推送時部署,或者只在特定時間部署。這樣可以確保你的應用程序始終保持最新狀態。

比如說我最用的就是在某些分支取消自動部屬,因為有些東西就是還沒做完每天都要看他噴錯寄 email 罵我也是很煩的。

參考配置:https://vercel.com/docs/projects/project-configuration

1{
2    "git": {
3        "deploymentEnabled": {
4            "main": false,
5            "new-site": false
6        }
7    }
8}

或著是你可以設定一些簡單的重新導向規則:

1{
2    "redirects": [
3        { "source": "/me", "destination": "/profile.html", "permanent": false }
4    ]
5}

Zeabur 自動化部屬

官網:Zeabur

Zeabur 是一個可以幫助你部署服務的平台,而且只需要透過幾個簡單的按鈕即可完成,無論你使用什麼程式語言或開發框架。Zeabur 採用按量計費的方式,你只需要為你的服務實際用到的資源付費,而不需要為整個伺服器付費。

控制台
控制台

如果你只是要部屬 serverless 函數,Zeabur 是完全免費的。你可以在 Zeabur 的控制台上查看你的服務的部署狀態和日誌,並設置自動部署規則。

專案設定
專案設定

通常 99% 的時間你不會需要,但你可以使用 zbpack.json 文件來配置你的服務,例如以下是一些簡單的配置範例:

1{
2    "build_command": "npm install && npm run build:dist"
3}
1{
2    "start_command": "php artisan migrate && _startup"
3}

小結

今天,我們探討了如何使用 GitHub Actions 自動化 issue 管理,並集成外部 API 來提高開發效率,並確保代碼品質。希望這篇教程能幫助你更高效地管理項目和代碼。

毛哥EM

一位喜歡把簡單的事,做得不簡單的高三生。