Isolate modern and Win7 workspaces (T-604)

This commit is contained in:
ila
2026-07-16 21:27:52 +08:00
parent e4a9295cbf
commit 7efcab5dfe
11 changed files with 234 additions and 43 deletions
+8 -5
View File
@@ -11,7 +11,7 @@
| UI 框架 | Gio(纯 Go 立即模式 GUI) | 已定 | 无 CGO、单 EXE、跨版本可锁定;仅限 UI 层 |
| 现代版工具链 | Go 1.25(锁定已验证版本) + Gio v0.10.1 | 已定 | 当前受支持工具链;支持 Win10/Win11 x64 |
| Win7 版工具链 | Go 1.20.14(最终补丁) + Gio v0.6.0 | 已定 | Go 1.20 是最后支持 Win7 的版本;Gio v0.6.0 可由 Go 1.20 构建 |
| 模块结构 | go.work + 三个 go.mod(core / app-modern / app-win7) | 已定 | 共享核心,双构建互不污染工具链要求 |
| 模块结构 | 两个 go.work + 三个 go.mod(core / app-modern / app-win7) | 已定 | 根 workspace 只含 modern/core;嵌套 Win7 workspace 只含 win7/core |
| 依赖管理 | 版本锁定 + vendor(Gio 及相关依赖) | 已定 | 防止 Win7 构建被隐式升级到要求 Go 1.21+ 的依赖 |
| 存储 | JSON 文件 + 临时文件原子替换 | 已定 | 数百款软件规模足够;SQLite 仅在历史/搜索/事务需求出现后评估 |
| 软件包格式 | ZIP(标准软件包协议 v1) | 已定 | 避免 UnRAR.dll;协议见 [api.md](api.md) |
@@ -41,14 +41,17 @@
| --- | --- |
| Phase 0 完整闸门(Unix) | `bash scripts/verify_phase0.sh` |
| Phase 0 完整闸门(Windows) | `./scripts/verify_phase0.ps1` |
| 同步工作区依赖 | `go work sync` |
| 同步根 workspace | `GOTOOLCHAIN=go1.25.0 GOWORK=<repo>/go.work go work sync` |
| 同步 Win7 workspace | `GOTOOLCHAIN=go1.25.0 GOWORK=<repo>/app-win7/go.work go work sync`(同步元数据后仍由 Go 1.20.14 校验/构建) |
| core 测试 | `cd core && go test -count=1 ./...` |
| core 静态检查 | `cd core && go vet ./...` |
| 现代版构建 | `cd app-modern && GOTOOLCHAIN=go1.25.0 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="-H=windowsgui" -o ../dist/SoftBox.exe ./cmd/softbox` |
| Win7 版构建 | `cd app-win7 && GOTOOLCHAIN=go1.20.14 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="-H=windowsgui" -o ../dist/SoftBox-win7.exe ./cmd/softbox` |
| 现代版构建 | `GOTOOLCHAIN=go1.25.0 GOWORK=<repo>/go.work CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go -C app-modern build -trimpath -ldflags="-H=windowsgui" -o ../dist/SoftBox.exe ./cmd/softbox` |
| Win7 版构建 | `GOTOOLCHAIN=go1.20.14 GOWORK=<repo>/app-win7/go.work CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go -C app-win7 build -trimpath -ldflags="-H=windowsgui" -o ../dist/SoftBox-win7.exe ./cmd/softbox` |
| 本地运行(开发) | Windows 下直接 `go run ./cmd/softbox`(WSL 中构建 EXE 后到 Windows 侧运行) |
根 `go.work` 纳入三个模块并使用 modern 所需的 Go 1.25 workspace 版本;`app-win7/go.work` 是就近的 Go 1.20 workspace,只纳入 `app-win7` 与 `core`,确保 Go 1.20.14 不需要解析 modern 模块。
根 `go.work` 使用 Go 1.25.0,只纳入 `app-modern` 与 `core`;`app-win7/go.work` 使用 Go 1.20,只纳入 `app-win7` 与 `core`。同步、测试和构建始终显式指定对应 `GOWORK`,任何 workspace 都不会同时解析 Gio v0.10.1 与 v0.6.0。
两个 workspace 的元数据同步统一使用 Go 1.25.0。原因是 Go 1.20.14 的 `go work sync` 会忽略 workspace 级本地 replace 并尝试联网解析占位模块 `softbox.local/core@v0.0.0`;不为规避该工具缺陷把本机相对路径写进 go.mod。Win7 的依赖图、测试和构建仍全部强制使用 Go 1.20.14,并由版本检查拒绝 Go 1.21+ 依赖。
工具链矩阵: