#看好了 GitHub Actions #我只示範一次 #GitHub Actions #Node.js #DevOps

有意見就說 - 編輯後自動提 Pull Request

Date
2024.09.19
Category
自動化
Read Time
12 min
Word
3.7k
Last Mod
2024.09.19
課程 2024.09.19 有意見就說 - 編輯後自動提 Pull Request

有意見就說 - 編輯後自動提 Pull Request

《三國演義》第六 ○ 回:「竊聞:『 良藥苦口利於病,忠言逆耳利於行。』」處理 Issue 和 PR 很煩但十分重要。

今天我們要來探討如何讓 GitHub Actions 在進行操作後提 Pull Request(PR)。

今日範例程式:https://github.com/elvisdragonmao/2024-GitHub-Actions/tree/main/6

國小複習:Pull Request 是什麼?

  1. 什麼是 Pull Request?

    • Pull Request 是一個 Git 工作流中的重要部分,它允許開發者在完成某些功能或修復後,將變更合併到另一個分支(如 mainmaster)之前進行程式審核。通過 PR,團隊成員可以檢查程式、提出建議、討論改進點,並最終合併變更。
  2. 如何進行 Git 合併?

    • git merge 命令用於將不同分支的變更合併到一起。通常在合併前,你需要確保本地程式庫是最新的,並解決可能存在的衝突。
  3. 如何在 GitHub Actions 中自動提 PR?

    • 我們可以使用 GitHub Actions 的 gh CLI 工具來自動建立 Pull Request,或者使用 GitHub API。
    • 也可以使用現成的 Action,如 peter-evans/create-pull-request,來簡化 PR 的建立過程。

實作:自動提 Pull Request

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

在你的專案中,建立一個新的 GitHub Actions 工作流程文件,例如 .github/workflows/create-pr.yml

YAML
name: 建立 PRon:  push:    branches:      - main # 當推送到 main 分支時觸發工作流程jobs:  create-pr:    runs-on: ubuntu-latest    steps:      - name: 檢出程式        uses: actions/checkout@v3      - name: 設定 Git        run: |          git config --global user.name "GitHub Actions"          git config --global user.email "actions@github.com"      - name: 安裝 GitHub CLI        run: sudo apt-get install gh      - name: 建立新分支並進行變更        run: |          git checkout -b update-branch          echo "// Code change made by GitHub Actions" >> file.txt          git add file.txt          git commit -m "Automated commit by GitHub Actions"      - name: 推送變更並建立 Pull Request        run: |          git push origin update-branch          gh auth login --with-token < ${{ secrets.GITHUB_TOKEN }}          gh pr create --title "Automated PR" --body "This is an automated PR created by GitHub Actions" --base main --head update-branch

YAML 文件解析:

  • on: push: 設定當推送到 main 分支時觸發這個工作流程。
  • actions/checkout@v3: 檢出程式,以便進行後續操作。
  • 設定 Git: 配置 Git 用戶名和電子郵件,以便進行提交。
  • 安裝 GitHub CLI: 安裝 GitHub CLI 工具,用於建立 PR。
  • 建立新分支並進行變更: 建立新分支,進行程式變更,並提交這些變更。
  • 推送變更並建立 Pull Request: 推送新分支到遠端,使用 gh CLI 建立 PR。

步驟 2:測試工作流程

  1. 推送變更到 main 分支

    Bash
    git add .github/workflows/create-pr.ymlgit commit -m "Add workflow to create PR"git push origin main
  2. 檢查工作流程

    • 進入 GitHub 倉庫的 Actions 標籤頁,查看工作流程的執行情況。如果一切正常,你會看到工作流程自動建立了一個新的 Pull Request。

沒事幹嘛提 PR?

以下是幾個利用場景,可以使用自動化建立 PR 的工作流程:

  1. 自動化程式審核:
    • 通過自動建立 PR,可以自動觸發程式審核流程,幫助團隊更快地檢查和合併變更。
    • PR 提供了一個討論和審核的平台,讓團隊成員可以就程式變更進行討論和提出建議。
    • PR 可以幫助團隊確保程式品質和一致性,並減少潛在的錯誤和問題。
  2. 讓自動化操作不要直接更改主分支:
    • 通過建立 PR,可以在變更被合併到主分支之前進行審核和測試,從而減少對主分支的直接變更。
    • PR 提供了一個安全的方式來管理程式變更,確保變更是經過審核和測試的。

練習:Prettier 格式化後自動提 PR

我們來結合昨天學過的 Prettier 格式化工作流程,將格式化後的程式變更自動提交到新的分支,並建立 PR。這次我們使用 peter-evans/create-pull-request@v5 這個現成的 Action 來建立 PR。

YAML
name: Prettier Checkon: [push, pull_request]jobs:  prettier:    runs-on: ubuntu-latest    steps:      - name: Checkout repository        uses: actions/checkout@v3      - name: Set up Node.js        uses: actions/setup-node@v3        with:          node-version: "20"      - name: Install dependencies        run: npm install prettier      - name: Run Prettier check        id: prettier        run: npx prettier —check .      - name: Run Prettier format (if needed)        if: ${{ failure() }}        run: npx prettier —write .      - name: Create Pull Request        if: ${{ failure() }}        uses: peter-evans/create-pull-request@v5        with:          token: ${{ secrets.GITHUB_TOKEN }}          commit-message: "fix: format code with Prettier"          branch: prettier-fixes          committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>          author: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>          signoff: true          delete-branch: true          title: "fix: format code with Prettier"          body: "This pull request fixes the code formatting issues identified by Prettier."

這個工作流程會在每次推送或 PR 時運行 Prettier 檢查,如果發現格式問題,則自動進行格式化並建立 PR。這樣可以確保程式庫中的程式始終保持一致的格式。

常用技巧與注意事項

  1. 檢查分支和目標:

    • 確保你在建立 PR 時選擇了正確的源分支和目標分支。--base 參數指定了 PR 的目標分支(例如 main),--head 參數指定了源分支(例如 update-branch)。
  2. 處理 GitHub CLI 認證:

    • 使用 GitHub Token 時,請確保 Token 擁有足夠的權限來建立 PR 和進行其他操作。
  3. 程式變更的策略:

    • 在自動建立 PR 時,建議只做小範圍的程式變更,以避免引入潛在的問題。如果需要大範圍的變更,請仔細檢查程式。
  4. 自動合併 PR:

    • 如果希望在 PR 被建立後自動合併,可以在工作流程中添加相應的操作。你可以使用 GitHub API 或 CLI 進行自動合併操作。
  5. 更新 PR 標題和描述:

    • 可以根據實際需要自定義 PR 的標題和描述,提供更多上下文訊息,讓審核者更容易理解變更內容。也許你有發現建立 PR 其實有很多的參數可以設定。像是標籤、指派人、屬於的專案等等。

結語

今天我們探討了如何在 GitHub Actions 中自動建立 Pull Request。我們設定了一個工作流程,從建立分支、提交變更,到推送和建立 PR。明天我們要來談談不同的時間觸發器,以及如何設定定時任務和手動觸發工作流程。

About me

毛哥EM

這裡是毛哥EM,一隻全端開發龍還有英文辯士。
熱愛開源、音樂、設計、獸迷文化,專研人機互動與人工智慧。

本部落格皆屬原創文章,採 CC BY-SA 4.0 授權,
轉載請註明來自毛哥EM資訊密技。
這篇文章對你有幫助嗎? 考慮幫我買瓶 Red Bull?

毛哥EM 角色插圖

Comments

留言區