瀏覽 1.1.1 文件
1.1.1

附錄:Patchset CI 設定

定義規範的 1.1.1 Patchset CI 套件目錄、支援的 runner、檢查項、產物,以及有界的本地定位器。

適用對象: Repository 所有者、CI 維護者與維運

Patchset CI 設定#

ci/patch_ci.json 是 1.1.1 的規範套件目錄,在 Repository 向 AIT server 註冊時、以及遠端就緒要跑 Patchset CI 時使用。目錄裡至少要有一個阻塞式的 Patchset 關卡。

最小的命令包目錄#

程式碼 · json
{
  "schema_version": 1,
  "suites": [
    {
      "schema_version": 1,
      "suite_id": "patchset_gate",
      "display_name": "Patchset Gate",
      "plane": "patchset",
      "mode": "gate",
      "default_blocking": true,
      "purpose": "Validate this repository before remote land.",
      "runner": {
        "kind": "command_bundle",
        "commands": ["./ait.sh test"]
      },
      "artifacts": {
        "log_path": ".ait/generated/ci/patchset_gate.log",
        "summary_json": ".ait/generated/ci/patchset_gate.json"
      }
    }
  ]
}

檔案不存在時,ait remote add 會建立一份起步目錄,然後停下來,好讓你把 佔位命令替換掉。它絕不會覆蓋已有的目錄。佔位值 replace-with-your-ci-command 會被拒絕。

目錄與套件欄位#

欄位約定
schema_version頂層整數 1;必填。起步檔案也會在每個套件上寫一個 1
suites套件物件陣列。其中至少要有一個具名、可執行的阻塞式 Patchset 關卡。
suites[].suite_id非空且唯一的操作名。每個被選中的阻塞關卡都必須有。
suites[].display_name可選的、給人看的字串。
suites[].plane用於 Patchset CI 選擇時填 patchset
suites[].mode用於就緒判定時填 gate
suites[].default_blocking布林值。true 讓選中的套件成為就緒證據的一部分;false 僅供參考。
suites[].purpose可選的說明字串。
suites[].runner必填物件,其 kind 必須非空且受支援。
suites[].artifacts.log_path可選的日誌產物相對路徑。
suites[].artifacts.summary_json可選的 JSON 摘要相對路徑。

只有 planemode 解析為 patchsetgate 的套件才會被編排。用於 首次註冊的目錄裡,至少要有一個這樣的套件,並且 default_blocking: true。 不要把未知的 key 當成擴充套件點來用。

command_bundle runner#

這個 runner 按順序執行 shell 命令字串,第一次失敗就停。預熱命令和主命令 共用同一份接納的環境。

Runner 欄位型別與行為
kind確切字串 command_bundle
commands非空陣列,元素是非空的 shell 命令字串。
prewarm_commands可選陣列,在 commands 之前執行。
env可選物件,把字串環境值加進乾淨的 CI 程序環境裡。
runner_parallelism可選的正整數,用作接納的命令並行度。
cpu_tokensrunner_parallelism 的別名。
workersrunner_parallelism 的低優先順序別名。
timeout_seconds可選的正數有界超時,對每個程序分別生效。

排程器可以給出更嚴格的接納並行度。光靠設定本身並不會分到 CPU 容量。完整 日誌和有界的 JSON 摘要是兩個分開的產物。

test_discovery_sharded runner#

這個 runner 會發現測試用例、建置選中的測試可執行檔案,並跑有界的分片。它 支援 Cargo 和一個通用命令介面卡。

通用欄位#

Runner 欄位型別與行為
kind確切字串 test_discovery_sharded
adapter預設 cargo;填 command 選用通用介面卡。
env可選的字串到字串環境物件。
runner_parallelismcpu_tokensworkers正整數並行度的三個名字,優先順序依此順序。
timeout_seconds可選的正數有界程序超時。
exclude_test_cases可選陣列,列出要略過的確切已發現測試用例名。
checks可選的測試前檢查陣列,見下文。

Cargo 介面卡欄位#

Runner 欄位型別與行為
cargo_binaryCargo 可執行檔名或路徑;預設 cargo
manifest_path規範化的相對路徑;預設 Cargo.toml
workspace布林值;預設 true
build_args可選的 argv 字串,用來替換預設的 Cargo 建置引數。
doc_tests布林值;預設 false。命令介面卡下不接受這個欄位。
doc_test_args可選的 argv 字串,用於文件測試。

命令介面卡欄位#

Runner 欄位型別與行為
discovery_program必填,非空的可執行檔名或路徑。
discovery_args可選的發現階段 argv 陣列。
discovery_output_format預設 json_array,也可以是 lines
run_program必填,非空的可執行檔名或路徑。
run_args可選的執行階段 argv 陣列。
append_test_items布林值;為 true 時,把發現到的用例名追加到執行 argv 後面。預設 false
working_directory工作區內規範化的相對目錄;預設是工作區根。該目錄必須存在。

測試前檢查#

checks 的條目接受 check_idkindfile_name_suffixexclude_dirsargs。缺少 check_id 時會變成 check-N

  • kind: "forbid_files":只要有檔案以 file_name_suffix 結尾、且不在指定 的目錄段之內,就判失敗。該字尾預設是 .py
  • kind: "cargo_fmt":跑 Cargo 格式化校驗。args 可以替換它預設的 argv。

套件執行時,其他種類的 check 會被拒絕。

可選的建置快取#

runner.build_cache 接受 policyexecutable_manifest_path。唯一能開啟 快取的 policy 是 reuse_when_rust_inputs_unchanged;不寫或寫別的值都表示 複用關閉。變更路徑的證據由執行請求提供,不應該當成靜態目錄資料寫進去。

可選的本地定位器:ci/config.contract.json#

ci/patch_ci.json 不存在時,本地工作流程的命令發現可以讀取:

程式碼 · json
{
  "schema_version": 1,
  "ci": {
    "suite_manifest_path": "config/patchset-suites.json"
  }
}

1.1.1 只讀取非空的 ci.suite_manifest_path 值,並且只在被引用的檔案確實 存在時才用它。只要 ci/patch_ci.json 在,就總是它說了算。遠端 Repository 註冊依然會校驗併發布那份規範的 ci/patch_ci.json;這個定位器不會改變註冊 時的約定。

維運檢查#

程式碼 · bash
ait remote add origin https://server.example.invalid --default
ait workflow ready <change-id> --apply
ait task audit <task-id>

ait workflow ready 是目前 Patchset 的決策面。本地跑通一條測試命令,替代 不了有遠端支撐的 Task 所要求的 server 證據。

相關參考#

版本權威

對照 1.1.1 原始碼逐條核對

這一頁是公開文件,不是第二份產品契約。要確認發布權威,請以確切的原始碼和分發契約為準。

所屬元件 Snapshot
  • ait-coreSNP-ED7593DBF982
  • ait-serverSNP-0CCD7DD2A077
  • ait-runnerSNP-35C9C133D2EE
  • ait-pythonSNP-756C731A4CC0
  • ait-nodeSNP-55E90D0A81F1