Skip to content

build(sdk): 改为锁定官方发布的 Java SDK 0.3.0 并准备 0.1.3 预发布 - #11

Open
xiaoyumuxi wants to merge 1 commit into
mainfrom
build/sdk-java-0.3.0
Open

xiaoyumuxi wants to merge 1 commit into
mainfrom
build/sdk-java-0.3.0

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Contributor

概述

把内置的 Java SDK 从“基于未发布工作区的本地改动”改为锁定官方发布的 Java SDK 0.3.0(tag sdk-java-v0.3.0 + 发布 JAR 的 SHA-256),并准备 0.1.3 预发布。插件行为与 0.1.2 相同。

SDK 0.3.0 含结构化日志(litheLogging: 1),基于它构建的插件只能在提供 litheLogging: 1 的 Lithe preview 上启动;稳定版 0.6.7 没有,所以 0.1.3 必须是 GitHub 预发布。

改动点

重新 vendor SDK(vendor/)

  • 逐文件对比 tag sdk-java-v0.3.0(提交 940394fcd8455186ee985e6c34a319032414607f)与原 vendor:有 2 个文件不同,已改为发布版原文件:
    • Backend.java:发布版新增 litheKeymapImport 相关代码(keymapImportProvider、lithe/keymap/import、能力协商)。其余部分与原本地版本一致,本插件不使用该功能。
    • Diagnostics.java:操作白名单新增 lithe/keymap/import。
  • 其余 13 个源文件和 LICENSE 与发布版逐字节相同,只有元数据变化。
  • 不再保留任何本地改动(原锁文件中 localChanges/upstreamSha256 描述的未提交工作区改动全部消失)。SDK-LICENSE 仍随安装包提供。

sdk.lock.json 与 scripts/sdk/verify-sdk.mjs

  • 锁文件改为 schemaVersion: 2:固定仓库、版本 0.3.0、tag、tag 指向的提交、发布 JAR 的 URL 和 SHA-256(5a84ebdb…8059),每个文件记录上游路径、vendor 路径和 SHA-256。
  • 校验脚本严格检查锁文件:tag 和资产 URL 必须由版本推导,提交必须是 40 位,文件条目只允许 upstream/path/sha256 三个字段(拒绝 localChanges),上游路径必须与 vendor 路径对应,禁止重复和路径穿越。
  • 离线模式(打包前仍会运行):vendor/ 必须与锁文件逐文件一致,缺失、改动、额外文件都会拒绝。
  • 新增 --download 模式:用 git ls-remote 确认 tag(含 annotated tag 解引用)仍指向锁定提交;下载发布 JAR 核对 SHA-256(有超时和大小上限);逐个取 tag 提交上的原文件,核对与 vendor 一致。
  • 新增 scripts/sdk/test-verify-sdk.mjs(不联网):覆盖篡改/多余/缺失文件、11 种无效锁文件、发布核对的成功与各类失败(tag 移动、JAR 被替换、上游文件不一致、请求失败)、以及在真实 git 仓库里对 annotated/lightweight tag 的解析。已接入 CI。
  • CI 新增两步:test-verify-sdk.mjs,以及 verify-sdk.mjs --download。

版本与文档

  • 插件版本 0.1.2 -> 0.1.3:plugin.json、extension/pom.xml、backend/pom.xml(package.mjs --expect-tag 检查这三处)。
  • 新增 docs/releases/v0.1.3.md:SDK 改为锁定官方发布的 Java SDK 0.3.0(tag + SHA-256),行为与 0.1.2 相同。
  • README、NOTICE、backend/pom.xml 和 package.mjs 注释:去掉“未提交工作区/未发布 SDK”的说法,改为使用已发布的 Java SDK 0.3.0、需要提供 litheLogging: 1 的 Lithe 构建;补充升级 SDK 的流程和三条验证命令。

发布工作流(release.yml)

  • PRERELEASE_TAGS 加入 v0.1.3(注释同步更新)。
  • gh release create 之后回读 gh release view --json isPrerelease:应为预发布却不是时执行 gh release edit --prerelease 并再次回读;仍不符则任务失败。应为稳定版却是预发布时也会失败。此前 v0.1.2 被发布成了正常 Release,这一步防止预发布版成为 Latest 影响稳定版用户。
  • 用伪造的 gh 在本地模拟了 5 种情形(创建即正确、创建错误但 edit 修复、edit 无效、稳定版正确、稳定版被误标预发布),退出码符合预期。

测试

本地 macOS,Node 24、JDK 17(默认)、JDK 11、Maven 3.10.0;本机没有 Java 8,Java 8 由 CI 覆盖(后端用 --release 8 编译)。

命令 结果
node scripts/test-process.mjs 通过(8 项)
node scripts/sdk/test-verify-sdk.mjs 通过(5 项)
node scripts/sdk/verify-sdk.mjs 通过
node scripts/sdk/verify-sdk.mjs --download 通过(tag、JAR SHA-256、16 个文件均核对一致)
node scripts/package.mjs --expect-tag v0.1.3 通过,生成 maven-build-0.1.3-darwin.zip
node scripts/test-backend.mjs(Java 17、Java 11) 通过
node scripts/test.mjs(真实 Maven 3.10.0;Java 17、Java 11) 通过

本地未运行 CI 里的 “Validate against Lithe Store rules” 一步(需要克隆并执行 Lithe-store 的脚本),以及 Maven 3.6.3 + Java 8 的矩阵项,交给 CI。

合并后由人工推送 v0.1.3 标签发布。

- vendor/ 重新取自官方发布 tag sdk-java-v0.3.0:Backend.java 和 Diagnostics.java 随发布版更新(新增 litheKeymapImport 相关代码,logging 部分与此前一致),其余 13 个源文件和 LICENSE 与发布版逐字节相同;不再保留任何本地改动。
- sdk.lock.json 改为 schemaVersion 2:固定仓库、版本 0.3.0、tag、tag 指向的提交 940394f、发布 JAR 的 URL 与 SHA-256,以及每个文件的上游路径和 SHA-256。
- verify-sdk.mjs 严格校验锁文件格式(拒绝 localChanges 等多余字段、上游路径与 vendor 路径不对应);新增 --download 模式,联网核对 tag 仍指向锁定提交、发布 JAR 的 SHA-256、每个文件与 tag 上的原文件一致。新增不联网的回归测试 test-verify-sdk.mjs,并接入 CI。
- 插件版本 0.1.2 -> 0.1.3(plugin.json、extension/pom.xml、backend/pom.xml),新增 docs/releases/v0.1.3.md,README、NOTICE、注释改为描述已发布的 SDK 0.3.0。
- release.yml:v0.1.3 加入 PRERELEASE_TAGS;gh release create 之后回读 isPrerelease,应为预发布却不是时执行 gh release edit --prerelease 并复查,仍不符则任务失败。
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.

1 participant