Skip to content

build(sdk): 改为锁定官方发布的 Node.js SDK 0.3.0 并发布 0.1.3 预发布 - #7

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

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

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Contributor

概要

把 Cargo 插件随包的 Node.js SDK 从本地副本改为锁定官方发布的 Node.js SDK 0.3.0(tag sdk-node-v0.3.0 + SHA-256),并发布 0.1.3 预发布。插件行为不变。

SDK 0.3.0 含结构化日志(litheLogging 1)实现,所以基于它的版本只能在提供 litheLogging 1 的 Lithe 预览版上启动;稳定版 Lithe 0.6.7 没有该能力,这些用户继续使用 0.1.1。因此 0.1.3 仍按预发布发布。

改动点

重新取 SDK 文件(与旧锁定的差异)

  • 来源:https://github.com/Lithe-IDEA/lithe-plugin-docs,tag sdk-node-v0.3.0,提交 940394fcd8455186ee985e6c34a319032414607f,发布包 lithe-plugin-sdk-node-0.3.0.tgz,SHA-256 d69cb09c4e87aeb0e01ea46e8b1dc80871de56de3729de451f6d9a64a18c4227。
  • 旧锁定的 SDK 文件里 errors.mjs、framing.mjs、host.mjs、index.mjs、process.mjs、protocol.mjs、state.mjs、LICENSE 与发布包逐字节相同,没有变化。
  • 有变化的只有三个文件,全部直接换成发布包里的文件,本插件零本地修改:
    • vendor/lithe-plugin-sdk/src/backend.mjs:发布版多了 keymapImportProvider 和 litheKeymapImport 协商(0.3.0 新增,本插件不用,不注册就不会协商)。
    • vendor/lithe-plugin-sdk/src/diagnostics.mjs:方法白名单多了 lithe/keymap/import。
    • vendor/lithe-plugin-sdk/src/index.d.ts:多了快捷键导入相关类型声明。
  • vendor/lithe-plugin-sdk/test/harness.mjs(测试用宿主)不在发布包里,内容与 tag 提交 sdk/node/test/harness.mjs 逐字节相同,锁定为 sdkCommit 来源。
  • vendor/lithe-testing/* 来自 Lithe 主仓库的测试辅助脚本,文件内容不变,仍按原提交固定。

sdk.lock.json(schema 2)

  • sdk:包名、版本 0.3.0、仓库、tag、提交、发布包 URL、发布包 SHA-256。
  • files[]:每个文件只记录 origin(sdkArchive 发布包 / sdkCommit tag 提交 / testSupport 测试辅助)、upstream(发布包内路径或仓库路径)、path、sha256。不允许 localChanges 或其他字段。
  • testSupport:测试辅助脚本的来源仓库和提交;coreSource:集成测试使用的宿主预览(含义不变,prerequisite 文案改为当前事实:宿主需提供 litheLogging 1)。
  • 去掉了“来自 SDK 工作树、不声明已发布”的说明。

scripts/verify-sdk.mjs

  • 离线校验:锁文件必须指向官方仓库、sdk-node-v<版本> tag、对应的发布包 URL,提交和哈希格式正确;逐文件 SHA-256 必须一致;vendor/ 下不允许出现未登记文件;SDK 源文件必须来自发布包;禁止 localChanges。
  • 新增 --download:下载发布包(HTTPS、有大小和超时上限、重试 3 次),校验 SHA-256 与锁文件一致,在内存里解包(不落盘、拒绝路径穿越、重复和非常规条目),确认 package/package.json 的包名和版本,并逐字节比较 sdkArchive 文件;sdkCommit 文件从 tag 提交的 raw 地址下载并比较。
  • 新增 test/sdk-lock.test.mjs(全部离线,用测试内合成的 tar.gz 与注入的下载函数):锁文件指向官方发布且无本地修改;错误仓库、tag、URL、提交、哈希、旧 schema、localChanges、非法来源或路径被拒绝;下载校验通过路径;发布包哈希不符、本地文件与发布包不一致、发布包缺文件、包版本不符、tag 文件变化均被拒绝;tar 读取器拒绝不安全条目。

版本与文档

  • 0.1.2 -> 0.1.3:plugin.json、backend/main.mjs 里的 createBackend 版本、README 安装和兼容说明。
  • README/NOTICE 改为“使用官方发布的 Node.js SDK 0.3.0,需要提供 litheLogging 1 的 Lithe 构建”,说明 --download 校验和 SDK 更新步骤,删除“未发布 SDK/本地日志改动”的表述。宿主仓库(Lithe 主仓库)仍是集成测试的 Core 来源,保留。
  • release.yml 里的发布说明改为 0.1.3:SDK 改为锁定官方发布的 0.3.0(tag + SHA-256),行为不变,仍需提供 litheLogging 1 的 Lithe 预览版,稳定版 0.6.7 用户继续使用 0.1.1。

发布流程(.github/workflows/)

  • release.yml 沿用硬编码的 gh release create --prerelease,所以 0.1.3 作为预发布发布。
  • 新增步骤“Require the release to be a prerelease”:gh release create 之后用 gh release view "$RELEASE_TAG" --json isPrerelease 回读;不是预发布就 gh release edit "$RELEASE_TAG" --prerelease,修正后仍不是则报错失败。该步骤放在单独一步,已存在 release 直接校验字节后退出的路径也会被检查。(背景:Maven v0.1.2 用了 --prerelease 却变成了正式版。)
  • ci.yml 和 release.yml 的 SDK 校验改为 node scripts/verify-sdk.mjs --download。

测试

本地(Node 24,macOS):

  • node scripts/verify-sdk.mjs:通过。
  • node scripts/verify-sdk.mjs --download:通过(下载真实发布包,SHA-256 与文件内容、tag 提交里的 harness 均一致)。
  • node scripts/test.mjs:22 项,18 通过,0 失败,4 项因没有准备 Core 桥接而按设计跳过(含新增的 8 项 SDK 锁定测试)。
  • node scripts/package.mjs:成功生成 cargo-build-0.1.3-darwin.zip。
  • actionlint:新增步骤无问题(仅有改动前就存在的 shellcheck 提示)。

需要 Lithe Core 桥接的集成测试(LITHE_CARGO_INTEGRATION=1,含真实 SDK 经过 Core 的 build/check/test/run 流程)本地未跑,由本 PR 的 CI 运行(CI 会检出宿主 preview 并编译桥接)。

- sdk.lock.json 改为 schema 2,锁定 lithe-plugin-docs 的 sdk-node-v0.3.0(提交、
  发布包 URL、SHA-256),逐文件记录发布包内路径和哈希,不再有 localChanges
- 重新从发布包取 backend.mjs、diagnostics.mjs、index.d.ts,其余 SDK 文件与旧锁定逐字节相同
- verify-sdk.mjs 新增 --download:下载发布包、校验 SHA-256,并要求本地文件与包内容一致
- CI 与发布流程改为运行 verify-sdk.mjs --download
- 版本 0.1.2 -> 0.1.3,发布说明改为 SDK 锁定变更与兼容性说明
- 发布流程在 gh release create 后回读 isPrerelease,不是预发布时修正并在仍失败时报错
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