From 9d6382f61cd568b6dfd9c8e4a292d29a6fb3668b Mon Sep 17 00:00:00 2001 From: kimi-agent-bot Date: Thu, 29 Oct 2026 14:57:30 +0800 Subject: [PATCH 1/2] ci: publish canary versions to npm by default --- .changeset/publish-canary-npm-by-default.md | 5 +++++ .github/workflows/canary-release.yml | 2 -- scripts/canary-release.mjs | 17 ++++++++++------- scripts/canary-release.test.mjs | 17 +++++++++++++++++ 4 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 .changeset/publish-canary-npm-by-default.md diff --git a/.changeset/publish-canary-npm-by-default.md b/.changeset/publish-canary-npm-by-default.md new file mode 100644 index 00000000000..b838cef612a --- /dev/null +++ b/.changeset/publish-canary-npm-by-default.md @@ -0,0 +1,5 @@ +--- +"@moonshot-ai/kimi-code": patch +--- + +Publish CLI Canary builds to the npm canary dist-tag by default; the previous opt-in requirement has been removed. diff --git a/.github/workflows/canary-release.yml b/.github/workflows/canary-release.yml index 8a1283f0727..9d9cf795346 100644 --- a/.github/workflows/canary-release.yml +++ b/.github/workflows/canary-release.yml @@ -88,7 +88,6 @@ jobs: CANARY_VERSION: ${{ needs.prepare.outputs.version }} CANARY_TAG: ${{ needs.prepare.outputs.tag }} CANARY_PUBLISHED_AT: ${{ needs.prepare.outputs.published_at }} - KIMI_CODE_CANARY_NPM_PUBLISH: ${{ vars.KIMI_CODE_CANARY_NPM_PUBLISH }} steps: - uses: actions/checkout@v6 with: @@ -103,7 +102,6 @@ jobs: - name: Reject stale publish run: node scripts/canary-release.mjs guard - name: Publish to npm (canary dist-tag) - if: vars.KIMI_CODE_CANARY_NPM_PUBLISH == 'true' run: | if npm view "@moonshot-ai/kimi-code@$CANARY_VERSION" version >/dev/null 2>&1; then echo "@moonshot-ai/kimi-code@$CANARY_VERSION is already on npm" diff --git a/scripts/canary-release.mjs b/scripts/canary-release.mjs index 98df4886bd9..fb35c2fc377 100644 --- a/scripts/canary-release.mjs +++ b/scripts/canary-release.mjs @@ -207,16 +207,19 @@ function version() { } } +export function readNpmCanaryVersion(execute = execFileSync) { + const npmLatest = execute('npm', ['view', PACKAGE_NAME, 'dist-tags.canary'], { encoding: 'utf8' }).trim(); + if (npmLatest !== '' && parseCanaryVersion(npmLatest) === null) { + throw new Error(`npm canary tag is malformed: ${npmLatest}`); + } + return npmLatest; +} + function guard() { git(['fetch', '--tags', 'origin']); const publishedVersions = canaryVersions(canaryTags()); - if (process.env.KIMI_CODE_CANARY_NPM_PUBLISH === 'true') { - const npmLatest = execFileSync('npm', ['view', PACKAGE_NAME, 'dist-tags.canary'], { encoding: 'utf8' }).trim(); - if (npmLatest !== '') { - if (parseCanaryVersion(npmLatest) === null) throw new Error(`npm canary tag is malformed: ${npmLatest}`); - publishedVersions.push(npmLatest); - } - } + const npmLatest = readNpmCanaryVersion(); + if (npmLatest !== '') publishedVersions.push(npmLatest); const version = env('CANARY_VERSION'); const newer = findNewerCanaryVersion(version, publishedVersions); if (newer !== null) throw new Error(`stale canary run: ${version} would replace newer ${newer}`); diff --git a/scripts/canary-release.test.mjs b/scripts/canary-release.test.mjs index 76af02569a5..881d3b247e3 100644 --- a/scripts/canary-release.test.mjs +++ b/scripts/canary-release.test.mjs @@ -15,6 +15,7 @@ import { PACKAGE_NAME, parseCanaryVersion, readCanaryRelease, + readNpmCanaryVersion, requiredCanaryReleaseAssets, resolveCanaryBaseVersion, selectCanaryCommit, @@ -228,3 +229,19 @@ await test('an older canary run is stale after a newer run publishes', () => { assert.equal(findNewerCanaryVersion(CANARY, [older, newer]), newer); assert.equal(findNewerCanaryVersion(CANARY, [older, CANARY]), null); }); + +await test('npm canary lookup stays enabled for stale-publish protection', () => { + let invocation; + const version = readNpmCanaryVersion((command, args, options) => { + invocation = { command, args, options }; + return `${CANARY}\n`; + }); + assert.equal(version, CANARY); + assert.deepEqual(invocation, { + command: 'npm', + args: ['view', PACKAGE_NAME, 'dist-tags.canary'], + options: { encoding: 'utf8' }, + }); + assert.equal(readNpmCanaryVersion(() => ''), ''); + assert.throws(() => readNpmCanaryVersion(() => '2.4.0'), /npm canary tag is malformed/); +}); From d23550b7de9ec30bf2dbc8ca69b6d9899c08dc0c Mon Sep 17 00:00:00 2001 From: kimi-agent-bot Date: Thu, 29 Oct 2026 15:10:08 +0800 Subject: [PATCH 2/2] ci: remove canary npm changeset --- .changeset/publish-canary-npm-by-default.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/publish-canary-npm-by-default.md diff --git a/.changeset/publish-canary-npm-by-default.md b/.changeset/publish-canary-npm-by-default.md deleted file mode 100644 index b838cef612a..00000000000 --- a/.changeset/publish-canary-npm-by-default.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@moonshot-ai/kimi-code": patch ---- - -Publish CLI Canary builds to the npm canary dist-tag by default; the previous opt-in requirement has been removed.