Skip to content

Commit 7519819

Browse files
committed
build: migrate cli sources to typescript
1 parent 14dc6c7 commit 7519819

28 files changed

Lines changed: 188 additions & 45 deletions

.github/workflows/release.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,10 @@ jobs:
102102
cache: pnpm
103103
registry-url: 'https://registry.npmjs.org'
104104
- run: pnpm install --frozen-lockfile
105-
- run: pnpm version:check
105+
- run: pnpm release:check
106106
- run: node -e "require('fs').mkdirSync('.artifacts', { recursive: true })"
107-
- run: pnpm --dir packages/cli pack --pack-destination ../../.artifacts
108-
- run: npm publish packages/cli --access public
107+
- run: pnpm --dir .build/stage/npm/coder-studio pack --pack-destination ../../../../.artifacts
108+
- run: npm publish .build/stage/npm/coder-studio --access public
109109
env:
110110
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
111111
- uses: actions/upload-artifact@v4

README.en.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,14 @@ The repository is organized into three layers:
9292
- source
9393
- `apps/web`: frontend source
9494
- `apps/server`: Rust / Tauri server source
95-
- `packages/cli`: npm CLI package source
95+
- `packages/cli`: npm CLI package source and publish metadata
96+
- `packages/cli/src`: CLI TypeScript source
9697
- templates
9798
- `templates/npm/platform-packages/*`: per-platform npm package templates
9899
- build outputs
99100
- `.build/web/dist`: frontend build output
100101
- `.build/server/target`: Rust build output
102+
- `.build/cli`: compiled CLI output
101103
- `.build/stage/npm/*`: pre-publish staging packages
102104
- `.artifacts/`: tarballs, manifests, and checksums
103105

@@ -148,6 +150,12 @@ Server runtime build:
148150
pnpm build:server
149151
```
150152

153+
CLI build:
154+
155+
```bash
156+
pnpm build:cli
157+
```
158+
151159
Tauri shell build:
152160

153161
```bash

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,14 @@ pnpm install
5858
- 源码层
5959
- `apps/web`:前端源码
6060
- `apps/server`:Rust / Tauri 服务端源码
61-
- `packages/cli`:npm CLI 包源码
61+
- `packages/cli`:npm CLI 包源码与发布元数据
62+
- `packages/cli/src`:CLI TypeScript 源码
6263
- 模板层
6364
- `templates/npm/platform-packages/*`:各平台 npm 包模板
6465
- 产物层
6566
- `.build/web/dist`:前端构建产物
6667
- `.build/server/target`:Rust 构建产物
68+
- `.build/cli`:CLI 编译产物
6769
- `.build/stage/npm/*`:发布前 staging 包
6870
- `.artifacts/`:最终 tarball、manifest、checksum
6971

@@ -147,6 +149,12 @@ pnpm build
147149
pnpm build:server
148150
```
149151

152+
构建 CLI:
153+
154+
```bash
155+
pnpm build:cli
156+
```
157+
150158
构建 Tauri 壳层:
151159

152160
```bash

docs/development/README.en.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ Current development ports:
5252
- server entry point: `apps/server/src/main.rs`
5353
- server HTTP transport layer: `apps/server/src/command/http.rs`
5454
- Rust services: `apps/server/src/services/`
55+
- CLI TypeScript source: `packages/cli/src/`
5556

5657
## Document Index
5758

docs/development/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ pnpm dev:stack
5454
- server 入口:`apps/server/src/main.rs`
5555
- server HTTP 传输层:`apps/server/src/command/http.rs`
5656
- Rust 服务实现:`apps/server/src/services/`
57+
- CLI TypeScript 源码:`packages/cli/src/`
5758

5859
## 文档列表
5960

docs/development/npm-release.en.md

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@
44

55
The repository now publishes these packages:
66

7-
- `packages/cli`: source for the primary `@spencer-kit/coder-studio` package
7+
- `packages/cli`: source manifest and publish metadata for the primary `@spencer-kit/coder-studio` package
8+
- `packages/cli/src`: CLI TypeScript source
89
- `templates/npm/platform-packages/*`: platform package templates
9-
- `.build/stage/npm/*`: generated publish staging directories
10+
- `.build/cli`: compiled CLI output
11+
- `.build/stage/npm/*`: generated publish staging directories for the main package and platform packages
1012
- `.artifacts/`: final tarballs, manifest, and checksums
1113

1214
Layer responsibilities:
1315

14-
- source: `packages/cli`, `apps/web`, `apps/server`
16+
- source: `packages/cli`, `packages/cli/src`, `apps/web`, `apps/server`
1517
- templates: `templates/npm/platform-packages/*`
16-
- build outputs: `.build/web/dist`, `.build/server/target`, `.build/stage/npm/*`, `.artifacts/`
18+
- build outputs: `.build/web/dist`, `.build/server/target`, `.build/cli`, `.build/stage/npm/*`, `.artifacts/`
1719

18-
The main package owns the CLI. Platform package templates own publish metadata. The staging directories receive native binaries and built frontend assets.
20+
The main package source owns the CLI implementation, `.build/cli` receives compiled output, platform package templates own publish metadata, and the staging directories receive the actual publishable package contents.
1921

2022
## CLI Usage
2123

@@ -67,7 +69,8 @@ Use `CODER_STUDIO_HOME` to override the state directory for tests or isolated en
6769
```bash
6870
pnpm version:check
6971
pnpm build:web
70-
pnpm build:runtime
72+
pnpm build:server
73+
pnpm build:cli
7174
pnpm build:packages
7275
pnpm pack:local
7376
pnpm release:verify
@@ -78,8 +81,9 @@ What they do:
7881

7982
- `version:check`: verifies the root package, main package, platform packages, `Cargo.toml`, and `tauri.conf.json` all share the same version
8083
- `build:web`: builds the frontend into `.build/web/dist`
81-
- `build:runtime`: builds the Rust/Tauri release binary into `.build/server/target`
82-
- `build:packages`: materializes `.build/stage/npm/<platform>` from templates and injects the binary plus frontend assets
84+
- `build:server`: builds the Rust/Tauri release binary into `.build/server/target`
85+
- `build:cli`: compiles `packages/cli/src` into `.build/cli`
86+
- `build:packages`: materializes `.build/stage/npm/coder-studio` and `.build/stage/npm/<platform>` by injecting compiled CLI output plus native/frontend assets
8387
- `pack:local`: runs the release build and emits local tarballs into `.artifacts/`
8488
- `release:verify`: runs version checks, CLI tests, Rust tests, local packaging, and smoke validation
8589
- `release:verify:full`: adds release E2E on top of `release:verify`
@@ -142,7 +146,10 @@ ls .artifacts
142146
- `release-manifest.json`
143147
- `SHA256SUMS.txt`
144148

145-
`.build/stage/npm/` holds the generated publishable staging package for the current platform.
149+
`.build/stage/npm/` holds:
150+
151+
- `coder-studio`: the generated publishable main package
152+
- `<platform>`: the generated publishable runtime package for the current platform
146153

147154
## GitHub Actions
148155

@@ -162,7 +169,7 @@ The automation is split into three workflows:
162169
- `release.yml`
163170
- starts with a `preflight` job that validates the tag and runs `pnpm version:check`
164171
- publishes the 4 platform runtime packages from `.build/stage/npm/*`
165-
- publishes the main `@spencer-kit/coder-studio` package
172+
- publishes the main `@spencer-kit/coder-studio` package from `.build/stage/npm/coder-studio`
166173
- aggregates tarballs and attaches `release-manifest.json` plus `SHA256SUMS.txt` to the GitHub Release
167174

168175
## Release Trigger

docs/development/npm-release.md

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@
44

55
当前仓库已经拆成以下发布结构:
66

7-
- `packages/cli`:主 npm 包源码,发布名为 `@spencer-kit/coder-studio`
7+
- `packages/cli`:主 npm 包源码与发布元数据,发布名为 `@spencer-kit/coder-studio`
8+
- `packages/cli/src`:CLI TypeScript 源码
89
- `templates/npm/platform-packages/*`:平台包模板
9-
- `.build/stage/npm/*`:平台包 staging 目录
10+
- `.build/cli`:CLI 编译产物
11+
- `.build/stage/npm/*`:主包与平台包 staging 目录
1012
- `.artifacts/`:最终 tarball、manifest、checksum
1113

1214
分层职责:
1315

14-
- 源码层:`packages/cli``apps/web``apps/server`
16+
- 源码层:`packages/cli``packages/cli/src``apps/web``apps/server`
1517
- 模板层:`templates/npm/platform-packages/*`
16-
- 产物层:`.build/web/dist``.build/server/target``.build/stage/npm/*``.artifacts/`
18+
- 产物层:`.build/web/dist``.build/server/target``.build/cli``.build/stage/npm/*``.artifacts/`
1719

18-
主包负责 CLI平台包模板负责发布元数据,staging 目录负责承接原生二进制和前端静态资源
20+
主包源码负责 CLI 的 TypeScript 实现,`.build/cli` 承接编译结果,平台包模板负责发布元数据,staging 目录负责承接真正可发布的 npm 包内容
1921

2022
## CLI 用法
2123

@@ -67,7 +69,8 @@ CLI 默认会在本机状态目录下写入运行信息:
6769
```bash
6870
pnpm version:check
6971
pnpm build:web
70-
pnpm build:runtime
72+
pnpm build:server
73+
pnpm build:cli
7174
pnpm build:packages
7275
pnpm pack:local
7376
pnpm release:verify
@@ -78,8 +81,9 @@ pnpm release:verify:full
7881

7982
- `version:check`:校验根包、主包、平台包、`Cargo.toml``tauri.conf.json` 版本是否完全一致
8083
- `build:web`:构建前端到 `.build/web/dist`
81-
- `build:runtime`:构建 Rust/Tauri release 二进制到 `.build/server/target`
82-
- `build:packages`:从模板目录生成 `.build/stage/npm/<platform>`,并注入二进制与前端产物
84+
- `build:server`:构建 Rust/Tauri release 二进制到 `.build/server/target`
85+
- `build:cli`:把 `packages/cli/src` 编译到 `.build/cli`
86+
- `build:packages`:生成 `.build/stage/npm/coder-studio` 和当前平台的 `.build/stage/npm/<platform>`,分别注入 CLI 编译产物与原生二进制/前端产物
8387
- `pack:local`:执行 release 构建后,生成本地主包和当前平台包 tarball 到 `.artifacts/`
8488
- `release:verify`:跑版本校验、CLI 单测、Rust 单测、本地打包和 smoke
8589
- `release:verify:full`:在 `release:verify` 基础上追加 release E2E
@@ -142,7 +146,10 @@ ls .artifacts
142146
- `release-manifest.json`
143147
- `SHA256SUMS.txt`
144148

145-
`.build/stage/npm/` 会包含当前平台的可发布 staging 包目录。
149+
`.build/stage/npm/` 会包含:
150+
151+
- `coder-studio`:主包 staging 目录
152+
- `<platform>`:当前平台运行时包 staging 目录
146153

147154
## GitHub Actions
148155

@@ -162,7 +169,7 @@ ls .artifacts
162169
- `release.yml`
163170
- 先执行 `preflight` 校验 tag 与版本一致,并跑 `pnpm version:check`
164171
- 再按平台矩阵从 `.build/stage/npm/*` 发布 4 个运行时包
165-
- 再发布主包 `@spencer-kit/coder-studio`
172+
- 再从 `.build/stage/npm/coder-studio` 发布主包 `@spencer-kit/coder-studio`
166173
- 最后汇总 tarball,生成 `release-manifest.json``SHA256SUMS.txt`,附加到 GitHub Release
167174

168175
## 发布触发方式

package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,18 @@
1313
"build:web": "vite build",
1414
"build:server": "cargo build --release --manifest-path apps/server/Cargo.toml",
1515
"build:runtime": "pnpm build:server",
16+
"build:cli": "node scripts/build/build-cli.mjs",
1617
"check:server": "cargo check --manifest-path apps/server/Cargo.toml",
1718
"test:server": "cargo test --manifest-path apps/server/Cargo.toml",
1819
"build:packages": "node scripts/build/build-packages.mjs",
1920
"preview": "vite preview",
2021
"tauri": "node scripts/dev/run-tauri.mjs",
2122
"test:e2e": "playwright test",
22-
"test:e2e:release": "playwright test -c playwright.release.config.ts",
23-
"test:cli": "node --test tests/cli/config.test.mjs tests/cli/platform.test.mjs tests/release/release.test.mjs",
23+
"test:e2e:release": "pnpm build:web && pnpm build:server && pnpm build:cli && playwright test -c playwright.release.config.ts",
24+
"test:cli": "pnpm build:cli && node --test tests/cli/config.test.mjs tests/cli/platform.test.mjs tests/release/release.test.mjs",
2425
"test:smoke": "node --test tests/smoke/cli-smoke.test.mjs",
2526
"pack:local": "pnpm release:check && node scripts/release/pack-local.mjs",
26-
"release:check": "pnpm version:check && pnpm build:web && pnpm build:server && pnpm build:packages",
27+
"release:check": "pnpm version:check && pnpm build:web && pnpm build:server && pnpm build:cli && pnpm build:packages",
2728
"release:verify": "pnpm test:cli && pnpm test:server && pnpm pack:local && pnpm test:smoke",
2829
"release:verify:full": "pnpm release:verify && pnpm test:e2e:release",
2930
"version:sync": "node scripts/release/sync-version.mjs",
@@ -51,6 +52,7 @@
5152
"@changesets/cli": "^2.29.7",
5253
"@playwright/test": "^1.58.2",
5354
"@tauri-apps/cli": "^2.0.0",
55+
"@types/node": "^24.6.1",
5456
"@types/react": "^19.2.14",
5557
"@types/react-dom": "^19.2.3",
5658
"@vitejs/plugin-react": "^6.0.1",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/usr/bin/env node
2+
// @ts-nocheck
23
import { runCli } from '../lib/cli.mjs';
34

45
runCli().then((code) => {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// @ts-nocheck
12
import fs from 'node:fs/promises';
23
import {
34
generateCompletionScript,

0 commit comments

Comments
 (0)