发布清单(npm + macOS)
从仓库根目录使用 pnpm(Node 22+)。在打标签/发布前保持工作树干净。
操作员触发
当操作员说"release"时,立即执行此预检(除非遇到阻碍否则不要额外提问):
- 阅读本文档和
docs/platforms/mac/release.md。 - 从
~/.profile加载环境变量并确认SPARKLE_PRIVATE_KEY_FILE+ App Store Connect 变量已设置(SPARKLE_PRIVATE_KEY_FILE 应位于~/.profile中)。 - 如需要,使用
~/Library/CloudStorage/Dropbox/Backup/Sparkle中的 Sparkle 密钥。
- 版本和元数据
- 构建和产物
- 变更日志和文档
- 验证
- 如果已知上一个 npm 发布版本有问题,为预安装步骤设置
OPENCLAW_INSTALL_SMOKE_PREVIOUS=<last-good-version>或OPENCLAW_INSTALL_SMOKE_SKIP_PREVIOUS=1。
- 如果已知上一个 npm 发布版本有问题,为预安装步骤设置
- [ ](可选)完整安装程序冒烟测试(添加非 root + CLI 覆盖):
pnpm test:install:smoke - [ ](可选)安装程序 E2E(Docker,运行
curl -fsSL https://openclaw.ai/install.sh | bash,新手引导,然后运行真实工具调用):pnpm test:install:e2e:openai(需要OPENAI_API_KEY)pnpm test:install:e2e:anthropic(需要ANTHROPIC_API_KEY)pnpm test:install:e2e(需要两个密钥;运行两个提供商)
- [ ](可选)如果你的更改影响发送/接收路径,抽查 Web Gateway 网关。
- macOS 应用(Sparkle)
APP_BUILD必须是数字且单调递增(不带-beta),以便 Sparkle 正确比较版本。- 如果进行公证,使用从 App Store Connect API 环境变量创建的
openclaw-notary钥匙串配置文件(参见 macOS 发布)。
- 发布(npm)
故障排除(来自 2.0.0-beta2 发布的笔记)
- npm pack/publish 挂起或产生巨大 tarball:
dist/OpenClaw.app中的 macOS 应用包(和发布 zip)被扫入包中。通过package.json的files白名单发布内容来修复(包含 dist 子目录、docs、skills;排除应用包)。用npm pack --dry-run确认dist/OpenClaw.app未列出。 - npm auth dist-tags 的 Web 循环:使用旧版认证以获取 OTP 提示:
NPM_CONFIG_AUTH_TYPE=legacy npm dist-tag add openclaw@X.Y.Z latest
npx验证失败并显示ECOMPROMISED: Lock compromised:使用新缓存重试:NPM_CONFIG_CACHE=/tmp/npm-cache-$(date +%s) npx -y openclaw@X.Y.Z --version
- 延迟修复后需要重新指向标签:强制更新并推送标签,然后确保 GitHub 发布资产仍然匹配:
git tag -f vX.Y.Z && git push -f origin vX.Y.Z
- GitHub 发布 + appcast
插件发布范围(npm)
我们只发布 @openclaw/* 范围下的现有 npm 插件。不在 npm 上的内置插件保持仅磁盘树(仍在 extensions/** 中发布)。
获取列表的流程:
npm search @openclaw --json并捕获包名。- 与
extensions/*/package.json名称比较。 - 只发布交集(已在 npm 上)。
当前 npm 插件列表(根据需要更新):
- @openclaw/bluebubbles
- @openclaw/diagnostics-otel
- @openclaw/discord
- @openclaw/lobster
- @openclaw/matrix
- @openclaw/msteams
- @openclaw/nextcloud-talk
- @openclaw/nostr
- @openclaw/voice-call
- @openclaw/zalo
- @openclaw/zalouser
发布说明还必须标注默认未启用的新可选内置插件(例如:tlon)。