Skip to content

feat(ci): GitHub Release 发布后自动更新 production 分支触发生产部署 (SHA-4) - #55

Draft
WardLu wants to merge 1 commit into
mainfrom
feat/release-production-workflow-sha4
Draft

feat(ci): GitHub Release 发布后自动更新 production 分支触发生产部署 (SHA-4)#55
WardLu wants to merge 1 commit into
mainfrom
feat/release-production-workflow-sha4

Conversation

@WardLu

@WardLu WardLu commented Aug 18, 2026

Copy link
Copy Markdown
Owner

变更说明

实现「GitHub Release 发布 → 更新 production 分支 → 触发 Vercel 生产部署」的发布流程(SHA-4 拆分任务 SHA-11):

  • 新增 .github/workflows/release-to-production.ymlDeploy release to production):GitHub Release 发布(release: published)后,将 production 分支指针快进到该 release 的 tag commit;Vercel 的 Branch Tracking(已填 production)随之触发生产构建与部署。支持 workflow_dispatch 手动指定 tag 补发/重跑。
  • CONTRIBUTING.md「Release 闸门」同步 production 分支机制、回滚命令与保护分支取舍;发布步骤按新流程调整为线性顺序。

只更新分支指针、不创建新提交、不并入 main 开发内容;本 PR 不 push production 分支、不执行部署、不改生产数据。

变更类型

  • 功能新增(发布工作流)
  • 文档更新

方案取舍

选项 取舍 结论
release 触发 vs 手动触发 release: published 自动触发(主路径)+ workflow_dispatch 手动补发/重跑(兜底)。手动单独触发会增加操作摩擦且容易漏发 两者都做,自动为主、手动兜底
快进校验 strict fast-forward:目标 commit 必须是当前 production 指针的后代,否则失败并明确报错;绝不 force 防止误覆盖,保证 production 永远可回滚、可追溯
保护分支 production 当前未设保护,用 GITHUB_TOKENcontents: write)更新指针;后续启用保护时需改用细粒度 PAT/deploy key 或 environment 保护(已写入 CONTRIBUTING.md) 当前最小权限可行,升级路径已文档化
回滚策略 回滚无法快进,由维护者手动 git push --force-with-lease origin <上一个vX.Y.Z>^{commit}:production,再跑 Release production verification 复核 不把 force 自动化,避免误触发生产
与现有工作流衔接 release.yml 负责 tag 产物验证(Release 创建前必须全绿),release-production.yml 负责部署后站点验收;新增工作流只负责中间一环「更新 production 指针」,不重复验证 各司其职,不重复、不冲突

依赖关系:创建 GitHub Release 即代表该 tag 已通过 Release verification(CONTRIBUTING.md「Release 闸门」第 2、3 条),因此本工作流不重复验证产物。

检查清单

  • 已按改动范围选择最小充分的测试层级(L0 静态:工作流 YAML + 文档)
  • npm run check 通过
  • npm run public:check 通过
  • actionlint 对本工作流及现有 release.yml/release-production.yml/ci.yml 均无告警
  • 用模拟 git 仓库实测工作流 shell 逻辑三种场景:正常快进、幂等重跑、非快进拒绝;并实测文档中的回滚命令可恢复
  • 未提交 .env.vercel、secret key 或个人数据
  • 无数据库变更
  • 已同步 CONTRIBUTING.md;README/CHANGELOG/RELEASE_NOTES 不涉及本次内部工作流改动,无需更新
  • 已运行 npm run public:check,并复查暂存区没有内部、敏感或不必要文件

验证记录

  • 选定层级:L0 静态(工作流配置 + 文档,不涉及源码/UI/数据库)
  • npm run checkStatic checks passed.
  • npm run public:checkPublic repository check passed (0 staged paths, 178 candidate paths).
  • actionlint 1.7.7:新增与现有工作流均无输出(无问题)
  • shell 逻辑实测(本地模拟远端仓库,production 从 v1.3.8 快进到 v1.3.9):
    1. 正常路径:production 快进到目标 tag commit ✅
    2. 幂等重跑:已处于目标 commit 时 no-op,明确提示 ✅
    3. 非快进:目标不是当前指针后代时拒绝并提示走回滚命令 ✅
    4. 回滚:git push --force-with-lease origin <旧tag>^{commit}:production 成功,随后可再次正常快进 ✅
  • 未运行:npm run test:full 等(不涉及源码/数据库/浏览器行为,按风险矩阵不适用)

新增 release-to-production.yml:GitHub Release 发布后把 production 分支指针
快进到该 release 的 commit(strict fast-forward,绝不 force),Vercel Branch
Tracking 随之触发生产构建与部署;workflow_dispatch 支持补发/重跑。回滚为
维护者手动 force-with-lease。CONTRIBUTING.md Release 闸门同步 production
分支机制与回滚命令。
@vercel

vercel Bot commented Aug 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
shadow-mate Ready Ready Preview Aug 18, 2026 10:59am

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