Files
MaaAssistantArknights/docs/zh-tw/develop/ci-tutorial.md
Lucien Shaw bfacd31911 ci: 支持winget软件分发 (#14667)
* ci: 测试winget-releaser

* ci: 暂时禁用mirrorchyan

* Revert "ci: 暂时禁用mirrorchyan"

This reverts commit 83550ac47f.

* ci: release分发工作流支持指定tag

* ci: 修复判断语句

* ci: 修改主工作流的release分发部分

* ci: 添加权限

* ci: 设置默认版本tag为空

* ci: 尝试修复空版本号带来的问题

* ci: 使用独立工作流设置release tag

* ci: 补全仓库名称

* ci: 优化gh workflow run调用语句

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* style: 添加空格

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* ci: use secrets and repos of MAA

* ci: 更新secrets名称

* ci: 版本分发工作流重命名

* ci: 匹配的名称变更

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-12 01:04:55 +08:00

6.2 KiB
Raw Blame History

order, icon
order icon
7 devicon-plain:githubactions

CI 系統解析

MAA 借助 Github Action 完成了大量的自動化工作,包括網站的構建,自動更新資源,最終文件的構建與發版等等過程。隨著時間的推移,這些 CI 逐漸開始嵌套,部分甚至引向了其他的存儲庫。本文檔旨在為想要對 MAA 的 CI 系統做出改進的各位做一個簡要的介紹。

閱讀本文之前,最好對 MAA 的項目結構以及組成有一個基本的概念。

::: tip 你可以通過在本頁面內搜尋 CI 文件名來快速導航到想看的部分 :::

工作流的文件均存放在 .github/workflows 下,各個文件可以按功能分為以下幾部分:

此外,我們還通過 pre-commit.ci 實現了代碼的自動格式化和圖片資源的自動優化,它在發起 PR 後會自動執行,一般無需特別在意。

Github Action 部分

代碼測試

smoke-testing.yml

本工作流主要負責對 MaaCore 做出基本的檢測,包括資源文件加載,部分簡單 task 運行測試等等。

由於測試用例已經較久沒有更新,該工作流現在基本是為了保證資源文件不會出現錯誤,以及 MaaCore 的代碼沒有出現影響到構建的致命性錯誤。

代碼構建

ci.yml

本工作流負責對代碼進行全量構建工作,包含 MAA 的所有組件,構建成品即為可運行的 MAA。

除了必要的 MaaCore 外Windows 構建產物會包含 MaaWpfGuiMacOS 構建產物會包含 MaaMacGuiLinux 構建產物會包含 MaaCLI。

該工作流在出現任何新 Commit 以及 PR 時都會自動運行,且當該工作流由發版 PR 觸發時,本次的構建產物將會直接用於發版,並且會創建一個 Release。

代碼安全檢查

代碼安全檢查通過 CodeQL 對代碼和工作流進行安全分析,具體工作流如下:

codeql-core.yml

本工作流負責對 MaaCore 和 MaaWpfGui 的 C++ 和 C# 代碼進行安全分析,檢測潛在的安全漏洞。

該工作流在修改相關源代碼的 PR 時自動運行,同時每天 UTC 時間 11:45 自動執行定期檢查。

codeql-wf.yml

本工作流負責對 GitHub Actions 工作流文件本身進行安全分析,確保 CI/CD 流程的安全性。

該工作流在修改工作流文件的 PR 時自動運行,同時每天 UTC 時間 12:00 自動執行定期檢查。

版本發布

版本發布,簡稱發版,是向用戶發布更新的必要操作,由以下工作流組成:

  • release-nightly-ota.yml 發布內測版
  • release-ota.yml 發布正式版/公測版
    • release-preparation.yml 為正式版/公測版生成 changelog 和準備發布
    • pr-auto-tag.yml 對正式版/公測版生成 tag

::: tip 上述文件名內的 ota 意為 Over-the-Air也就是我們常說的「增量更新包」因此 MAA 的發版過程實際上包含了對過往版本構建 OTA 包的步驟 :::

內測版

release-nightly-ota.yml

本工作流會在每天 UTC 時間 22 點自動運行,以保證內測版的發版頻率。當然,你也可以在做出更改需要驗證時手動發版。

需要注意的是,內測版的發布僅針對 Windows 用戶MacOS 與 Linux 用戶並不能接收到內測更新。

正式版/公測版

這兩個通道的發版流程相對複雜一點,我們通過模擬一次發版步驟來解釋各工作流的作用:

  1. 建立由 devmaster 分支的 pr且該 pr 的名字需要為 Release v******
  2. release-preparation.yml 會生成最近的正式版/公測版到當前版本的 changelog以一個新 pr 的形式)
  3. 對 changelog 進行手動調整,並且添加簡要描述
  4. 合併 pr觸發 pr-auto-tag.yml,創建 tag 並且同步分支
  5. Release 事件觸發 release-ota.yml,對 master 打完 tag 後進行 ota 包的構建以及附件上傳

資源更新

這部分工作流主要負責 MAA 的資源更新以及優化,具體工作流如下:

  • res-update-game.yml 定期執行,從指定的倉庫拉取遊戲資源
  • sync-resource.yml 將資源同步到 MaaResource 倉庫,用於資源更新
  • optimize-templates.yml 優化包括模板圖在內的圖片大小

網站構建

website-workflow.yml

本工作流主要負責 MAA 文檔站的構建與發布。

請注意,網站的發布與發版強綁定,平常修改網頁組件的時候只會進行構建以保證不會有錯誤,在發版時才會正式部署到 GitHub Pages 上。

Issues 管理

issue-checker.yml

通過正則匹配給各個 Issue 打 Tag以此來分類標記 Issue 內容,方便查看與管理。

issue-checkbox-checker.yml

通過正則匹配自動關閉勾選「我未仔細閱讀」的 Issue若「我未仔細閱讀」未被勾選則將所有勾選框折疊。

stale.yml

檢查超過 90 天沒有活動的 Bug Issue將其標記並發起通知7 天後若還沒有活動則關閉。

Pull Requests 管理

pr-checker.yml

該工作流用於檢查 PR 中的 Commit Message 是否符合 約定式提交,以及是否包含 Merge Commit若上述條件符合則會作出提示。

MirrorChyan 相關

MirrorChyan 是有償的更新鏡像服務,與其相關的工作流如下:

  • release-package-distribution.yml 同步更新包到 MirrorChyan
  • mirrorchyan_release_note.yml 生成 MirrorChyan 的 Release Note

其他

markdown-checker.yml

負責檢查倉庫中的所有 Markdown 文件中是否包含無效鏈接。

blame-ignore.yml

自動忽略 Commit Message 包含 blame ignore 的提交,保證倉庫歷史的乾淨。

cache-delete.yml

在 PR 合併後清理相關的緩存,以此來節省緩存用量。

update-submodules.yml

定期更新 MaaMacGui 和 maa-cli 等子模組到最新版本。該工作流每天 UTC 時間 21:50 自動執行(在每日內測版發布之前),確保子模組保持最新狀態。