fix(ci): release-please 三处静默失效——它其实从没发过版(merge 需等 v2.2.2 tag 落地) - #114
Merged
Merged
Conversation
现象:三次「绿色」的 main push 之后既没有 tag 也没有 Release(v2.2.2 就是这么拖出来的)。 逐条读 CI 日志后定位到**三处各自独立**的静默失效: 1. `skip-github-pull-request: true` —— 这种模式下 RP 只从"已合并的 release PR"发版, 而本仓**从没产生过任何一个** release PR,于是每次 run 都是 `found 0 possible releases` + success。日志里同时能看到 `Unexpected input(s) 'package-name','changelog-path','draft','label','prerelease'` —— 那 5 个入参 v4 根本不认,被整段忽略(`action.yml` 的 inputs 表已逐条比对), 而且仓库里没有 `release-please-config.json` / `.release-please-manifest.json`, 所以 `changelog-path` 之类的配置实际从未生效。 改法:删掉无效入参与 skip-github-pull-request,配置写进那两个文件(`release-type: python` + `changelog-path: CHANGELOG.md` + manifest 登记 `2.2.2`)。 2. `release-please` job **从未声明 `outputs:`**,而 `build-release` 把门写在 `needs.release-please.outputs.release_created == 'true'` 上、还引用 `...outputs.tag_name` —— 两个引用恒为空。也就是说**即便 RP 正常发了版**,sdist/wheel + twine check + SHA256SUMS 那一步也永远不会有产物。现按官方文档的输出名(下划线式)补上 outputs 映射。 3. 缺"什么都没发生"的可见性:新增一步把 release_created / pr / tag_name / version 写进 job summary,两者皆空时明确提示"这是失同步还是确实没有约定式提交"。 另加一道硬自证(不再靠人记得去配):配置文件必须存在且是合法 JSON;必须存在 `v*` tag; `.release-please-manifest.json` **落后于**最新 tag 时直接失败(那会让 RP 重算已发布版本), 领先于最新 tag(发版进行中的状态)只 WARN。比较逻辑用 `sort -V`,5 个情形本机逐条验过 (含 2.10 vs 2.9、10.0 vs 1.0 这种字典序会判错的两例)。 已知代价,写明不藏:`extra-files: []` —— RP 只会自动改 `pyproject.toml` + CHANGELOG, 另外 8 处版本位(`version.json`/`config.yaml`/桌面壳 3 处/安装器/k8s tag)仍靠人工, 所以**下一条真正的 release PR 会被 `test_all_version_sites_agree` 判红**。那是有意的闸 (红 = 有人来同步,而不是发出一堆版本互相矛盾的产物);要交给 RP 就逐条填 `extra-files`, 并且必须在一次真实 release PR 上验,不是照抄文档。 合并顺序:等 v2.2.2 的 tag 落地之后再合,避免上面那个 WARN 长期挂着。 Signed-off-by: ReSerendipity <zengyangc@outlook.com>
This was referenced Sep 22, 2026
ReSerendipity
added a commit
that referenced
this pull request
Sep 23, 2026
重扫确认(run 35901422189 / headSha=d875c9c / success): - py/path-injection 36 → 0(35 判 fixed + #14 按 mitigated 交差); - py/stack-trace-exposure 7 判 fixed,但同位置重生 16 条新号 #114–#129 —— 其中 9 条就是 §7.1 那批已 dismiss 的 model.py 调用点,被我删函数的 行号推移顶了出来。逐条读过落点后全部按 mitigated 绑定 d875c9c 交差。 结论写进 §8.6:dismiss 绑的是告警号而不是代码事实,所以动这两族文件的重扫 成本是"再读一遍、再逐条交差一遍"。另记一次统计口径的坑: state=fixed 的 --paginate 在结果集变动时会重复返回记录,去重后是 total 128 = dismissed 76 + fixed 52 + open 0。 新增 tests/test_security_surface_http.py(10 条)经真实 ASGI 栈复验 #155 三处行为收紧。第一版漏了先 GET / 取 csrf_token,写请求全以 CSRF 403 结束、 5 条断言"全绿"却没打到业务分支 —— 加正向对照才暴露,这个反例一并写进注释。 本地:pytest 2124 passed / 12 skipped;ruff check/format 全绿。 Signed-off-by: ReSerendipity <ReSerendipity@users.noreply.github.com> Co-authored-by: ReSerendipity <ReSerendipity@users.noreply.github.com>
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.
现象与定位
三次「绿色」的 main push 之后既没 tag 迁移也没 Release(v2.2.2 就是这么拖出来的)。读日志后确认是三处互相独立的静默失效,而不是"上游偶发失败":
skip-github-pull-request: true让 RP 只从"已合并的 release PR"发版,而本仓从没有过一个found 0 possible releases后 success##[warning]Unexpected input(s) 'package-name','changelog-path','draft','label','prerelease', valid inputs are [...](已与action.yml的 inputs 表逐条比对)release-pleasejob 没有outputs:块,而build-release把门写在needs.release-please.outputs.release_created == 'true'上、还引用...outputs.tag_nametwine check+ SHA256SUMS 也永远不出产物仓库里也没有
release-please-config.json/.release-please-manifest.json,所以"配置写在 with 里"这件事从未成立。改法
skip-github-pull-request,配置落到那两个文件(release-type: python+changelog-path: CHANGELOG.md+ manifest 登记2.2.2);outputs:映射(输出名按官方文档为下划线式:release_created/tag_name/version/pr);v*tag、manifest 落后于最新 tag 直接失败(那会让 RP 重算已发布版本),领先(发版进行中)只 WARN。
比较用
sort -V,5 个情形本机逐条验过,含2.10 vs 2.9、10.0 vs 1.0这种字典序会判错的两例。已知代价(写明,不藏)
extra-files: []—— RP 只会自动改pyproject.toml+ CHANGELOG,另外 8 处版本位(
version.json/config.yaml/ 桌面壳 3 处 / 安装器 / k8s 镜像 tag)仍靠人工。所以下一条真正的 release PR 会被
test_all_version_sites_agree(#113 加的)判红。这是有意的闸:红 = 有人来同步,而不是静默发出一堆版本互相矛盾的产物。要交给 RP 就逐条填
extra-files,并且必须在一次真实 release PR 上验 —— 我没法在这里验证 RP 对每个文件的改写行为。合并顺序
等 v2.2.2 的 tag 落地之后再合,否则 manifest(2.2.2) 领先最新 tag(v2.2.1) 会让自证步骤长期挂 WARN。
(当前 v2.2.2 尚未发布:
gh release list最新是 v2.2.1,2026-08-22。)本地验证
python -c yaml.safe_load通过(4 步、outputs 两项、RP 只剩 2 个合法入参);scripts/verify_cloud_native.py全绿;scripts/check_spec_refs.py→new=0;pre-commit 通过。