Skip to content

Add sync processor ci 添加同步模块处理器的ci - #99

Merged
QiuShui1012 merged 1 commit into
Anvil-Dev:dev/1.21.1from
QiuShui1012:fix/1.21.1
Aug 13, 2026
Merged

Add sync processor ci 添加同步模块处理器的ci#99
QiuShui1012 merged 1 commit into
Anvil-Dev:dev/1.21.1from
QiuShui1012:fix/1.21.1

Conversation

@QiuShui1012

Copy link
Copy Markdown
Contributor

No description provided.

@Gugle2308

Copy link
Copy Markdown

审查完成。以下是审查意见(将自动发布到 PR #99):

代码审查摘要 — PR #99

操作: opened
范围: 5 个文件(全部 .github/workflows/*.yml,0 新增 / 0 删除)/ 313 行 diff
分支: QiuShui1012:fix/1.21.1Anvil-Dev:dev/1.21.1

变更概述

module.sync/processor 接入完整 CI 链路:build_and_test.yml / publish_maven_central.yml 新增 gradle_project + module_dir 两个可选输入(带默认值 fallback,对现有调用方零侵入);ci.yml / pull_request.yml / release.yml 各新增 processor-build 作业,build-l2 增加对该作业的依赖;ci.yml / release.yml 新增 processor-deploy 作业发布到 Maven Central。

✅ 已交叉验证的事实(跨引用了目标分支源码)

验证点 结果
gradle_project: anvillib-sync-neoforge-1.21.1:anvillib-sync-processor-neoforge-1.21.1 双层路径 ✅ settings.gradle 中 include 'module.sync:processor' 重命名为此两级名字;与 module.sync/build.gradle 自身 dev 依赖写法 project(":anvillib-sync-neoforge-1.21.1:anvillib-sync-processor-neoforge-1.21.1") 完全一致,任务路径可解析
mod_id: anvillib_sync_processor 与 jar 命名 module.sync/processor/gradle.propertiesmod_id=anvillib_sync_processorarchivesName = ${mod_id}-neoforge-${mc},版本剥离逻辑匹配
module_dir: module.sync/processor 与产物目录 ✅ find/jreleaser 均落在 module.sync/processor/build/…
jreleaser 配置 ✅ processor 的 build.gradle 含 stagingRepository('build/staging-deploy'),与 publish_maven_central.yml 下载路径一致
artifact 命名链 ✅ 上传 anvillib-sync-processor-deploy ↔ 下载同名,对称
触发路径过滤 module.*/src/** 不跨目录匹配,module.sync/processor/{src,build.gradle,gradle.properties} 三条显式新增是必须的,不是冗余
PR 流程安全 ✅ pull_request.yml 不传 secrets(NOT_DEV=false)、pr_build=true → 不会误发布;processor-deploy 仅存在于 ci/release

⚠️ 警告

  • build_and_test.yml — find … | head -n 1 非确定性选择find 输出是 readdir 顺序(非字典序),若 build/libs 中存在多个未排除的 jar(主 jar + -sources/-javadoc 已排除,但未来任何模块若产出 -api.jar 等附加分类 jar),head -n 1 会静默选中任意一个,版本提取和产物上传将不一致。旧代码用 ls(字典序)+ 全量匹配,行为更可预期。建议把 glob 收紧为 -name "${{ inputs.mod_id }}-neoforge-*.jar"(与 archivesName 模式天然一致,只匹配主产物),或加 | sort 保证确定性。对当前 processor 模块实际无影响(libs 中恰好只有一个匹配 jar),属防患于未然的改动。
  • ci.yml — build-l2 等待 processor-build 的真实语义:CI(NOT_DEV=true)下 module.sync 通过 dev.anvilcraft.lib:…:latest.release 从远端 maven 解析 processor,而本次运行刚发布的是 +snapshot.N 版本。needs 排序只能保证「processor 自身编译并发布成功」,是否保证「l2 用上本次刚构建的 processor」取决于 latest.release+ 元数据版本的匹配。release.yml 无此问题(ci_build=false → 发布正式版本号,latest.release 可解析);ci.yml 建议确认该匹配行为是否符合预期(其他模块 codec/network/util 同样依赖此模式,如现有 CI 一直正常则无需改动,仅作提示)。

💡 建议

  • build_and_test.yml — 空产物 fail-fast:若 find 无结果(如未来构建产物目录变化),ARTIFACT 为空 → basename "" → 空 version,随后 upload-artifact 报 "No files were found" 且错误信息模糊。可加一行 test -n "$ARTIFACT" || exit 1
  • 版本字符串含 MC 版本前缀VERSION 实际为 1.21.1-<mod_version>+snapshot.N(jar 名 anvillib_sync_processor-neoforge-1.21.1-…)。与旧 awk 行为一致,非本次回归,且仅用于 artifact 显示名,可忽略。

🟢 看起来不错

  • gradle_project / module_dir 默认值 fallback 设计干净,现有模块调用方无需任何改动即可继续工作。
  • 「Get Version」步骤从 awk 重建路径改为输出实际 artifact 路径,上传/gametest/release 全部改用该路径——比旧代码更健壮(不再依赖版本字符串与文件名的一致性)。
  • 版本提取改用 bash 参数展开 + 显式 shell: bash,语义与原 awk 完全等价(已逐字比对)。
  • 纯注解处理器不开 gametest、不做 MCMOD 上传(module != 'main'),判断正确。
  • 发布链完整对称:build → dev maven publish → staging-deploy 捕获 → jreleaserDeploy,与现有 deploy-l* 模式完全一致。

结论: APPROVE — 无阻塞性问题。建议顺手修复 find | head -n 1 的确定性(一行改动),其余为可选优化。


由 Hermes Agent 审查

@Gugle2308

Copy link
Copy Markdown

💾 Self-improvement review: Skill 'ci-workflow-pr-review' created.

@Gugle2308

Copy link
Copy Markdown

🌿 Roseau API Breaking Change Report

Module Status Breaking Changes
codec ✅ Compatible 0
collision ✅ Compatible 0
config ✅ Compatible 0
integration ✅ Compatible 0
moveable-entity-block ✅ Compatible 0
network ✅ Compatible 0
rendering ⚪ Skipped
space-select ✅ Compatible 0
font ✅ Compatible 0
util ✅ Compatible 0
explosion ✅ Compatible 0
rpc ✅ Compatible 0
multiblock 🔴 BC detected 4
recipe ✅ Compatible 0
registrum ✅ Compatible 0
sync ⚪ Skipped
wheel 🔴 BC detected 3
main ✅ Compatible 0

🔴 multiblock — 4 breaking change(s)

dev/anvilcraft/lib/v2/multiblock/dynamic/MultiblockCheckSnapshot.java:20

dev.anvilcraft.lib.v2.multiblock.dynamic.MultiblockCheckSnapshot
dev.anvilcraft.lib.v2.multiblock.dynamic.MultiblockCheckSnapshot.<init>(long,java.util.Map<net.minecraft.core.BlockPos,dev.anvilcraft.lib.v2.multiblock.dynamic.MultiblockCheckSnapshot$Entry>)
CONSTRUCTOR_REMOVED
✓ binary-compatible
✓ source-compatible

dev/anvilcraft/lib/v2/multiblock/dynamic/MultiblockCheckSnapshot.java:20

dev.anvilcraft.lib.v2.multiblock.dynamic.MultiblockCheckSnapshot
dev.anvilcraft.lib.v2.multiblock.dynamic.MultiblockCheckSnapshot.controllerPosLong()
METHOD_REMOVED
✓ binary-compatible
✓ source-compatible

dev/anvilcraft/lib/v2/multiblock/dynamic/MultiblockState.java:47

dev.anvilcraft.lib.v2.multiblock.dynamic.MultiblockState
dev.anvilcraft.lib.v2.multiblock.dynamic.MultiblockState.<init>(net.minecraft.core.BlockPos,net.minecraft.core.Holder$Reference<dev.anvilcraft.lib.v2.multiblock.dynamic.definition.MultiblockDefinition>,boolean)
CONSTRUCTOR_REMOVED
✓ binary-compatible
✓ source-compatible

dev/anvilcraft/lib/v2/multiblock/dynamic/MultiblockState.java:38

dev.anvilcraft.lib.v2.multiblock.dynamic.MultiblockState
dev.anvilcraft.lib.v2.multiblock.dynamic.MultiblockState.<init>(net.minecraft.core.BlockPos,net.minecraft.core.Holder<dev.anvilcraft.lib.v2.multiblock.dynamic.definition.MultiblockDefinition>)
CONSTRUCTOR_REMOVED
✓ binary-compatible
✓ source-compatible

🔴 wheel — 3 breaking change(s)

dev/anvilcraft/lib/v2/wheel/client/gui/component/WheelWidget.java:143

dev.anvilcraft.lib.v2.wheel.client.gui.component.WheelWidget
dev.anvilcraft.lib.v2.wheel.client.gui.component.WheelWidget.<init>(int,int,int,int,float,float,int,int,int,int,int,int,float,int,float,java.util.List<dev.anvilcraft.lib.v2.wheel.client.gui.component.WheelWidget$RawSection>,int)
CONSTRUCTOR_REMOVED
✓ binary-compatible
✓ source-compatible

dev/anvilcraft/lib/v2/wheel/client/gui/component/WheelWidget.java:36

dev.anvilcraft.lib.v2.wheel.client.gui.component.WheelWidget
dev.anvilcraft.lib.v2.wheel.client.gui.component.WheelWidget.<init>(int,int,int,int,net.minecraft.network.chat.Component,float,float,int,int,int,int,int,int,float,int,float,float,java.util.List<dev.anvilcraft.lib.v2.wheel.client.gui.component.WheelWidget$RawSection>,int)
CONSTRUCTOR_REMOVED
✓ binary-compatible
✓ source-compatible

dev/anvilcraft/lib/v2/wheel/client/gui/component/WheelWidget.java:223

dev.anvilcraft.lib.v2.wheel.client.gui.component.WheelWidget
dev.anvilcraft.lib.v2.wheel.client.gui.component.WheelWidget.getSectionCircleDiameter()
METHOD_REMOVED
✓ binary-compatible
✓ source-compatible

Full CSVs: see the Artifacts section of this workflow run.

@QiuShui1012
QiuShui1012 merged commit d943176 into Anvil-Dev:dev/1.21.1 Aug 13, 2026
38 checks passed
@Gugle2308

Copy link
Copy Markdown

PR #99 的事件类型是 closed,按审查流程约定(closed/labeled → stop),此事件不触发评论,我不会下载 diff 也不发布任何审查意见。流程结束。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants