Skip to content

ci: automate releases with an E2E gate and two approvals - #2718

Draft
yangkaa wants to merge 30 commits into
goodrain:mainfrom
yangkaa:release-automation
Draft

yangkaa wants to merge 30 commits into
goodrain:mainfrom
yangkaa:release-automation

Conversation

@yangkaa

@yangkaa yangkaa commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

目标

把发版从「对照清单逐项手工操作」改为「一个入口、两次审批」:

release.yml(只填一次版本号)
  gate    最近一次全量 E2E 是绿的,且测的正是 rainbond / console / ui 当前 main 的 commit
  build   按 gate 固定的 commit 调用 release-v6 构建双架构镜像
  images  15 个镜像都是 amd64 + arm64
  draft   创建草稿 release(发版说明可作为输入传入)
  go      【审批 1:能不能发】再次确认 main 未变化 → 发布 release
          → 触发下游打 tag(把 gate 固定的 commit 传给下游)
          → 触发 release-publish
release-publish.yml
  prepare 生成 chart 版本号改动、安装脚本、upgrade-versions.json,摘要里列出与线上的差异
  publish 【审批 2:对外发布】上传前确认 TOS key 与公开地址对应 → chart 提交并打 tag → 上传 chart / TOS → 回写 feed
  verify  从线上回读校验

替代的手工步骤

原清单项 现在
x86、arm64 所有镜像打包完成 自动校验 15 个镜像的 manifest;release-v6 拒绝单架构构建 -release 版本
rainbond-chart 改版本号 自动提交,然后才打 tag(6.9.11 就出现过 tag 里还是旧版本号的情况)
更新 helm 仓库包 自动上传;已存在的版本跳过,从不覆盖、不删除
快速安装脚本版本 / versions.json 自动生成并上传;upgrade-versions.json 以仓库为唯一来源(同时修正了线上 v6.9.11 的日期)
文档版本号 中版本号变化时自动给 rainbond-docs 提 draft PR

安全设计

  • 只由 release / 手动触发,不响应 pull_request;外部输入经 env 传入并先校验。
  • 两道审批用 GitHub Environment 的 Required reviewers;生产凭证只在 release-publish environment。
  • upgrade feed 的镜像地址白名单、上传前 TOS key 校验、已发布版本不覆盖。
  • fork 上无法构建 -release 版本,也无法跳过 E2E 门禁或复用镜像(这两项在 goodrain/rainbond 上会被拒绝)。
  • 可选飞书通知(等待审批、完成、失败),发送失败不影响发版。

合并顺序(重要)

  1. 先合并 goodrain/rainbond-e2e-tests#42(门禁依赖它输出的 e2e-provenance)。
  2. 再合并四个下游仓库支持 target 的 PR:ci: tag the release at the commit rainbond pinned rainbond-console#2156、ci: tag the release at the commit rainbond pinned rainbond-ui#1941、ci: tag the release at the commit rainbond pinned rainbond-operator#353、ci: tag the release at the commit rainbond pinned rainbond-chart#140。
  3. 在本仓库配置 release-go、release-publish 两个 environment 及 secrets / variables(见 hack/release/README.md),以及仓库级 secret E2E_READ_TOKEN。
  4. 最后合并本 PR。合并后 trigger-downstream-releases 不再给 chart 打 tag(改由 release-publish 在改完版本号后打),所以必须先完成第 3 步。

建议 squash 合并(23 个提交里包含演练中逐步修正的过程)。

验证

在 fork 上完整演练过,包括:

  • 真实发布到测试桶 / chart fork,重跑无副作用,用旧版本号回滚,故障注入(TOS key 配错被拦截);
  • 开启 E2E 门禁后由发版助理从「发版 v6.9.11」开始走完两次审批到 verify;
  • 演练中被保护机制正确拦截:审批后 main 发生变化(go 拒绝发布);
  • 演练中发现并修复:沿用旧草稿导致 tag 打在非 gate commit 上、chart / docs 未显式克隆 main、预览摘要对比对象不对等。

单元测试 python3 -m unittest discover -s hack/release -p '*_test.py'(32 个)全部通过,所有工作流通过 actionlint。

尚未覆盖

  • chart 上传到 chart.rainbond.com(演练中关闭,首次正式发版时才会真正执行;已有版本会跳过)。
  • 文档 PR(只在中版本号变化时触发,目前只有单元测试覆盖)。
  • 生产 CDN 缓存:verify 最多重试约 5 分钟。

Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
@yangkaa
yangkaa force-pushed the release-automation branch from c2bfd25 to 1c92e5c Compare October 18, 2026 18:33
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>
Signed-off-by: yangkaa <catkin.ni@gmail.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant