关于 release-core-test
供开发者将 `cyrus-core` 作为 npm 测试预发布版发布的技能;仅在工作区依赖需要时重发 `claude-runner`。版本变更保留在本地,不走完整发布流程。
主要功能
- 01构建工作区软件包
- 02检查是否需要重发 `claude-runner`
- 03将 `cyrus-core` 升为测试预发布版
- 04使用 `test` dist-tag 发布
- 05核验 dist-tags 并输出安装命令
适用场景
- 01通过 npm 测试 `cyrus-core` 变更
- 02在不移动 `latest` 的情况下提供预发布版
- 03判断是否需要重发 `claude-runner`
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cyrusagents/ cyrus --skill release-core-test安装后在 Claude Code 中输入/release-core-test确认已加载。
详细介绍
发布 Core(测试版)
仅将 cyrus-core 包(以及必要时的 claude-runner)作为开发/测试预发布版本发布到 npm,并使用 test dist-tag。此功能为开发者提供便利,便于迭代 cyrus-core,无需走完整的发布流程。
此技能不会执行的操作
此技能刻意保持精简。它不会:
- 更新
CHANGELOG.md或CHANGELOG.internal.md - 创建 git 标签
- 创建 GitHub 发布版本
- 移动任何 Linear issue
- 创建拉取请求
- 提交版本号更新(更新后的
package.json会保留为本地工作区改动)
它也不会发布其他任何工作区包(不包括 edge-worker、cyrus CLI、linear-event-transport 等)。唯一的例外是 claude-runner:仅当其 workspace:* 引用原本会解析到尚未发布的版本时,才会重新发布(见下方第 3 步)。
工作流
1. 在仓库根目录安装依赖
pnpm install
2. 在仓库根目录构建所有包
pnpm build
构建所有包可确保在发布前解析 workspace:* 依赖。
3. 判断是否需要重新发布 claude-runner
cyrus-core 通过 workspace:* 依赖 claude-runner。发布 cyrus-core 时,该 workspace:* 会被改写为 packages/claude-runner/package.json 中当前的版本。如果该版本尚未实际发布到 npm(因为 claude-runner 自上次发布后有本地改动),安装 cyrus-core@test 的用户将无法解析该依赖。
运行以下两项确定性检查:
# (a) Is the local claude-runner version already on npm?
LOCAL_CR=$(node -p "require('./packages/claude-runner/package.json').version")
npm view "cyrus-claude-runner@${LOCAL_CR}" version 2>/dev/null
# (b) Does claude-runner have uncommitted/unpushed source changes since its last publish?
git diff --quiet HEAD -- packages/claude-runner/src packages/claude-runner/package.json && echo "clean" || echo "dirty"
如果满足任一条件,则重新发布 claude-runner:(a) 检查没有返回内容(本地版本尚未发布到 npm),或 (b) 输出 dirty。如果两项检查均通过且结果干净,则跳过此步骤。如果不确定,请询问用户。
若要重新发布:
# Determine the next -test.N for claude-runner (same algorithm as cyrus-core below)
# Bump packages/claude-runner/package.json to e.g. 0.0.X-test.N
cd packages/claude-runner
pnpm publish --access public --no-git-checks --tag test
cd ../..
pnpm install # refresh lockfile so cyrus-core picks up the new claude-runner
否则,完全跳过此步骤。
4. 将 cyrus-core 的版本号更新为下一个 -test.N 预发布版本
算法:
- 从
packages/core/package.json读取当前版本号(例如0.1.22)。 - 将补丁版本号加一(例如
0.1.23)。 - 添加
-test.N后缀,从N = 0开始;如果<bumped>-test.N已存在于 npm(包括已中止或过期的先前尝试),则递增 N。
使用以下单行命令查找该补丁版本已有的 -test.N 版本,并选择下一个 N:
BUMPED=0.1.23 # the patch-bumped base, no suffix
npm view cyrus-core versions --json \
| jq -r '.[]' \
| grep -E "^${BUMPED}-test\.[0-9]+$" \
| awk -F'test.' '{print $2}' \
| sort -n | tail -1
# If empty, use N=0. Otherwise use (max + 1).
将选定的版本号(例如 0.1.23-test.0)写回 packages/core/package.json。不要提交此更改——将其保留为本地工作区修改,让开发者决定是否保留。
5. 使用 test dist-tag 发布 cyrus-core
cd packages/core
pnpm publish --access public --no-git-checks --tag test
cd ../..
使用 --tag test 意味着:
npm install cyrus-core@test会安装此版本。latestdist-tag 不会移动,因此不会影响生产环境的安装(npm install cyrus-core)。
6. 验证 dist-tag 是否设置正确
npm view cyrus-core dist-tags
确认 latest 与发布前一致,并且 test 现在指向刚发布的版本。如果 latest 发生变化,则说明有问题——停止操作并调查,然后再告知任何人安装。
7. 输出安装说明
发布后,输出以下两种形式,方便开发者复制/粘贴:
Published cyrus-core@<version> under dist-tag `test`.
Install with:
npm install cyrus-core@test
or pinned:
npm install cyrus-core@<version>
如果第 3 步也重新发布了 claude-runner,请一并提供其版本号。
重要说明
- 始终使用
--no-git-checks,以便从功能分支和有未提交改动的工作区发布。 - 始终使用
--tag test,确保真实发布所用的latestdist-tag 保持不变。 - 预发布版本(任何带
-后缀的版本,例如-test.0)不会在未指定标签或版本规格的情况下通过npm install cyrus-core自动安装,因此可以安全地重复运行。 - 发布
claude-runner后(如适用),运行pnpm install,使锁文件在构建/发布cyrus-core前反映新的已发布版本。 - 在干净的工作区中,从根目录运行
pnpm install和pnpm build总共约需 3 分钟——请据此设置命令超时时间。
示例
- “release core test”——运行
cyrus-core的开发版发布 - “/release-core-test”——调用此技能