brew install go go-task node # macOS;Linux 用 apt / dnf 类比
npm i -g pnpm # 或 corepack enable && corepack prepare pnpm@10
git clone https://github.com/1cli-team/one-cli
cd one-cli
task install-local # 编译 + symlink packages/cli/bin/one 到 ~/.local/bin/one
one --version # 验证装好工具链:Go 1.25+、Node 20+、pnpm 10+。go-task(不是 GNU make)是任务总线,跨平台一致。
fresh-clone 提示:
packages/cli/internal/bundled/整个目录是 gitignore 的—— registry / skills / templates / dashboard dist 都由task sync-bundled+task sync-web按需重建,作为task vet/test/build的依赖自动跑。 第一次task install-local会触发pnpm install + vite build,~30s;之后 task fingerprint 命中,几乎零成本。如果你直接跑go build而不走 Taskfile, 会看到pattern all:_templates: no matching files found这种报错——跑一次task sync-bundled && task sync-web就好。
所有命令都通过 Taskfile:
task --list # 看可用任务(这是真源)
task build # 编译到 packages/cli/bin/one
task test # 全套 Go 测试 + race detector
task vet # go vet
task fmt # gofmt
task install-local # build + symlink(开发用)
task pre-push # 推前必跑(含上面所有 + verify-docs)build / test / vet 都隐式依赖 sync-bundled + sync-web,所以你不用
手动跑这两个——除非要让 gopls 立刻看到 packages/skills/ 或 apps/dashboard/
的改动。
- 起一个分支:
git checkout -b feat/<short-name>或fix/<short-name> - 改代码 + 测试
- 必跑
task pre-push全绿 - 提交:commit 消息走 conventional commits
(
feat:、fix:、chore:、docs:、test:、refactor:等) - 推送 + 开 PR
CI 会跑跟 task pre-push 等价的检查。
- 公开 API(
packages/cli/pkg/)改动要考虑 semver;详见 CLAUDE.md 的 Public API stability - 加新错误码:在
packages/cli/internal/errors/codes.go注册Code常量 +Codesmap 条目;测试会强制对应;改完跑task gen-error-codes刷新文档
- 遵循 agentskills.io 规范
task vet/test/build会自动重跑sync-bundled;想让 gopls 立刻 看到改动,手动task sync-bundled- 详细规则见 CLAUDE.md
- 模板会被
go:embed进二进制(task sync-bundled是同步入口,自动跑) - 加新模板:在
packages/templates/registry.json登记 + 加packages/templates/<id>/目录 + 写ai/common.md工程契约
- React + Vite,pnpm 管理
- 本地开发:
pnpm --dir apps/dashboard dev - 改完后
task vet/test/build会自动跑sync-web(pnpm install + vite build) 并刷packages/cli/internal/bundled/_web/
- 文档站是 Next.js + Fumadocs SSG
- 本地预览:
pnpm --dir apps/docs install && pnpm --dir apps/docs dev - 线上部署:Vercel 项目 Root Directory 指向
apps/docs,Output Directory 用dist,域名绑定1cli.dev apps/docs/content/docs/reference/error-codes.md不要手工编辑——跑task gen-error-codes重生成- 新增页面要更新对应目录的
meta.json(sidebar 顺序)
- 改完跑
task test——packages/cli/internal/cli/install_sh_test.go会做静态检查(语法、必要 sentinels、wrap-in-main 不变量)
task test # 默认全套
(cd packages/cli && go test ./internal/foo) # 单个包
(cd packages/cli && go test -run TestX ./...) # 单个 test
(cd packages/cli && UPDATE_SNAPSHOTS=1 go test ./internal/cli) # 重生成 e2e snapshot fixturesE2E snapshot 测试位于 packages/cli/internal/cli/snapshot_e2e_*_test.go,依赖 packages/cli/bin/one 存在 —— 跑 task build 之后再跑。
# 1. 改 VERSION
echo "0.4.3" > VERSION
# 2. 改 CHANGELOG.md(unreleased 段升级为新版本)
# 3. 跑 e2e 测试里 hard-coded 的 want 字面量
sed -i.bak 's/want := "0.4.2/want := "0.4.3/' packages/cli/internal/cli/snapshot_e2e_test.go
# 4. task pre-push 全绿
# 5. commit
git add VERSION CHANGELOG.md packages/cli/internal/cli/snapshot_e2e_test.go
git commit -m "chore(release): v0.4.3"
# 6. push + tag
git push origin master
git tag v0.4.3
git push origin v0.4.3
# → cli workflow 触发,自动 cross-compile + 上传 GitHub Release draft assets
# → 检查 assets / checksums / release notes 后,在 GitHub 手动 Publish发布 channel:
- GitHub Releases —
install.sh下载二进制和checksums.txt的来源 - Vercel
https://1cli.dev— 文档站和install.sh npm— v0.4.1 起停发qzkpwoxtl
| 变量 | 用途 |
|---|---|
ONE_BINARY_PATH |
让 wrapper / 子 shell 用某个特定 binary |
UPDATE_SNAPSHOTS=1 |
E2E 测试重写 snapshot |
INFISICAL_UNIVERSAL_AUTH_* |
secrets 测试需要(一般 mock,跳过 live) |
packages/cli/ # Go module(module path 含 /packages/cli 后缀)
cmd/one/main.go # 二进制入口(薄壳)
internal/ # 业务逻辑
pkg/ # 公开 Go API(semver 保护)
internal/bundled/ # go:embed 镜像,目录整个 gitignore,
# 由 task sync-bundled + sync-web 重建
testdata/ # Go 测试 fixtures
tools/ # 内部生成器 / 校验器
# gen-error-codes / verify-versions / verify-cli-references
packages/templates/ # 模板源 + registry.json(被 go:embed)
packages/skills/ # bundled skill 源(被 go:embed)
apps/docs/ # 文档站 Next.js + Fumadocs
apps/dashboard/ # `one serve` 用的 React + Vite UI(被 go:embed)
.github/workflows/ # ci / cli / docs
Taskfile.yml / .goreleaser.yaml # 顶层编排(路径都按上面这套)
pnpm-workspace.yaml # apps/* + packages/*
DESIGN.md / apps/docs/design/ # 设计源
- 找 issues / discussions on GitHub
- 看 CLAUDE.md 的"Don't"列表(避免常踩的坑)
- 查命令:
task --list/one --help
MIT — 见 LICENSE。