ci(release): 给 release-please 配 extra-files,并把"哪几处它改不到"写成机器标注 - #121
Merged
Merged
Conversation
#114 让 release-please 恢复工作后,它自动开的 release PR(#115→#120)只改 3 个文件 (pyproject / CHANGELOG / manifest),而本仓有 10 处跟踪中的版本位 —— 那条 PR 一旦合进 main, `test_all_version_sites_agree` 会把 main 判红。我在 #115 上写过"要放行就得填 extra-files", 这条就是去填;但先查清了它到底能填哪些,不是照抄文档。 RP 没有 regex 类型:`schemas/config.json` 的 `extra-files[].type` 只接受 json | toml | yaml | xml | pom | generic,且 `generic` 要求行尾跟 `# x-release-please-version` 这种井号注释标记。于是: - 能自动(本条写进 extra-files 的 5 处 + pyproject):version.json、config.yaml(yaml/$.version)、 desktop/package.json、desktop/src-tauri/tauri.conf.json、Cargo.toml(toml/$.package.version); - 只能人改:Cargo.lock(归 cargo 生成,手写标记会被重写掉)、 setup.nsi 的 OutFile/APP_VERSION/VIProductVersion(NSIS 注释符是 `;`,用不了 `#` 标记)、 deploy/kubernetes/deployment.yaml 的镜像 tag(要跟 ghcr 上真存在的标签走); - 不列:scripts/installer/version.json(.gitignore:436 的装配中间物,仓库里没有)。 剩下的不装作能自动化,但把"哪几处要人补"变成失败信息的一部分: - `_RP_MANAGED` 常量 + 失败时逐条标「← RP 自动 / ← 手工同步」并写明原因; - 新增 `test_rp_managed_annotation_matches_the_actual_config`:标注必须与 config 里的 extra-files 一致 —— 指路信息自己漂掉,比没有注释更坏; - `docs/release-governance.md` §1 落同一张表。 验证:`test_version_consistency.py` + `test_release_robustness.py` 12 passed; 变异自证(把 tauri.conf.json 改成 2.2.99 → 红并逐条标注); `check_spec_refs.py` new=0;`verify_cloud_native.py` 全绿。 合掉之后 RP 会 groom 下一条 release PR(#120 / 2.2.4),那时就能在**真实 PR** 上看见 yaml/toml 更新器到底怎么写 config.yaml 与 Cargo.toml(保留引号还是裸值)。写歪了就回退对应条目, 而不是留着一个"看起来配好了"的配置。 Signed-off-by: ReSerendipity <zengyangc@outlook.com>
ReSerendipity
added a commit
that referenced
this pull request
Sep 22, 2026
#121 把 5 处版本位挂进 release-please-config.json 后,RP 立刻刷新了 #120。真 PR 上的 diff 证明 `type: yaml` 不是"改一个字段":它 parse 完再 dump,把 config.yaml 的 232 行 改成 160 增 / 160 删,注释全灭(model_source_mode 选型说明、SSL 怎么打开、 vram_safety_margin_gb 的算式),连 "127.0.0.1" 的引号也被规范化。同一批里 json/toml 四条都是干净的 1 行 —— 破坏性只属于 yaml 写入器。 - release-please-config.json:删掉 config.yaml 那条(回到手工同步) - tests/test_version_consistency.py: * _RP_MANAGED 去掉 config.yaml,注释里留下这次实测的账 * 新增 test_extra_files_entries_are_all_actionable:类型只允许 json|toml|generic, 并逐条走 jsonpath 确认"当前值就是 canonical 版本号"(配错 key / 文件搬家 / 字段改名 都当场红,而不是发版当天发现 RP 静默少抬一处),generic 则要求行内标记在场 * 新增 test_bundled_changelog_describes_its_own_version:RP 只抬 version.json 的 $.version,不抬 changelog/release_date,而壳的 updater.rs 会读它展示给用户 —— 拦住"自称 2.2.4、说明写着 2.2.3"的包 - docs/release-governance.md:§1 改成"自动位 5 条 + 手工位 4 类"并写清为什么 yaml 不能用; 手工发版步骤补上"发完把 manifest 抬到刚发的版本"(否则两边在版本号上互踩); 把两处已经过时的"release-please.yml 是结构性空转"改掉 - docs/agents/GOTCHAS.md #147:教训是"能不能命中 ≠ 副作用大小",新配 extra-files 必须等一条真 release PR 看 diff 行数 门禁:test_version_consistency 8 passed(含 3 次变异复验——加回 yaml 条目 / 把 jsonpath 写成 $.package.versions / 只抬 version.json 的版本号,每次都红在对应的闸上); test_release_robustness + test_integrity_selfcheck_packaging 合计 24 passed; ruff check 通过;check_spec_refs.py 退出码 0。 Signed-off-by: ReSerendipity <zengyangc@outlook.com>
This was referenced Sep 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
背景
#114 让 release-please 恢复工作后,它自动开的 release PR(#115 → 现在这条 #120)只改 3 个文件
(
pyproject.toml/CHANGELOG.md/ manifest),而本仓有 10 处跟踪中的版本位 ——那条 PR 一旦合进 main,
test_all_version_sites_agree(#113 加的闸)会把 main 判红。我在 #115 上写过"要放行就得填 extra-files",这条就是去填 —— 但先查清它到底能填哪些,不照抄文档。
事实:RP 没有
regex类型schemas/config.json里extra-files[].type只接受json | toml | yaml | xml | pom | generic,而generic要求那一行末尾带# x-release-please-version这种井号注释标记。于是:pyproject.tomlversion.json/desktop/package.json/tauri.conf.jsonjson+$.versionconfig.yamlyaml+$.versiondesktop/src-tauri/Cargo.tomltoml+$.package.versiondesktop/src-tauri/Cargo.lockscripts/installer/setup.nsi三处;,用不了generic要的#标记deploy/kubernetes/deployment.yaml镜像 tagscripts/installer/version.json.gitignore:436的装配中间物,仓库里没有它本条把能自动的 5 处写进
extra-files,剩下的不装作能自动化。把"哪几处要人补"变成失败信息的一部分
_RP_MANAGED,失败时逐条标← RP 自动/← 手工同步,并写明那几处为什么只能人补;test_rp_managed_annotation_matches_the_actual_config:标注必须与 config 里的extra-files一致 ——指路信息自己漂掉比没有注释更坏;
docs/release-governance.md§1 落同一张表。验证
tests/test_version_consistency.py+tests/test_release_robustness.py:12 passed;tauri.conf.json改成2.2.99→ 该条红,并把 10 处逐条标注(实测输出见 PR 评论前的 commit message);scripts/check_spec_refs.py→new=0;scripts/verify_cloud_native.py全绿。合掉之后我接着做的事(不再单独请示)
RP 会 groom 下一条 release PR(#120,2.2.4)。那时去读它生成的 diff,看在真实 PR 上
yaml/toml更新器到底怎么写config.yaml与Cargo.toml(保留引号还是写成裸值、$.package.version有没有落对位置)——写歪就回退对应条目,而不是留一个"看起来配好了"的配置。这算是我在 #114/#115 里承诺过的"必须在一次真实 release PR 上验"。
Refs: #114(RP 真修)、#120(下一条 release PR)、#115(我留下"要填 extra-files"结论的那条)