Skip to content

feat(track): 自动收录 Lithe-IDEA 组织的 lithe-plugin-* 仓库 - #49

Merged
xiaoyumuxi merged 1 commit into
mainfrom
feat/track-org-plugin-repos
Nov 4, 2026
Merged

xiaoyumuxi merged 1 commit into
mainfrom
feat/track-org-plugin-repos

Conversation

@xiaoyumuxi

@xiaoyumuxi xiaoyumuxi commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

改动类型

  • 收录新插件
  • 新增版本
  • 修改插件信息
  • 撤回版本 / 下架插件(请写明原因)
  • 脚本、CI 或文档

插件

  • 插件 ID:不涉及(本 PR 不改 lithe-plugin-index.json)
  • 来源仓库:不涉及
  • 版本 / Release 链接:不涉及

改动内容

Track plugin releases 原来只追踪已收录插件的新版本,Lithe-IDEA 组织新建的插件仓库必须手工提首次收录 PR。现在它会自动发现并收录组织下的 lithe-plugin-* 仓库。

scripts/track-releases.mjs

  • 新增组织发现:分页列出 Lithe-IDEA 的公开仓库,保留名称以 lithe-plugin- 开头、尚未收录(按 repository 不区分大小写比较)、不是私有、已归档或 fork 的仓库。lithe-plugin-docs 不发布插件,放在 DISCOVERY_EXCLUDED 里固定排除。
  • entryFromRepository:取最新的、带插件包的正式 Release 草拟条目。id、name、author 来自包内 plugin.json(id、displayName、vendor.displayName);repository、homepage(#readme)、description、license(SPDX ID)、tags(topics,为空时省略)来自 GitHub 仓库。仓库没有简介或 GitHub 识别不出许可证时不下载任何包,直接跳过。
  • 原来逐个条目追踪的循环抽成 trackEntry,已收录插件和新插件共用;仍然跳过 draft 和 pre-release。新插件至少加进一个版本才会按 id 排序插入索引,所以只发布过 pre-release 的仓库不会被收录。
  • 草拟条目和每个版本一起经过 validateIndex。条目不合格(缺 displayName/vendor.displayName、dev.lithe.* 命名空间等)时,该仓库只记录跳过原因,不会让整份索引校验失败、挡住其他插件的新版本。id 已被别的条目占用时也跳过并写明占用方。
  • 同一个包只下载一次(草拟条目和追踪版本共用)。
  • --plugin 现在也可以指定组织中尚未收录的插件 ID。
  • GITHUB_OUTPUT 增加 new_plugins,summary 中的新插件行带 [new plugin] 后缀。

scripts/validate-index.mjs

  • readPackageManifests(archive, pluginID) 的 pluginID 变成可选;不传时返回所有声明了字符串 id 的 plugin.json,用于在还不知道 id 时读出新插件的清单。原有调用不受影响。

.github/workflows/track-releases.yml

  • 顶部注释和手动运行输入的说明改为包含组织发现。
  • 有新插件时,PR 描述追加“首次收录”段落,提醒维护者条目是自动生成的(没有 icon 和中文简介),合并后另提 PR 补充,不要直接改 bot/track-releases(下一轮扫描会从 main 重建)。

文档

  • docs/publishing.md:“首次收录”开头说明组织仓库自动收录的条件、字段来源表和跳过条件;“发布新版本”说明扫描范围;预发布段落说明稳定版支持后组织插件会被自动首次收录。
  • docs/maintainers.md:审查清单加入 bot 首次收录的检查项;“自动追踪新版本”说明扫描范围、docs 排除和 --plugin 的新含义。
  • CONTRIBUTING.md:任务表和仓库结构的说明同步更新。

测试(scripts/store.test.mjs)

  • 只考虑活跃、未收录的 lithe-plugin-* 仓库(排除 docs、私有、归档、fork、其他前缀、已收录仓库)。
  • 新插件连同全部正式版本按 id 排序插入,元数据正确,整份索引通过 validateIndex,每个包只下载一次,pre-release 不收录。
  • --plugin 只保留指定插件。
  • 跳过:只有 pre-release、无许可证、无简介、id 已被占用、缺 vendor.displayName、dev.lithe.* id;元数据问题在下载前发现。
  • readPackageManifests 不传 id 时的行为。

验证

  • node --test scripts/store.test.mjs:50 通过,0 失败。
  • node scripts/validate-index.mjs lithe-plugin-index.json:12 个插件全部有效(本 PR 不改索引)。
  • 用真实 GitHub 数据 dry-run:GITHUB_TOKEN=$(gh auth token) node scripts/track-releases.mjs lithe-plugin-index.json --plugin io.github.lithe-idea.editor-keymap-import --dry-run。输出 skipped Lithe-IDEA/lithe-plugin-keymap-import: no stable release with a plugin archive yet(它目前只有 pre-release),退出码 0,没有写索引。

自检

  • 我是该插件的作者或维护者(或已获得授权)(不涉及具体插件)
  • plugin.json 的 vendor.signatureRequirement 为 "none",ID 不在 dev.lithe.*(自动收录同样经过这项校验)
  • 已在本地运行 node scripts/validate-index.mjs --verify-archives(本 PR 不改索引,没有新包需要校验)
  • 插件要运行的程序都已在 plugin.json 中声明,并在仓库 README 中说明(不涉及)
  • 没有修改已发布版本的 downloadURL / sha256,没有删除历史版本(撤回除外)

Track plugin releases 除了追踪已收录插件的新版本,还会扫描 Lithe-IDEA
组织下尚未收录的公开 lithe-plugin-* 仓库(排除 lithe-plugin-docs、私有、
已归档和 fork 仓库)。仓库有带插件包的正式 Release 时,按包内 plugin.json
(id、displayName、vendor.displayName)和仓库简介、许可证、topics 草拟条目,
连同全部正式版本放进同一个 bot PR。pre-release 仍然不收录。

草拟条目和版本一起经过 validateIndex,不合格的仓库只记录跳过原因,
不会让整份索引校验失败、挡住其他插件的新版本。
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 4, 2026 14:44
@xiaoyumuxi
xiaoyumuxi merged commit e9f0079 into main Nov 4, 2026
1 check passed
@xiaoyumuxi xiaoyumuxi changed the title feat(track): 自动收录 Lithe-IDEA 组织的 lithe-plugin-* 仓库 feat(track): 自动收录并自动合入 Lithe-IDEA 组织插件 Nov 4, 2026
@xiaoyumuxi xiaoyumuxi changed the title feat(track): 自动收录并自动合入 Lithe-IDEA 组织插件 feat(track): 自动收录 Lithe-IDEA 组织的 lithe-plugin-* 仓库 Nov 4, 2026
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