SuperAPI AI 工具集

release-core-test

部署与运维

查看项目

更新于 10-14 05:33

技能介绍

Release Core(Test)是一个开发者便利性技能,用于将 cyrus-core 包(必要时包含 claude-runner)作为 dev/test 预发布版本发布到 npm 的 test dist-tag 下。它的目标是让开发者无需经过完整发布流程即可迭代 cyrus-core。

用途与定位

该技能用于在开发测试 Cyrus 变更时,将未发布的 cyrus-core 预发布版本快速推送至 npm,以便托管的 GUI 等消费者可以指向它。设计上刻意保持最小化,仅覆盖发布本身。

不做什么

该技能明确不执行以下操作:

  • 不更新 CHANGELOG.md 或 CHANGELOG.internal.md
  • 不创建 git tag
  • 不创建 GitHub release
  • 不移动任何 Linear 议题
  • 不打开 Pull Request
  • 不提交版本号变更(被 bump 的 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) 本地 claude-runner 版本是否已在 npm 上?

    LOCAL_CR=$(node -p "require('./packages/claude-runner/package.json').version") npm view "cyrus-claude-runner@${LOCAL_CR}" version 2>/dev/null

    (b) claude-runner 自上次发布后是否有未提交/未推送的源码变更?

    git diff --quiet HEAD -- packages/claude-runner/src packages/claude-runner/package.json && echo "clean" || echo "dirty"

    如果满足以下任一条件,则重新发布 claude-runner:(a) 返回空(本地版本不在 npm 上),或 (b) 输出 dirty。如果两者都干净通过,则跳过此步骤。如果不确定,请询问用户。

    重新发布方式:

    确定 claude-runner 的下一个 -test.N(与下方 cyrus-core 相同的算法)

    将 packages/claude-runner/package.json bump 到例如 0.0.X-test.N

    cd packages/claude-runner pnpm publish --access public --no-git-checks --tag test cd ../.. pnpm install # 刷新 lockfile,以便 cyrus-core 获取新的 claude-runner

    否则完全跳过此步骤。

  4. 将 cyrus-core bump 到下一个 -test.N 预发布版本

    算法:

    • 从 packages/core/package.json 读取当前版本(例如 0.1.22)。
    • 增加 patch(例如 0.1.23)。
    • 追加 -test.N,从 N = 0 开始,当 <bumped>-test.N 已存在于 npm 上时递增(包括中止/过期的先前尝试)。

    使用以下一行命令查找 bump 后 patch 已有的 -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

    如果为空,使用 N=0。否则使用 (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 将安装此版本。
    • 不会移动 latest dist-tag,因此生产安装(npm install cyrus-core)不受影响。
  6. 验证 dist-tags 是否正确落地

    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,以便可以从带脏工作区的 feature 分支发布。
  • 始终使用 --tag test,以保留 latest dist-tag 用于真实发布。
  • 预发布版本(任何带 - 后缀如 -test.0 的版本)不会被 npm install cyrus-core 自动安装,除非显式指定 tag 或版本,因此可以安全地反复运行。
  • 如果重新发布了 claude-runner,请在发布后运行 pnpm install,以便 lockfile 在 cyrus-core 构建/发布前反映新发布的版本。
  • 在干净的工作区上,从根目录运行 pnpm install + pnpm build 合计约需 3 分钟——请相应规划命令超时。

示例

  • "release core test" - 运行 cyrus-core 的开发版本发布
  • "/release-core-test" - 调用该技能