瀏覽 1.1.1 文件
1.1.1

附錄:發布 manifest

展開通用命令介面卡與專用 AIT 原生家族發布 manifest 的 schema、邊界與歸屬規則。

適用對象: 發布工程師與包維護者

發布清單#

1.1.1 有兩份發布清單約定,適用範圍不同:

檔案檔位與用途
ait-release.jsongeneric-command:可複用的發布介面卡,針對一個包及其一個或多個元件。
ait-release-family.jsonfamily:專用協調器,針對官方的 AIT 原生 release family。

這兩個檔案都從記錄下來的發布源 Snapshot 裡讀取。未知欄位會被拒絕,路徑 按儲存庫相對路徑規範化,各項宣告還會拿那個 Snapshot 裡實際存在的檔案來 核對。

通用介面卡:ait-release.json#

程式碼 · json
{
  "schema": "ait.release.adapter/v1",
  "package": {
    "name": "sample-tool",
    "version": "1.2.0",
    "description": "Portable sample package.",
    "license_files": [
      {"path": "LICENSE", "role": "license"},
      {"path": "NOTICE", "role": "notice"}
    ]
  },
  "components": [
    {
      "id": "cli",
      "ecosystem": "native",
      "working_directory": ".",
      "dependency_files": ["Cargo.toml", "Cargo.lock"],
      "commands": {
        "prepare": [],
        "test": [["cargo", "test", "--locked"]],
        "build": [["cargo", "build", "--release", "--locked"]],
        "smoke": [["target/release/sample-tool", "--version"]]
      },
      "artifacts": [
        {"path": "target/release/sample-tool", "kind": "native-executable"}
      ]
    }
  ]
}

根欄位與 package 欄位#

欄位約定
schema確切字串 ait.release.adapter/v1
package必填物件。
package.name必填,非空的有界單行字串。
package.version必填,非空的有界單行字串。
package.description可選的字串或 null
package.license_files可選陣列,1 到 8 條。
license_files[].path指向發布源中某個檔案的規範化相對路徑。路徑必須唯一。
license_files[].role確切的 licensenotice;每種 role 最多出現一次。
components必填陣列,1 到 64 個元件物件。

元件欄位#

欄位約定
id必填識別符號,在各元件之間唯一。
ecosystem必填識別符號,描述該元件的工具鏈。
working_directory必填的規範化相對目錄,根目錄寫 .。它必須存在於源 Snapshot 中。
dependency_files1 到 64 個相對於 working_directory 的唯一規範化路徑;每個檔案都必須存在。
commands必填物件,只能包含 preparetestbuildsmoke
artifacts1 到 128 條產物記錄。

命令階段#

每條命令都是 argv 陣列,不是 shell 字串。testbuild 是必填的, 各自必須含 1 到 16 條命令。preparesmoke 可選,可以含 0 到 16 條 命令。每條命令含 1 到 64 個字串引數;可執行檔案那個引數不能為空。

命令直接執行,不隱式套 shell。1.1.1 只替換與下列 token 之一完全相等的 整個 argv 值:

程式碼 · text
$AIT_RELEASE_ID
$AIT_RELEASE_VERSION
$AIT_RELEASE_COMPONENT
$AIT_RELEASE_ECOSYSTEM
$AIT_RELEASE_TARGET
$SOURCE_DATE_EPOCH

這些 token 不做子串插值,也不構成任意環境變數展開的許可。argv 值裡出現 換行、回車和 NUL 字元會被拒絕。

產物欄位#

欄位約定
path必填的規範化相對輸出路徑,在元件內唯一。
kind必填識別符號,比如 native-executablepython-wheel,或介面卡自定義的其他 kind。
target可選識別符號。不寫表示這是可移植產物;寫了則把該產物關聯到某一個發布目標。

選定的建置必須把宣告的每個產物都產出為確切的普通檔案。選定某個目標時, 會包含匹配該目標的產物;選擇可移植集合時,只包含沒有 target 的產物。

通用上限#

清單大小上限為 1 MiB。識別符號以 ASCII 字母或數字開頭,之後可用字母、數字、 ._-。文字欄位是有界的單行字串。相對路徑用 /,不能是絕對 路徑,也不能包含空段、... 段、磁碟機代號字首、冒號或反斜槓。

AIT 家族協調器:ait-release-family.json#

這不是一份通用的多專案清單。約定 ait.release.family/v3 負責協調官方 AIT 原生元件、目標、公開原始碼投影和分發身份。

程式碼 · json
{
  "schema": "ait.release.family/v3",
  "family": {
    "name": "ait-native",
    "version": "1.1.1",
    "channel": "stable",
    "tag": "v1.1.1"
  },
  "targets": ["aarch64-apple-darwin", "x86_64-unknown-linux-gnu"],
  "public_source": {},
  "components": [],
  "distributions": [],
  "compatibility": {}
}

上面那些空物件和空陣列只是展示根層形狀,它們不是一份有效的發布。真正的 家族清單必須滿足下面所有的關係約束。

家族身份與目標矩陣#

欄位約定
schema確切字串 ait.release.family/v3
family.name必填識別符號。
family.version穩定版 MAJOR.MINOR.PATCH 或 RC 版 MAJOR.MINOR.PATCH-rc.N,要和 channel 對得上。
family.channel確切的 rcstable
family.tag確切的 v 加上 family.version
targets1 到 32 個唯一的目標識別符號。

元件#

components 含 1 到 64 個唯一的元件物件。

欄位約定
id必填的唯一元件識別符號。
source_repository必填的源 Repository 識別符號。在 v3 的公開原始碼模式下,它必須是 ait-coreait-serverait-runnerait-pythonait-node 之一。
source_snapshot必填,有效且確切的 Snapshot ID。
ecosystem必填識別符號。
license必填的有界 SPDX 風格表示式。
version_schemefamilypep440
versionfamily 時必須等於家族版本,取 pep440 時必須是它對應的規範 PEP 440 對映值。
artifacts1 到 32 條唯一的產物要求。
artifacts[].kind必填的產物 kind 識別符號。
artifacts[].targets取自根目標矩陣的唯一目標識別符號。空陣列表示該 kind 只有一個可移植產物。

產物 kind 和 target 組成的二元組,在同一個元件內不得重複。

分發#

distributions 含 1 到 128 條記錄。每個元件都必須被至少一條分發覆蓋到。

欄位約定
channelgithubpypinpmocihomebrewaptwinget
roleproductstandaloneimplementation
identity必填的有界分發身份;channel 與 identity 這一對必須唯一。
components1 到 64 個已宣告的元件 ID。
targets取自家族矩陣的 1 到 32 個目標。選中的每個元件都必須提供該目標,或者提供可移植產物。

public_source#

v3 的公開原始碼物件故意定得很死,因為它產出的是一個可評審的發布 monorepo。

欄位約定
model確切的 release-monorepo
identity確切的官方公開原始碼身份 weita2026/ait-native
product_document確切的 docs/distribution.md
family_manifest確切的 ait-release-family.json
mapping_manifest確切的 ait-monorepo-source.json
build_entrypoints.unix確切的 build-release.sh
build_entrypoints.windows確切的 build-release.ps1
build_entrypoints.implementation確切的 build-release.mjs
subtrees各元件用到的每個源 Repository 各佔一條。
subtrees[].source_repository已宣告的源 Repository。
subtrees[].path同名的確切公開目錄。
subtrees[].transforms按順序作用於該 subtree 的、在允許清單內的 transform ID。
transforms所選源 Repository 集合所需的確切 transform 定義。
transforms[].id有界的 ASCII ID,以 /v1 結尾。
transforms[].source_repository擁有它的源 Repository。
transforms[].pathfromto該 transform ID 對應的、在允許清單內的確切路徑重寫三元組。

目前的允許清單裡,只有 runner 和 Python 原始碼 subtree 所需的同級 core 路徑 投影。任意改寫原始碼不是這份清單的擴充套件機制。那唯一一條 GitHub product 分發 必須使用同一個公開身份,並覆蓋家族裡的每個元件和每個目標。

相容性對映#

compatibility 是必填物件,最多 64 條。每個 key 是一個識別符號,每個 value 是非空的有界單行字串。它記錄的是針對使用者的相容性事實;它不替代元件 版本、Snapshot 鎖定或目標矩陣。

評審邊界#

  • 清單的改動,要和它引用的原始碼及依賴檔案改動記進同一個 Snapshot。
  • 更新元件的 source_snapshot 之前,一定要先評審它接納的產物、授權條款、 版本和分發覆蓋情況。
  • 生成出來的候選、檢查、建置、凍結、晉級、檢查碼、對映與回執檔案,別放 進這份編寫參考裡。它們是發布輸出,不是額外的使用者設定檔案。
  • 用完整的 ait release 命令參考去建立、檢查、建置和檢視發布證據;不要 手寫輸出回執。

相關參考#

版本權威

對照 1.1.1 原始碼逐條核對

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

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