mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 01:40:46 +08:00
* 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>
158 lines
6.2 KiB
Markdown
158 lines
6.2 KiB
Markdown
---
|
||
order: 7
|
||
icon: devicon-plain:githubactions
|
||
---
|
||
|
||
# CI 系統解析
|
||
|
||
MAA 借助 Github Action 完成了大量的自動化工作,包括網站的構建,自動更新資源,最終文件的構建與發版等等過程。隨著時間的推移,這些 CI 逐漸開始嵌套,部分甚至引向了其他的存儲庫。本文檔旨在為想要對 MAA 的 CI 系統做出改進的各位做一個簡要的介紹。
|
||
|
||
閱讀本文之前,最好對 MAA 的項目結構以及組成有一個基本的概念。
|
||
|
||
::: tip
|
||
你可以通過在本頁面內搜尋 CI 文件名來快速導航到想看的部分
|
||
:::
|
||
|
||
工作流的文件均存放在 `.github/workflows` 下,各個文件可以按功能分為以下幾部分:
|
||
|
||
- [代碼測試](#代碼測試)
|
||
- [代碼構建](#代碼構建)
|
||
- [代碼安全檢查](#代碼安全檢查)
|
||
- [版本發布](#版本發布)
|
||
- [資源更新](#資源更新)
|
||
- [網站構建](#網站構建)
|
||
- [Issues 管理](#issues-管理)
|
||
- [Pull Requests 管理](#pull-requests-管理)
|
||
- [MirrorChyan 相關](#mirrorchyan-相關)
|
||
- [其他](#其他)
|
||
|
||
此外,我們還通過 [pre-commit.ci](https://pre-commit.ci/) 實現了代碼的自動格式化和圖片資源的自動優化,它在發起 PR 後會自動執行,一般無需特別在意。
|
||
|
||
## Github Action 部分
|
||
|
||
### 代碼測試
|
||
|
||
`smoke-testing.yml`
|
||
|
||
本工作流主要負責對 MaaCore 做出基本的檢測,包括資源文件加載,部分簡單 task 運行測試等等。
|
||
|
||
由於測試用例已經較久沒有更新,該工作流現在基本是為了保證資源文件不會出現錯誤,以及 MaaCore 的代碼沒有出現影響到構建的致命性錯誤。
|
||
|
||
### 代碼構建
|
||
|
||
`ci.yml`
|
||
|
||
本工作流負責對代碼進行全量構建工作,包含 MAA 的所有組件,構建成品即為可運行的 MAA。
|
||
|
||
除了必要的 MaaCore 外,Windows 構建產物會包含 MaaWpfGui,MacOS 構建產物會包含 MaaMacGui,Linux 構建產物會包含 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. 建立由 `dev` 到 `master` 分支的 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 是否符合 [約定式提交](https://www.conventionalcommits.org/zh-hans/v1.0.0/),以及是否包含 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 自動執行(在每日內測版發布之前),確保子模組保持最新狀態。
|