Skip to content

release.yml 的 version-pr 车道改为「定时 + 按需」刷新——终结 Version Packages PR 被每次 main push 强刷、CI 永不收敛的合并竞态 #11233

Description

@os-zhuang

维护者 2026-08-23 拍板:「立卡派发 release.yml 的定时化改造」。skills 席 session 757f0dc0-5dae-51d7-9053-c15c57ebfe3b 立卡并派发。

问题(实测,非推断)

release.ymlversion-pr job 在每次 main push 上运行,changesets action 每次 reset --hard 到当前 sha 重算并 force-push changeset-release/main。在 ~18 合并/日的 main 上,#10183 的分支 CI 永不收敛、入队即被踢(docs/releases-maintenance.md 记录过 rc.6 被追四圈、估算需冻结两仓 ~40 分钟)。已核实:升级 @changesets/cli 3.0 不解决(本仓已在 ^3.0.0,行为如故——churn 是 action 算法 × 触发器,与 CLI 版本无关);cut-rc 快照道维护者明确不想再养。社区成熟解法即本卡:changesets 官方 automating 文档的 schedule 模式

改造(单文件为主:.github/workflows/release.yml)

  1. on: 增加 schedule(建议 0 */6 * * *,cron 只对默认分支生效);version-pr job 的 if:github.event_name == 'push' 改为 schedule/按需——push 不再刷新 version PR。两次刷新之间 chore: version packages #10183 静止:分支 CI 可收敛,可正常走队列合并。
  2. release-integritypublish 两个 job 原样留在 push 上。ADR-0125 的不变量一个都不许动:publish 仍只在「main 版本不在 npm」时启动、仍整体挂 environment: release 等人批;⛔ version-pr 仍不得获得任何 publish 能力(action 不带 publish: script 的结构性保证保留)。
  3. ⚠️按需刷新与修复道的 dispatch 冲突必须显式设计:现有 workflow_dispatch 是 publish 修复道(带 force input)。若直接让 version-pr 也吃 dispatch,一次「刷新」会同时把 publish 审计拉起并在 environment 门挂一个待批部署(噪音),反之亦然。可行形状(dev 定夺,PR 正文论证):dispatch 增加 refresh_version_pr boolean input,version-prschedule || (dispatch && inputs.refresh_version_pr),publishpush || (dispatch && !inputs.refresh_version_pr)——一个文件内分流,不新增 lane。
  4. version-pr 现有的 per-job concurrency(release-version-pr-…,cancel-in-progress: false)保留;release.yml 头部那段车道叙事(force-refresh 相关句子)与 docs/releases-maintenance.md 中「The standing Version Packages PR is force-refreshed on every main push」的前提句同步更新——文档描述的是机制,机制变了描述必须跟。
  5. 发版操作流从此收敛为:(需要时 dispatch 刷新)→ 合并 chore: version packages #10183 → 批准 release 环境

验证要求

  • node scripts/pm/dispatch-gates.mjs 派生并跑全族(至少 check-ci-filter-paritycheck:workflow-status-functionscheck:required-contexts 这类读 workflows 的门);
  • workflow 语法静态校验(仓内既有手段,勿引新依赖);
  • check-governed-merges --test 判落地类(.github/workflows/** 不在 governed 名录,预期普通队列,核实勿假设);
  • ⛔ 本卡不碰 publish/release-integrity 的任何步骤体、不碰 cut-rc.yml、不碰 environment 配置;release.yml 头部 2026-08-07「版本发布必须是人工的」裁决叙事一字保留。

参考:changesets automating 文档(schedule 模式)· changesets/action#215(auto-merge,⛔ 与 08-07 裁决冲突,不采)。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions