本仓库是 Go 单命令仓库(module github.com/omdsh-dev/dsh-web-desktopify)。
所有命令入口见 justfile,版本见 mise.toml。
| 项 | 值 | 位置 |
|---|---|---|
| go | 1.27 | mise.toml |
| node | latest | mise.toml |
| pnpm | 12 | mise.toml |
| just | latest | mise.toml |
| 构建 | go build | go.mod |
| 测试 | go test | 各包 *_test.go |
just test # go test ./...
just install # go install ./cmd/dsh-web-desktopify
just dep # go mod tidy
just clean # 清理 target/
just custom::dev # examples/custom 起 dsh web(go tool dsh-web-desktopify dev)
just custom::bundle # examples/custom 打包(go tool dsh-web-desktopify bundle)仓库内开发用 go tool dsh-web-desktopify(go.mod tool 指令注册),
无需 go build。
- 产物与缓存不入库:
node_modules/.dsh-web-desktopify/(构建缓存)、.dsh-store/(dev 运行时目录)、target/均被 .gitignore 排除,且不 参与工作区 hash(白名单模式,见 docs/ARCHITECTURE.md 的构建原理)。 - 注释不做设计说明:设计意图写进 docs/ARCHITECTURE.md;代码注释只 说明必要的事实(如可选资源目录的版本边界)。
- 测试描述行为,不描述实现:行为变更必须连同测试一起改。
- 不引入假设性接缝:接口只在有真实变化点(平台差异、外部工具、
契约两侧)时抽象;单一实现不包接口。测试需要替身时,用最小接口
(如
supervise.viewURL的portProvider),不为测试造抽象。 - 重复实现收敛到工具包:向上查找(
fsutil.FindUp)、环境变量 构造(fsutil.WithEnv/PrependPath)、种子白名单判定 (bundle.SeedAllow/SeedIgnored)等跨包共用的逻辑只保留一份。 - 文件以单个换行结尾。
- 测试位于各包
*_test.go(go test ./...)。 - 不依赖外部服务;需要真实 pnpm / node 的路径(如 SEA 打包、壳构建)
由
shell_e2e_test.go显式标记,本地无工具链时跳过。 - 并发代码(如
sharedstore)的测试用go test -race验证。 - 跨包契约(如 appconfig.json 的打包/读取两侧)在两侧各测,字段变更 必须同步。
- 发布走 CI:
.github/workflows/release.yml(v*tag push → goreleaser 构建 + 打包 + GitHub Releases)。 - 严禁本地私自发布(包括用
--registry指向 GitHub Packages 的发布)。 版本 bump 提交后由 CI 发布;本地只构建验证。