# QingLong 3.0 release-set 部署准入 生产部署的镜像 authority 是成功 `ql3-image-release.yml` 运行产生的 `ql3-release-set--` artifact,不是可变 version/source tag。下载后先验证该 JSON 的 GitHub file provenance,确认 repository、source tag、source revision 与目标发布一致,再从 `images[].reference` 读取完整 `ghcr.io//@sha256:`。 ## 选择 scope | 部署类型 | release scope | 必须出现的镜像 | | --- | --- | --- | | 低配路由器、Edge、Standalone | `local` | `local` | | Kubernetes/Cluster | `cluster` | `control`、`control-ai`、`worker`、`admin` | | 同时发布两族 | `all` | 上述五个镜像 | Local 用户不需要下载 Cluster 镜像,也不依赖 CloudNativePG 或 Worker 私有发布证据。Cluster 运维者不能拿 Local image 的证明替代任一角色镜像;尤其 Worker 与短生命周期 Admin 必须有各自 digest。 ## 准入检查 1. 只接受来自成功、未重跑替换的同一 release workflow attempt 的 artifact,并验证 release-set 文件 provenance。 2. `schema` 必须为 `qinglong/release-set@v1`;`release.version`、`release.sourceRef`、 `release.sourceRevision`、`release.scope` 必须与变更单一致。 3. 镜像集合必须与上表精确相等;每个 `reference` 必须是 digest reference,且 owner/repository 与部署目标一致。 4. Kubernetes overlay 用 `newName` 加 digest 或等价的 immutable image reference;不得把生产 placeholder 改成 `newTag`。Local compose/rollout 同样固定 `@sha256:`。 5. rollout 前再次向 registry 解析 version/source tag。它们可以用于发现,但只有解析到 release set 的同一 digest 才算一致;部署仍以 digest 为准。 ## 发布失败与恢复 GHCR 不提供跨 repository tag 事务,release set 明确记录 `crossRepositoryAtomicity=false`。如果 promotion 中途 失败,不删除已经正确的 tag,也不重新构建镜像。使用原 source tag/revision 重跑 release workflow:它会先验证 每个 source digest 和既有 tag;既有 tag 指向同一 digest 时继续,指向其他 digest 时立即失败。只有最终 release-set artifact 和 provenance 都生成后,才能宣布该 deployment family 可部署。 workflow artifact 当前保留 90 天,因此长期归档属于 release owner 的外部职责。进入稳定 GA 前,应把经验证的 release-set 同步到不可变、保留期满足组织策略的发布档案;同步过程不得改写 JSON。