已关闭
feat(build): 新增 npm 分发渠道,支持 npx 一行安装 gitcode cli #496
aflyingto创建于 8月4日关闭于 8月4日
aflyingto
8月4日 评论:
8月4日 评论:
验证记录
- 当前验证版本/分支:origin/main(无 npm 基础设施)
- 需求确认:用户反馈希望支持
npx <pkg> install一行安装,覆盖 Node-first 用户与纯 node CI 镜像 - 核查命令:
git ls-tree -r origin/main --name-only | grep -iE 'package\.json|node_modules|\.npmrc'→ 空(无 npm 基础设施)npm view gitcode-cli version→1.1.15(非 scoped 名已被他人占用)npm view @gitcode/cli→404 Not Found(scoped 名@gitcode/cli可用)
- 结论:需求真实,无重复实现,方案(薄 npm 包 + Node wrapper 复用 wheel 平台选择逻辑 + install 子命令)可行。包名定为
@gitcode/cli(scoped)。
人工前置(不阻塞代码实现,但阻塞首次 npm publish)
- npm 上需存在
gitcode组织(org)并由发布者拥有写权限;若不存在需先创建 - GitHub 仓库需配置
NPM_TOKEN(automation token)Secret 给 release workflow 的 npm job - npm 不支持 OIDC Trusted Publishing(与 PyPI 不同)
代码、wrapper、workflow、spec/docs 可先行实现;首次 npm publish 待上述人工配置完成后随下次发版执行。


aflyingto
8月5日 评论:
8月5日 评论:
交付确认 ✅
npm 分发渠道已完整落地并验证:
最终机制
- npm 包
@gitcode-cli/cli(scoped,gitcode-cliorg) - Node wrapper
npm/bin/gc.js(shebang + 平台二进制选择 +install引导装二进制/补全/PATH) - release workflow
npmjob:交叉编译 5 平台二进制 + 同步版本 +npm publish,经 OIDC Trusted Publishing(id-token: write,无 NPM_TOKEN,自动 provenance) npm/package.jsonrepository.url=https://github.com/gitcode-cli/cli.git(OIDC 校验)
落地历程
- PR 431:npm 包 + workflow npm job(token 方式,首发失败)
- PR 433:确定性化单测
- PR 435:改 OIDC Trusted Publishing(Classic token 2025-11 已移除,granular 无法创建首个包)
- PR 436:补
bin/gc.jsshebang(修 0.10.2 bin shim bug) - PR 437:v0.10.3 release notes + 版本同步
发版结果
- v0.10.1 / v0.10.2:npm job 失败(granular 404 / shebang bug),PyPI/Homebrew/GitHub 已发
- v0.10.3:全渠道成功——npm 经 OIDC 自动发布,
npx @gitcode-cli/cli@0.10.3 install端到端验证通过(gc version→ 0.10.3 / commit 1ebe4a6) - 0.10.2 已 deprecate(bin shim 坏)
用户安装
npx @gitcode-cli/cli@latest install
# 或
npm install -g @gitcode-cli/cli
Issue 交付完成。


Background
GitCode CLI 当前分发渠道:PyPI wheel(内置全平台二进制)、DEB/RPM、Homebrew、独立二进制、Docker。无 npm 渠道(仓库无
package.json,release workflow 不涉及 npm)。近期集成的官方
lark-cli提供npx @larksuite/cli@latest install一行安装体验(npm 包 +install子命令引导:装二进制 + 装补全 + 装配套)。用户反馈:希望 GitCode CLI 也有同款一行安装,覆盖 Node-first 用户与只有 node 的 CI 镜像。Proposal
新增薄 npm 包作为分发渠道,发布方式对标
lark-cli与现有 PyPI wheel:设计
@gitcode/cli或gitcode-cli,命名/所有权待定),bin指向一个 Node wrapper 脚本gc_cli/wrapper.py的平台选择逻辑(linux/darwin/windows × amd64/arm64),按process.platform/process.arch选内置二进制并 execinstall子命令:把二进制写入 PATH 可达位置(或包内 bin)、装 shell 补全(bash/zsh/fish),对标 lark-cli 的install引导npx @gitcode/cli@latest install(或npm i -g @gitcode/cli && gc)发布流程
.github/workflows/release.yml)新增npmjob:构建 Node wrapper + 打包各平台二进制 + 发布到 npmnpm view @gitcode/cli version== 目标版本;npx @gitcode/cli@latest install装出的gc version输出正确Acceptance Criteria
Alternatives
不在本 Issue 范围