85 lines
6.9 KiB
Markdown
85 lines
6.9 KiB
Markdown
# 构建版本与数据库支持矩阵
|
||
|
||
核查日期:2026 年 9 月 27 日。本文区分代码支持、隔离测试和正式生产准入,不把驱动存在视为兼容性验收。
|
||
|
||
## 一、工具链与依赖
|
||
|
||
| 项目 | 当前固定来源 | 当前核查值 | 发布要求 |
|
||
|---|---|---|---|
|
||
| Go | `backend/go.mod`、`backend/go.sum` | 模块内 `go1.26.6 windows/amd64` | 在模块内记录实际版本,不使用仓库根目录的版本推断 |
|
||
| 工具链选择 | `go env GOTOOLCHAIN` | `auto` | 自动选择仍必须与模块要求一致,不得降低版本绕过失败 |
|
||
| Node.js | `frontend/package.json` 的 `engines`、`devEngines`,锁文件 | `v24.19.0` | 精确匹配,升级需同步声明并重跑测试和构建 |
|
||
| npm | 同上,另有 `packageManager` | `11.17.0` | 精确匹配,使用锁文件安装;Windows 使用 `npm.cmd` |
|
||
| Vue | `frontend/package.json`、`frontend/package-lock.json` | `3.5.41` | 直接依赖固定精确版本,声明及锁文件必须一致 |
|
||
| Vite | 同上 | `6.4.3` | 同上 |
|
||
| Vue 构建插件 | 同上 | `5.2.4` | 同上 |
|
||
| SQLite Go 驱动 | `backend/go.mod` | `modernc.org/sqlite v1.37.0` | 驱动版本不等于数据库引擎版本 |
|
||
| MySQL Go 驱动 | 同上 | `github.com/go-sql-driver/mysql v1.9.3` | 不代表 MySQL 所有服务端版本均通过验收 |
|
||
| PostgreSQL Go 驱动 | 同上 | `github.com/jackc/pgx/v5 v5.9.2` | 同上 |
|
||
| 编译目标 | `build/build-release.ps1` | `windows/amd64`、`linux/amd64` | 核心二进制 `CGO_ENABLED=0`、`-trimpath` |
|
||
|
||
核查命令:
|
||
|
||
```powershell
|
||
cd backend
|
||
go version
|
||
go env GOVERSION GOTOOLCHAIN GOOS GOARCH
|
||
go mod verify
|
||
go test -p 1 -count=1 -timeout=3m ./...
|
||
go vet -p=1 ./...
|
||
cd ../frontend
|
||
node --version
|
||
npm.cmd --version
|
||
npm.cmd ci
|
||
npm.cmd test
|
||
npm.cmd run build
|
||
```
|
||
|
||
历史基线只验证过现有依赖;随后 P0-03 已在 `fab98d1` 独立克隆重新执行 `npm ci`、150 项前端测试和双平台候选构建。该次安装仍有脚本批准策略警告,不能证明安装脚本被禁止。P0-04 改为明确禁用依赖安装脚本,执行证据持续记录在《Scert整改任务执行清单.md》,不能将旧安装结果当作新策略验证。
|
||
|
||
### 构建机与安装策略
|
||
|
||
| 项目 | 固定基线或约束 | 验收边界 |
|
||
|---|---|---|
|
||
| 当前 Windows 构建机 | Windows 11 Home China,系统 `10.0.26200`,amd64;Windows PowerShell 5.1 | 记录实际值,不把系统显示名称误写成内核版本;系统更新后需重新验收 |
|
||
| Linux 原生构建机 | 脚本允许 Linux amd64,但尚无本批指定发行版、内核、PowerShell 版本的原生构建证据 | 不宣称 Linux 原生可重复构建已通过;Linux 候选包由 Windows 交叉编译 |
|
||
| 目标平台 | `windows/amd64`、`linux/amd64`,`CGO_ENABLED=0`、`-trimpath`、`-mod=readonly` | 构建机版本与生产运行系统分别记录 |
|
||
| 安装脚本 | `.npmrc` 固定 `ignore-scripts=true`,正式入口再显式传参 | npm 未审查警告不是安全保证,禁止白名单和全量放行 |
|
||
| 可选平台包 | `npm ci` 显式包含开发和可选依赖 | esbuild 不执行安装脚本,使用锁文件中的平台包;外部二进制覆盖被拒绝 |
|
||
| 发布追溯 | `manifest.json` 的 `build_environment` | 包含实际工具链、系统、直接前端依赖、安装策略和五份输入文件 SHA256;Go 驱动及依赖由模块文件哈希追溯 |
|
||
| 源码换行 | `.gitattributes` 固定文本 LF,二进制自动识别并保留 | 覆盖用户 `core.autocrlf` 差异;原目录不强制重写,正式验证使用干净克隆 |
|
||
|
||
正式发布入口自动校验工具链、核验 Go 模块缓存、按锁文件干净安装,并在构建结束后复核输入文件。环境不符时尽早失败;构建中版本文件漂移则不生成发布清单。`toolchain.mjs` 和配套测试属于正式构建代码,不作为替代真实部署的辅助验收脚本。具体流程见 `build/README.md`。
|
||
|
||
## 二、数据库支持矩阵
|
||
|
||
| 数据库 | 预期定位 | 代码现状 | 本轮验证 | 尚未满足的正式验收 |
|
||
|---|---|---|---|---|
|
||
| SQLite | 单机、开发、轻量部署 | 驱动、初始化、迁移 1~9、CLI 备份恢复 | 临时独立库从版本 0~9 升级、重复迁移、非法历史和新版数据库拒绝 | 并发读写/锁、服务重启、完整业务数据升级恢复 |
|
||
| MySQL 5.7 | 历史兼容目标,仍保留实现 | 独立方言、迁移 1~9、部分 DDL 重入检查 | 文件/嵌入/登记一致性、已有单元测试 | 指定版本真实实例的初始化、升级、失败重入、备份恢复和业务回归 |
|
||
| MySQL 8.0 | 正式生产支持目标 | 同上 | 同上 | 同上;不能用 5.7 或 SQLite 测试替代 |
|
||
| PostgreSQL | 正式生产支持目标,实际服务端版本待本轮复核 | 独立方言、迁移 1~9、严格 TLS 和官方备份恢复工具接入 | 文件/嵌入/登记一致性、凭据/TLS 单元测试 | 当前版本真实集群、初始化、升级、失败回滚、备份恢复和业务回归 |
|
||
|
||
正式支持目标不等于已经生产放行。旧文档中的 PostgreSQL 实机记录仅作为线索,不替代当前候选版本复测;本轮没有连接外部 MySQL/PostgreSQL,也没有清空生产数据库。
|
||
|
||
## 三、迁移与降级边界
|
||
|
||
1. 三种数据库必须提供相同编号和名称的迁移,SQL 内容允许因方言不同而不同。
|
||
2. `migration_catalog_test.go` 检查源码目录、嵌入资源和 `latestMigrationVersion`;新增文件忘记登记或嵌入时必须失败。
|
||
3. `Migrate` 在执行后续迁移前读取完整有序版本历史;版本高于程序支持范围或历史不连续时拒绝启动,不自动删除或修补版本记录。
|
||
4. MySQL 的 DDL 重入和 PostgreSQL 的事务回滚必须用对应引擎验证,不能通过文件数量一致推断行为一致。
|
||
5. 当前不存在通用向下迁移承诺。降级须使用兼容程序及对应已验证备份,在隔离环境验证后再操作,禁止通过删除 `schema_migrations` 绕过拒绝。
|
||
|
||
## 四、真实实例验收步骤
|
||
|
||
每个数据库和声明支持的服务端版本独立执行以下步骤,保存版本、候选提交、命令退出码和脱敏证据:
|
||
|
||
1. 建立明确归属的隔离空库和最小权限账户,验证 TLS 与主机身份;不使用现有业务库。
|
||
2. 按正式初始化入口完成配置;创建用户、域名、DNS 账户、服务器和任务,验证权限隔离。
|
||
3. 从支持的旧版本数据库升级,检查数据、索引、默认值、归属和任务状态;重复执行不产生额外变更。
|
||
4. 注入迁移中断,在恢复后确认重入/回滚;新版数据库被旧程序拒绝且原数据保持不变。
|
||
5. 按该数据库的 CLI 备份恢复流程在另一隔离空库恢复;验证敏感配置和证书关联,篡改备份必须拒绝。
|
||
6. 重启服务验证持久化,完成前后端业务回归;记录未执行、跳过和失败项,不汇总为通过。
|
||
|
||
MySQL/PostgreSQL 没有当前实机证据的格子保持待验收。本矩阵不授权清理共享数据库或同机其他服务。
|