发布检查清单(npm + macOS)
适用场景
在以下情况下使用本页面:
- 发布新的 npm 版本
- 发布新的 macOS 应用版本
- 发布前验证元数据
从仓库根目录使用 pnpm(Node 22+)。在标记/发布前保持工作树干净。
操作员触发
当操作员说"发布"时,立即执行此预检(除非受阻,否则没有额外问题):
- 阅读本文档和
docs/platforms/mac/release.md。 - 从
~/.profile加载环境变量,并确认设置了SPARKLE_PRIVATE_KEY_FILE+ App Store Connect 变量(SPARKLE_PRIVATE_KEY_FILE 应位于~/.profile中)。 - 如有需要,从
~/Library/CloudStorage/Dropbox/Backup/Sparkle获取 Sparkle 密钥。
- 版本和元数据
- 提升
package.json版本(例如2026.1.25)。 - 运行
pnpm plugins:sync以对齐扩展包版本 + 更改日志。 - 更新 CLI/版本字符串:
src/cli/program.ts和src/provider-web.ts中的 Baileys 用户代理。 - 确认包元数据(名称、描述、仓库、关键字、许可证)和
bin映射指向moltbot的dist/entry.js。 - 如果依赖项发生了变化,运行
pnpm install,以便pnpm-lock.yaml是最新的。
- 构建和产物
- 如果 A2UI 输入发生了变化,运行
pnpm canvas:a2ui:bundle并提交任何更新的src/canvas-host/a2ui/a2ui.bundle.js。 -
pnpm run build(重新生成dist/)。 - 验证 npm 包
files包括所有必需的dist/*文件夹(特别是dist/node-host/**和dist/acp/**用于无头节点 + ACP CLI)。 - 确认
dist/build-info.json存在并包括预期的commit哈希(CLI 横幅使用此哈希进行 npm 安装)。 - 可选:构建后
npm pack --pack-destination /tmp;检查压缩包内容并将其保留在 GitHub 发布的便利位置(不要提交它)。
- 更改日志和文档
- 更新
CHANGELOG.md,包含面向用户的亮点(如果缺少则创建文件);保持条目严格按版本降序排列。 - 确保 README 示例/标志与当前 CLI 行为匹配(特别是新命令或选项)。
- 验证
-
pnpm lint -
pnpm test(或pnpm test:coverage,如果你需要覆盖率输出) -
pnpm run build(测试后的最后完整性检查) -
pnpm release:check(验证 npm 包内容) -
MOLTBOT_INSTALL_SMOKE_SKIP_NONROOT=1 pnpm test:install:smoke(Docker 安装冒烟测试,快速路径;发布前必需)- 如果紧接的上一个 npm 版本已知已损坏,请为预安装步骤设置
MOLTBOT_INSTALL_SMOKE_PREVIOUS=<last-good-version>或MOLTBOT_INSTALL_SMOKE_SKIP_PREVIOUS=1。
- 如果紧接的上一个 npm 版本已知已损坏,请为预安装步骤设置
- (可选)完整安装程序冒烟测试(添加非 root + CLI 覆盖率):
pnpm test:install:smoke - (可选)安装程序 E2E(Docker,运行
curl -fsSL https://clawd.bot/install.sh | bash,入门,然后运行真实的工具调用):pnpm test:install:e2e:openai(需要OPENAI_API_KEY)pnpm test:install:e2e:anthropic(需要ANTHROPIC_API_KEY)pnpm test:install:e2e(需要两个密钥;运行两个提供商)
- (可选)如果你的更改影响发送/接收路径,请抽查 Web 网关。
- macOS 应用(Sparkle)
- 构建 + 签署 macOS 应用,然后将其压缩以进行分发。
- 生成 Sparkle appcast(通过
scripts/make_appcast.sh的 HTML 注释)并更新appcast.xml。 - 准备应用压缩包(和可选的 dSYM 压缩包)以附加到 GitHub 发布。
- 按照 macOS release 获取确切的命令和所需的环境变量。
APP_BUILD必须是数字 + 单调的(无-beta),以便 Sparkle 正确比较版本。- 如果公证,使用从 App Store Connect API 环境变量创建的
moltbot-notary钥匙串配置文件(请参阅 macOS release)。
- 发布(npm)
- 确认 git 状态干净;根据需要提交和推送。
-
npm login(如果需要,验证 2FA)。 -
npm publish --access public(对于预发布使用--tag beta)。 - 验证注册表:
npm view moltbot version、npm view moltbot dist-tags和npx -y [email protected] --version(或--help)。
故障排除(来自 2.0.0-beta2 发布的说明)
- npm pack/publish 挂起或产生巨大的压缩包:
dist/中的 macOS 应用包(和发布压缩包)被扫入包中。通过package.jsonfiles白名单发布内容(包括 dist 子目录、文档、技能;排除应用包)来修复。通过npm pack --dry-run确认未列出dist/Moltbot.app。 - dist-tags 的 npm auth web 循环:使用传统身份验证获取 OTP 提示:
NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add [email protected] latest
npx验证失败,显示ECOMPROMISED: Lock compromised:使用新的缓存重试:NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y [email protected] --version
- 标签需要在后期修复后重新指向:强制更新并推送标签,然后确保 GitHub 发布资产仍然匹配:
git tag -f vX.Y.Z && git push -f origin vX.Y.Z
- GitHub 发布 + appcast
- 标记并推送:
git tag vX.Y.Z && git push origin vX.Y.Z(或git push --tags)。 - 为
vX.Y.Z创建/刷新 GitHub 发布,标题为moltbot X.Y.Z(不仅仅是标签);正文应包括该版本的完整更改日志部分(亮点 + 更改 + 修复),内联(无裸链接),并且不得在正文中重复标题。 - 附加产物:
npm pack压缩包(可选)、Moltbot-X.Y.Z.zip和Moltbot-X.Y.Z.dSYM.zip(如果已生成)。 - 提交更新的
appcast.xml并推送它(Sparkle 从 main 获取信息)。 - 从干净的临时目录(无
package.json),运行npx -y [email protected] send --help以确认安装/CLI 入口点工作。 - 公布/分享发布说明。
插件发布范围(npm)
我们仅在 @moltbot/* 范围下发布现有的 npm 插件。未在 npm 上的捆绑插件保持仅磁盘树(仍包含在 extensions/** 中)。
派生列表的过程:
npm search @moltbot --json并捕获包名称。- 与
extensions/*/package.json名称进行比较。 - 仅发布交集(已在 npm 上)。
当前 npm 插件列表(根据需要更新):
- @moltbot/bluebubbles
- @moltbot/diagnostics-otel
- @moltbot/discord
- @moltbot/lobster
- @moltbot/matrix
- @moltbot/msteams
- @moltbot/nextcloud-talk
- @moltbot/nostr
- @moltbot/voice-call
- @moltbot/zalo
- @moltbot/zalouser
发布说明还必须指出未默认启用的新可选捆绑插件(例如 tlon)。