Skip to content

Add a reproducible stable-release artifact and rollback pipeline #81

Description

@ULookup

Target Version

3.0-dev。该开发线将产生首个 3.0 stable release;证据复核于提交 a75fc8721b99e5c0b4421d0c58b5618bbe71ff31

Evidence

  • .github/workflows/ 只有 CI 与 agent-policy workflow,没有 tag/release workflow。
  • .github/workflows/ci.yml 只上传短期 compose-service-artifacts,不发布版本化服务镜像、二进制或 release manifest。
  • 各服务 Dockerfile 依赖预先生成的 build/<service>_serverdepends/,没有面向发布用户的统一构建入口。
  • 仓库当前没有 Git tag、VERSION/manifest、镜像 registry contract、checksums、SBOM、provenance、签名或发布回滚 runbook。
  • CI 的 protoc-gen-go@v1.36.11 与已跟踪生成文件头记录的 v1.34.2 不一致,make -C tests proto 会重写已跟踪输出,表明 code generation 尚不可复现。
  • 根与子项目仍声明 cmake_minimum_required(VERSION 3.1.3);CMake 4.3 默认拒绝该 policy compatibility。
  • README 声明 source available,但仓库没有独立 LICENSE、SECURITY 或稳定版兼容支持政策。

Problem or Goal

建立一个可审计、可复现、不可从未通过门禁的提交发布的 stable-release pipeline,产出版本化镜像/二进制、依赖清单和回滚材料,并能从发布产物而非开发工作区部署。

Scope

  • 定义 SemVer、RC、tag、支持分支和版本 manifest。
  • 固定 CMake、compiler、Protobuf、ODB、Go generator 与第三方依赖版本,保证 clean build/codegen 无 diff。
  • 在通过稳定版门禁后构建并发布九个服务的版本化镜像和必要二进制。
  • 生成 checksums、SBOM、provenance、依赖/许可证清单和机器可读 release manifest。
  • 生成符合仓库语言契约的发布说明。
  • 提供从指定版本部署、升级、回滚和验证的 canonical runbook。
  • 增加 workflow contract,禁止从非目标版本线、脏生成物或未通过门禁的 commit 发布。

Non-goals

  • 不在本 Issue 修复各业务缺陷、Reliability 缺口或 HA 拓扑。
  • 不执行生产部署或 merge;发布生产与高影响操作仍需人工批准。
  • 不承诺尚未测量的 SLA 或长期支持周期。
  • 不把 GitHub Actions cache/artifact 当作正式长期发布仓库。

Acceptance Criteria

  • 一个批准的 RC/tag 可从干净 runner 构建九个服务,重复构建使用相同输入并产生可解释的可复现结果。
  • make -C tests proto 在固定工具链下不修改已跟踪生成文件。
  • Release workflow 只接受 3.0-dev 选定提交/RC 或其批准的稳定分支,并依赖全部必需门禁成功。
  • 每个镜像和二进制带 SemVer、commit SHA、构建时间策略、checksum、SBOM、provenance 和依赖许可证清单。
  • 发布产物使用不可变 digest;部署 manifest 不依赖本地 build/depends/
  • 从前一 RC 升级到当前 RC、再回滚,按 runbook 可恢复到已知可用状态且数据兼容边界明确。
  • 发布说明列出功能、兼容性、迁移、已知限制和安全注意事项,但不包含 secret 或内部敏感数据。
  • LICENSE、SECURITY、版本支持与漏洞报告入口在 stable tag 中存在并相互一致。
  • workflow contract 阻止缺失版本元数据、可变镜像 tag、未固定生成器和未通过门禁的发布。

Test-first Plan

先增加行为中立的 workflow/release contract,并运行:

cd tests && go test ./pkg/contracts -run TestStableReleaseContract -v -count=1

预期 RED 是没有 release workflow、version manifest、不可变 artifact、SBOM/provenance 和 gate dependency。最小 GREEN 先产出 dry-run RC artifact 与 manifest;随后执行 clean build 两次、codegen diff、镜像启动 BVT、升级/回滚演练和安全扫描。该 Issue 的首个 RED 是发布契约缺失,不以编译成功替代运行时门禁。

Risk and Security

发布 token、registry credential 和 signing key 只能通过受控 GitHub environment/secret 使用,最小权限且不得提供给不受信 PR。供应链步骤必须固定 action digest、保留 provenance 并扫描高危依赖。正式 tag、签名、生产发布和不可逆迁移需要人工批准;回滚不能绕过数据兼容性检查。

Architecture Impact

No。该 Issue 建立构建、打包与发布边界,不改变九个服务、存储和消息拓扑。

Core-flow Impact

No。业务协议、认证、持久化、顺序、幂等、Push 和 ACK 行为不变;只验证并交付既有实现。

Required Skill Updates

  • .agents/skills/chatnow-orienting/references/technology-stack.md
  • .agents/skills/chatnow-orienting/references/repository-map.md
  • .agents/skills/chatnow-verifying-changes/SKILL.md
  • .agents/skills/chatnow-submitting-pull-requests/SKILL.md
  • docs/operations/release-management.md(若确认没有现有 canonical release 文档,则在同一 PR 创建)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Severity/S1area/infra跨系统基础设施enhancementNew feature or requesttech-debt设计已规划但代码未对齐的实现差距

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions