现象
用 qtcloud-devops release publish 发预发布版本时,建的 GitHub Release 不是 prerelease(isPrerelease=false)。
这与 devops-release 工作流的发布判据对不上——判据要求「Release 标成了预发布」:
gh release view "cli/v$(...)" --repo quanttide/qtcloud-work --json isPrerelease --jq '.isPrerelease'
# 期望 true
复现
发 audit 工具箱的 Rust 预发布(qtcloud-devops 0.11.0):
cd packages/quanttide-audit-toolkit/packages/rust
qtcloud-devops release publish -y -v rust/v0.1.0-alpha.1
# ✓ 标签 rust/v0.1.0-alpha.1 已创建并推送
# ✓ GitHub Release rust/v0.1.0-alpha.1 已创建
gh release view rust/v0.1.0-alpha.1 --repo quanttide/quanttide-audit-toolkit --json isPrerelease --jq .isPrerelease
# false ← 期望 true
Release 地址:https://github.com/quanttide/quanttide-audit-toolkit/releases/tag/rust/v0.1.0-alpha.1
当前只能手工补标:gh release edit rust/v0.1.0-alpha.1 --prerelease。
根因
src/cli/src/platform/gh.rs 的 create_release():
Command::new("gh").args([
"release", "create", version, "--title", version, "--notes", notes, "--repo", repo,
])
调用里没有 --prerelease,也没有按版本后缀(-alpha.N / -beta.N / -rc.N)判断。于是所有版本都建成正式 Release。
src/cli/src/release/publish.rs 的测试 test_publish_prerelease_with_yes 只断言 is_ok() || is_err(),没核 isPrerelease,所以这条漏了过去。
期望
版本带预发布后缀时,建的 Release 是 prerelease(isPrerelease=true)。
建议
在 create_release 里判一次版本后缀,带 -alpha. / -beta. / -rc. 就加 --prerelease(判之前先去掉 scope/ 前缀);或加一个 prerelease: bool 参数,由调用方按合同版本算好传进来。测试补一条断言 isPrerelease。
现象
用
qtcloud-devops release publish发预发布版本时,建的 GitHub Release 不是 prerelease(isPrerelease=false)。这与
devops-release工作流的发布判据对不上——判据要求「Release 标成了预发布」:复现
发 audit 工具箱的 Rust 预发布(
qtcloud-devops 0.11.0):Release 地址:https://github.com/quanttide/quanttide-audit-toolkit/releases/tag/rust/v0.1.0-alpha.1
当前只能手工补标:
gh release edit rust/v0.1.0-alpha.1 --prerelease。根因
src/cli/src/platform/gh.rs的create_release():调用里没有
--prerelease,也没有按版本后缀(-alpha.N/-beta.N/-rc.N)判断。于是所有版本都建成正式 Release。src/cli/src/release/publish.rs的测试test_publish_prerelease_with_yes只断言is_ok() || is_err(),没核isPrerelease,所以这条漏了过去。期望
版本带预发布后缀时,建的 Release 是 prerelease(
isPrerelease=true)。建议
在
create_release里判一次版本后缀,带-alpha./-beta./-rc.就加--prerelease(判之前先去掉scope/前缀);或加一个prerelease: bool参数,由调用方按合同版本算好传进来。测试补一条断言isPrerelease。