Repository navigation
ci(release): 同步 1.21.1 多版本发布配置 - #248
Conversation
- 为 1.21.1 开发线注明统一发布入口、日志选择和失败规则 - 统一 Cjsah Maven 依赖仓库地址,上传沿用 MAVEN_URL
🌿 Roseau API Breaking Change Report
|
Gugle2308
left a comment
There was a problem hiding this comment.
结论:settings.gradle 的尾斜杠改动对 Gradle 解析无影响(Gradle 会标准化仓库 URL),文档的三条日志规则与配套 PR #252 的实现也逐条吻合;唯一需要处理的是合并顺序:文档指向的 Create Multi-Version Releases 工作流目前还不存在,要等尚未合并的 #252 把 release.yml 改名后才会出现。
审查范围:base dev/1.21.1 → head 7afefcc3,2 文件 +6/−4(patch-diff 与 API 声明逐位一致)、draft=false、mergeable=true、state=open、无既有 review。
✅ 一、已独立验证的部分
| 检查点 | 结论 |
|---|---|
.github/ci 回归测试 |
我把 head 的脚本抽出来在本地实跑:Ran 2 tests — OK,与 PR 描述「2 项通过」一致 |
settings.gradle 尾斜杠 |
只改了 pluginManagement 里 cjsah 那一行;Gradle 会规范化 Maven 仓库 URL,加不加尾斜杠解析到同一仓库,因此本次改动不改变解析行为 |
| 上传侧地址来源 | .github/ci/publish_maven.py:103 读 os.environ["MAVEN_URL"],ci.yml:39 传 secrets.MAVEN_URL;全仓无硬编码上传地址,与 PR 描述一致 |
| 本分支无 release workflow | 本线只有 Build and Test/CI for Mod/Pull Request Check/Roseau PR Comment,确实没有发布入口,因此文档指引到默认分支是合理的 |
| 「两站失败不阻塞」 | 与 #252 一致:mod-sites 加 continue-on-error: true,且 publish: needs: [prepare, seal, central] 不含 mod-sites |
文档三条日志规则与 #252 release_notes.py 实现精确对应(这是本 PR 最值得肯定的部分,逐条给出证据):
prerelease = release_type(plan["version"]) != "release"
for item in sorted(releases, key=lambda r: (r["published_at"], r["id"]), reverse=True):
tag = item["tag_name"]
if tag == plan["tag"] or (item["prerelease"] and not prerelease):
continue # ← 正式版时跳过所有预发布候选
comparison = github(f"compare/{quote(tag, safe='')}...{sha}?per_page=1", missing=True)
if comparison and comparison["status"] in {"ahead", "identical"}:
previous = tag; break # ← 祖先关系判定- 「按提交祖先关系选择」→
compare/…的status ∈ {ahead, identical}✅ - 「预发布可接正式版或预发布」→
prerelease=True时只排除自身 tag ✅ - 「正式版只接正式版」→
prerelease=False时额外排除item["prerelease"]✅
⚠️ 二、合并顺序依赖:文档入口当前不存在(主要项)
dev/26.1 现有 6 个 workflow,名称分别是 Build and Test、CI for Mod、Upload release to a mod site、Pull Request Check、Release AnvilLib、Roseau PR Comment,没有任何名为 Create Multi-Version Releases 的工作流;全仓 grep 该字符串,只命中本 PR 的 RELEASING.md。
它由仍处于 open 的 #252(ci(release): 统一多版本发布入口和更新日志范围)提供,其 diff 中确实有:
+name: Create Multi-Version Releases
⇒ 若本 PR 先于 #252 合入,dev/1.21.1 的 RELEASING.md 会让用户到 Actions 里找一个不存在的入口;同时「见默认分支发布文档」这个链接指向的仍是旧内容(# AnvilLib 正式发布),"版本后缀、自动日志、预检、演练与续跑" 这些章节要等 #247/#252 落地后才对得上。
建议:与 #252 同批合并并让本 PR 后合;或在文档里加一句"发布入口由默认分支 dev/26.1 的 #252 提供",这样即使先合也不会让用户以为入口丢了。
💡 三、roseau.gradle:32 没有尾斜杠是故意的,建议把文档措辞限定
gradle/scripts/roseau.gradle 里同一个 URL 出现两次,且两处写法不同:
17: url = 'https://server.cjsah.net:1002/maven/releases/' // 有斜杠:Gradle 仓库声明
32: for (repoUrl in ['https://repo1.maven.org/maven2',
'https://server.cjsah.net:1002/maven/releases']) // 无斜杠:字符串拼接基址
...
def conn = new URI("$repoUrl/$groupPath/$moduleName/maven-metadata.xml") // ← 自己补 /第 32 行是 "$repoUrl/…" 的拼接基址,加尾斜杠会生成 …/releases//dev/…(双斜杠)。所以当前状态正确,但 PR 描述/RELEASING.md 写的是「URL 统一为 …/releases/」,后人照做会把第 32 行也加上斜杠。
建议:文档措辞限定为「Gradle 仓库声明统一为 …/releases/」,或在该行加一行注释说明"此处为拼接基址,勿加尾斜杠"。
💡 四、其余(非阻塞)
pluginManagement仓库顺序两线不同:本线是cjsah → neoforged,dev/26.1是neoforged → cjsah(#252 只改斜杠、不动顺序)。属既有差异、本 PR 未改;若目标是"两线配置一致"可顺手对齐。- 可达性无法独立核实:我在沙箱内请求
https://server.cjsah.net:1002/(根路径与…/releases/)均返回连接失败(000),而对照https://github.com/返回200,DNS 可解析到113.9.93.117。这可能是沙箱出网策略或该端口不可达,不能据此判定地址失效;由于本 PR 对地址只加了尾斜杠(Gradle 侧无行为变化),风险很低,但请作者以自己实跑gradlew.bat help的结果为准。 - PR 描述的验证项:
gradlew.bat help(Windows)与 Actions 语义我无法在此复现;.github/ci的 2 项测试我已实测通过。
验证边界
settings.gradle 仅做静态语义判定(Gradle 仓库 URL 规范化),未实际跑 Gradle 解析;.github/ci 的 2 项测试在本地 Python 3.11.2 实跑通过;#252 的行为结论来自其 patch-diff 源码阅读(尚未合并,内容可能再变);Cjsah 私服可达性未能核实(见上)。
同步本开发线的 Create Multi-Version Releases 入口说明,由默认分支
dev/26.1统一上传两站、Maven Central 和 GitHub ReleaseFile。两站失败不重试、不阻塞公开与升版;Maven 或 ReleaseFile 失败使整体运行失败。日志按祖先 tag 和版本类型选取范围。Cjsah Maven 依赖仓库已使用 releases 路径,本 PR 将 URL 统一为
https://server.cjsah.net:1002/maven/releases/。上传仍使用机密MAVEN_URL。验证:本分支 Wrapper/JDK 下
gradlew.bat help --no-configuration-cache --console=plain通过;python -B -X utf8 -m unittest discover -s .github/ci(2 项通过);git diff --check通过。总控逻辑由面向dev/26.1的配套 PR 提供。