-
Notifications
You must be signed in to change notification settings - Fork 0
140 lines (128 loc) · 6.65 KB
/
Copy pathpublish-sdk.yml
File metadata and controls
140 lines (128 loc) · 6.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
name: publish-sdk
# Phase 2 — publish @botiverse/kimi-code-sdk to npm via OIDC trusted publishing.
#
# Design (tygg, #proj-runtime:626b08f7 6/13): OIDC trusted publishing (NO long-lived
# NPM_TOKEN), TAG-triggered, human/agent IN THE LOOP (not fully auto on every upstream
# release — Kai writes the release note + decides, then pushes the publish tag).
#
# HOW TO PUBLISH (maintainer = Kai):
# 1. Pick the upstream mirror tag to ship, e.g. @moonshot-ai/kimi-code@0.14.2
# (node-sdk's own version at that tag = the npm version, e.g. 0.9.3 — see RELEASES.md).
# 2. Write/confirm the interface release note (GitHub Release + RELEASES.md).
# 3. Put a publish tag on that SAME upstream-source commit and push it:
# git tag publish-sdk/v0.9.3 '@moonshot-ai/kimi-code@0.14.2' # same commit = upstream source
# git push botiverse publish-sdk/v0.9.3
# The workflow checks out that source, builds node-sdk, repackages, and publishes.
# The tag suffix (v0.9.3) MUST equal node-sdk's package.json version at that source — the
# job asserts it and fails closed on mismatch.
#
# ONE-TIME HUMAN SETUP (cannot be done from CI/non-interactively):
# - npmjs.com → @botiverse/kimi-code-sdk → configure Trusted Publisher:
# repo = botiverse/kimi-code-sdk, workflow = publish-sdk.yml, (optional) environment = npm-publish.
# - If the package does not exist yet, npm trusted publishing for a brand-new name may need a
# first bootstrap publish by a logged-in @botiverse maintainer (then OIDC for every release after).
# - (Optional) create a protected GitHub Environment `npm-publish` with required reviewers
# = the manual approval gate ("participate in it") before the publish step runs.
on:
push:
tags:
- 'publish-sdk/v*' # deliberate publish tag pushed by Kai (in the loop)
workflow_dispatch:
inputs:
source_tag:
description: 'Upstream mirror tag to build from, e.g. @moonshot-ai/kimi-code@0.14.2'
required: true
npm_version:
description: 'npm package version to publish (default = upstream node-sdk pkg.version; override when bundled-implementation refresh warrants a Botiverse-side patch-bump)'
required: false
default: ''
dry_run:
description: 'Dry run (build + pack + publish --dry-run, no real publish)'
type: boolean
default: true
permissions:
contents: read
id-token: write # OIDC trusted publishing + provenance attestation
jobs:
publish:
runs-on: ubuntu-latest
environment: npm-publish # optional manual-approval gate (create the env to require review)
steps:
- name: Resolve build ref + intent
id: resolve
run: |
if [ "${{ github.event_name }}" = "push" ]; then
# publish tag points at the upstream-source commit; checking it out gives the source.
echo "build_ref=${GITHUB_REF_NAME}" >> "$GITHUB_OUTPUT"
echo "expected_version=${GITHUB_REF_NAME#publish-sdk/v}" >> "$GITHUB_OUTPUT"
echo "dry_run=false" >> "$GITHUB_OUTPUT"
else
echo "build_ref=${{ inputs.source_tag }}" >> "$GITHUB_OUTPUT"
echo "expected_version=${{ inputs.npm_version }}" >> "$GITHUB_OUTPUT"
echo "dry_run=${{ inputs.dry_run }}" >> "$GITHUB_OUTPUT"
fi
- name: Checkout upstream source at build ref
uses: actions/checkout@v5
with:
ref: ${{ steps.resolve.outputs.build_ref }}
fetch-depth: 1
- name: Checkout our scripts (main)
uses: actions/checkout@v5
with:
ref: main
path: .mirror-main
fetch-depth: 1
- uses: actions/setup-node@v5
with:
node-version: 24 # kimi-code's package.json sets engines.node ">=24.15.0"
registry-url: 'https://registry.npmjs.org'
# v5 enabled package-manager auto-cache by default; it tries to resolve pnpm
# before we corepack-enable it later in the job. Disable so corepack stays the
# source of truth (we pin pnpm via kimi-code's `packageManager` field).
package-manager-cache: false
- name: Use npm with OIDC trusted-publishing support
run: npm install -g npm@latest # trusted publishing needs npm >= 11.5
- name: Build node-sdk (scoped install of its closure only)
run: |
corepack enable
pnpm install --frozen-lockfile --filter "@moonshot-ai/kimi-code-sdk..."
pnpm --filter @moonshot-ai/kimi-code-sdk build
- name: Compare tag version vs node-sdk source version
if: steps.resolve.outputs.expected_version != ''
id: version_check
run: |
SRC_VER=$(node -p "require('./packages/node-sdk/package.json').version")
EXP="${{ steps.resolve.outputs.expected_version }}"
if [ "$SRC_VER" = "$EXP" ]; then
echo "match: tag v$EXP == source $SRC_VER (no override)"
echo "override=" >> "$GITHUB_OUTPUT"
else
echo "::notice::publish tag v$EXP differs from upstream node-sdk source $SRC_VER — publishing as Botiverse-side override (independent npm cadence; see RELEASES.md mapping table)."
echo "override=$EXP" >> "$GITHUB_OUTPUT"
fi
- name: Repackage -> @botiverse/kimi-code-sdk
run: node .mirror-main/scripts/repackage-sdk.mjs packages/node-sdk ./.out-sdk "${{ steps.resolve.outputs.build_ref }}" "${{ steps.version_check.outputs.override }}"
- name: Pack + publish
working-directory: ./.out-sdk
run: |
npm pack
# Pre-release versions (e.g. `0.18.0-botiverse.0`) require an explicit
# dist-tag so they don't move `latest`. Mirror-side surface extensions
# carry the `-botiverse.<n>` suffix per RELEASES.md versioning policy
# (revised 2026-06-20). Stable upstream-tag publishes still get
# `latest` by default.
NPM_VER="$(node -p 'require("./package.json").version')"
PUBLISH_TAG_ARGS=""
case "$NPM_VER" in
*-botiverse.*) PUBLISH_TAG_ARGS="--tag botiverse" ;;
*-*) PUBLISH_TAG_ARGS="--tag pre" ;;
*) PUBLISH_TAG_ARGS="" ;;
esac
if [ "${{ steps.resolve.outputs.dry_run }}" = "true" ]; then
echo "DRY RUN — publish --dry-run only (tag: ${PUBLISH_TAG_ARGS:-latest})"
npm publish --dry-run --access public $PUBLISH_TAG_ARGS
else
# OIDC trusted publishing: no NODE_AUTH_TOKEN; npm resolves identity from id-token.
echo "publishing $NPM_VER (tag: ${PUBLISH_TAG_ARGS:-latest})"
npm publish --access public --provenance $PUBLISH_TAG_ARGS
fi