Skip to content

Latest commit

 

History

History
91 lines (65 loc) · 5.63 KB

File metadata and controls

91 lines (65 loc) · 5.63 KB

验证与发布

本文只定义当前验证门禁,不保存逐次执行记录、截图历史、构建哈希或发布状态。

1. 变更对应验证

变更 必须执行
Java 编译或 Gradle 配置 compileJava,完成前执行 build
机器、事务、能力、网络、红石、样板、总线、序列缓存器 runGameTestServer + build
datagen、配方、loot、tag、模型生成 runData,检查生成差异,再执行 build
Screen、renderer、客户端 Mixin、资源加载 build + 实际 runClient 路径
PNG、模型、ScreenStyle 检查资源与模型引用 + build,并运行客户端完成视觉检查
GuideME、语言或设计文档 检查中英文页面、frontmatter、本地链接与资源标识;发布资源变更执行 build
发布候选 DataGen 漂移检查、GameTest、build、实际客户端检查、独立 dedicated server 启动与 jar 内容检查

GameTest 不能证明像素、动画、hover、点击命中或客户端类加载;build 也不能替代行为验证。

2. 常用命令

.\gradlew.bat compileJava --stacktrace
.\gradlew.bat runGameTestServer --stacktrace
.\gradlew.bat runData --stacktrace
.\gradlew.bat build --stacktrace
.\gradlew.bat runClient --stacktrace
.\gradlew.bat runServer --stacktrace
git diff --check
git status --short

Star Technology Fork 的可选验证使用已有 Gradle 属性,不修改发布依赖:

& .\gradlew.bat 'runGameTestServer' '-PgtceuRuntimeJar=<versioned-jar>' --stacktrace

查看器客户端可通过 -PrecipeViewerRuntime=jei|emi|none 选择运行时。

3. GameTest 范围

现有 GameTest 位于:

src/main/java/com/warmthdawn/appliedpackaging/gametest/PackageDataGameTests.java
src/main/java/com/warmthdawn/appliedpackaging/gametest/SequenceBufferGameTests.java
src/main/java/com/warmthdawn/appliedpackaging/gametest/OptionalRecipeIntegrationGameTests.java

发布 jar 通过 Gradle 排除 gametest/**。测试结构来自仓库根目录 gameteststructures/prepareGameTestServerRun 会复制到对应开发运行目录。

行为变更应扩展最接近的现有测试,至少覆盖成功、容量/过滤拒绝、模拟不修改状态、提交失败不产生部分结果和 NBT 往返中与本次变更相关的边界。

GitHub Actions 在 main push、pull request、手动触发和 v* tag push 时依次执行 DataGen 差异检查、GameTest、build 与 git diff --check,并上传构建 jar;失败时额外保留可用的 Gradle 报告、崩溃报告和运行日志。只有实际推送且与 gradle.propertiesmod_version 完全一致的 v<version> tag 才会在构建成功后进入彼此独立的 GitHub Release、Modrinth 和 CurseForge 发布 job,手动触发不会发布。Modrinth job 使用 modrinth Environment 中的 MODRINTH_TOKEN,CurseForge job 使用 curseforge Environment 中的 CURSEFORGE_TOKEN。客户端交互与独立 dedicated server 启动仍属于发布候选的人工门禁,不由 CI 冒充完成。

4. 客户端检查

涉及客户端时,至少检查:

  • 游戏完成初始化、资源重载和纹理图集创建;
  • 目标 Screen 可打开,控件、滚动、tooltip、数量编辑和模式切换可用;
  • 方块、part、物品和动态 renderer 无 missing model/texture;
  • dedicated server 不加载客户端类;
  • latest.log 中没有与本 Mod 相关的异常。

客户端由人工关闭;不维护自动截图、Quick Play、固定世界或专用 smoke runner。

5. 文档、资源与产物检查

仓库不维护包装性的 verify-*.ps1。变更对应的真实检查直接使用 Gradle 运行、客户端或服务端运行结果和版本控制差异:

  • GuideME 同步修改中英文页面,检查 frontmatter、本地 Markdown 链接、物品/方块 ID 和场景资源路径;
  • 语言 JSON 检查语法、键对齐和格式占位符;
  • PNG 检查格式、尺寸、透明通道与可见内容,模型和 ScreenStyle 检查全部资源引用可解析;
  • 发布 jar 检查 META-INF/mods.toml 中展开后的版本与许可证、必要语言/GuideME/模型/贴图/license 文件是否存在,并确认不含 gametest/**
  • 以上静态检查不能替代 runClient 的实际 Screen、tooltip、模型和贴图检查。

6. 发布候选

按以下顺序执行并检查真实输出:

  1. 确认工作树中的变更范围明确。
  2. runData,通过 git status --shortgit diff -- src/generated/resources 确认没有意外生成差异。
  3. runGameTestServer
  4. build
  5. 检查文档、语言、资源引用与构建 jar 的展开元数据和内容。
  6. 运行 runClient 并完成发布范围内的人工交互与视觉检查。
  7. 运行 runServer,确认 dedicated server 完成 world load 后正常关闭。
  8. 检查 git diff --check 与最终 git status --short,确认只包含预期发布内容。

发布是否可打 tag 由当次验证结果决定,不在文档中维护状态机或历史“已通过”记录。确认候选版本后,先把包含版本号和发布工作流的提交推送到 main 并等待远端 CI 通过,再在同一提交创建并推送 v<mod_version> tag。tag 中含 alpha 预发布标签的版本发布为 alpha;其它预发布标签发布为 beta,且 GitHub Release 不标记为 Latest;无预发布后缀的版本发布为正式版与 GitHub Latest。GitHub Release 附件包含本次 tag 运行构建的唯一 jar 与对应 SHA-256 文件;Modrinth 和 CurseForge 上传同一个已验证 jar,声明精确 Minecraft 版本、Forge loader 以及 AE2 和 GuideME 必需依赖,不复用其它运行或本地产物。