持續整合#
Arrow 的持續整合相當複雜,因為它需要在套件管理器、編譯器、多個軟體函式庫版本、作業系統和其他潛在變化的來源的不同組合中執行。在本文中,我們將概述其主要組件以及相關檔案和目錄。
Arrow CI 的一些核心檔案包括
docker-compose.yml
- 在此處,我們定義了 docker 服務,可以使用環境變數或這些變數的預設值進行配置。.env
- 在此處,我們定義了預設值,以配置docker-compose.yml
中的服務appveyor.yml
- 在此處,我們定義了在 Appveyor 上運行的工作流程
我們使用 Docker 以獲得可攜式和可重現的 Linux 建置,以及在 Windows 容器中運行 Windows 建置。我們使用 Archery 和 Crossbow 來協助協調各種 CI 任務。
需要注意的一點是,docker-compose.yml
中定義的某些服務是相互依賴的。當在本機運行服務時,您必須先手動建置其依賴項,或者透過使用 archery docker run ...
來建置它,這會自動尋找並建置依賴項。
Arrow 專案中有許多與 CI 相關的重要目錄
.github/workflows
- 透過 GitHub Actions 運行的工作流程,並由提交或合併 Pull Request 等事件觸發dev/tasks
- 包含透過archery crossbow submit ...
觸發/提交的擴展作業,通常是每晚建置或與發布流程相關ci/
- 包含腳本、dockerfiles 和任何補充檔案,例如修補程式檔案、conda 環境檔案、vcpkg triplet 檔案。
與其從檔案和資料夾的角度思考 Arrow CI,不如將其概念性地劃分為 2 個主要類別可能更簡單
動作觸發的建置:根據 GitHub 上的特定動作(開啟 Pull Request、合併 Pull Request 等)觸發的 CI 作業
擴展建置:手動觸發,其中許多是每晚運行的
動作觸發的建置#
.github/workflows
中的 .yml
檔案是在 GitHub 上響應特定動作而運行的工作流程。此目錄中的大多數工作流程都是 Arrow 實作特定的,並且在進行影響與該語言實作相關的程式碼變更時運行,但其他值得注意的工作流程包括
archery.yml
- 如果對 Archery 工具或其運行的任務進行了變更,此工作流程將運行必要的驗證檢查comment_bot.yml
- 透過監聽 github Pull Request 評論中的以下字串來觸發某些動作@github-actions crossbow submit ...
- 運行指定的 Crossbow 命令@github-actions autotune
- 運行多個樣式器/格式化器,建置一些文件,並提交結果@github-actions rebase
- 將 PR 變基到 main 分支上
dev.yml
- 在 PR 上有任何活動或 PR 被合併時運行;它運行 linter 並測試 PR 是否可以合併dev_pr.yml
- 在 PR 開啟或更新時運行;檢查 PR 標題的格式,如果需要,將受讓人新增到適當的 GitHub Issue(或新增評論請求使用者在標題中包含 Issue ID),並新增任何相關的 GitHub 標籤
還有兩個其他檔案定義了動作觸發的建置
appveyor.yml
- 在與 Python 或 C++ 相關的提交上運行
擴展建置#
Crossbow 是 Archery 的子組件,可用於手動觸發建置。可以在 dev/tasks
目錄中找到可在 Crossbow 上運行的任務。此目錄包含
檔案
dev/tasks/tasks.yml
,其中包含可透過 Crossbow 運行的各種任務的配置子目錄,其中包含不同的任務範本(使用 jinja2 語法 指定),大致按語言或套件管理系統劃分。
這些任務大多數作為每晚建置的一部分運行,儘管也可以透過在 PR 中新增以 @github-actions crossbow submit
開頭的評論,後跟要運行的任務名稱來手動觸發。
為了方便起見,dev/tasks/tasks.yml
中的任務以群組形式定義,這使得一次向 Crossbow 提交多個任務變得更簡單。此處的任務定義包含有關要運行的 docker-compose.yml
中定義的哪個服務、要在其上運行任務的 CI 服務以及要用作該任務基礎的範本檔案的資訊。