1
0

chore: streamline workspace make workflows

Clarify product-level server and desktop commands while moving backend-only maintenance tasks into backend/Makefile. This keeps root automation focused on core flows and aligns the main OpenSpec specs with the new command boundaries.
This commit is contained in:
2026-04-28 17:44:23 +08:00
parent a9972360c2
commit 2c401f7ae6
8 changed files with 411 additions and 266 deletions

View File

@@ -67,11 +67,11 @@
### Requirement: 迁移命令集成
迁移 SHALL 集成到 Makefile
迁移 SHALL 集成到 `backend/Makefile`,而不是根目录 `Makefile`
#### Scenario: 迁移 up 命令
- **WHEN** 执行 `make backend-migrate-up`
- **WHEN** `backend/` 目录执行 `make migrate-up`
- **THEN** SHALL 执行所有待执行的迁移
- **THEN** SHALL 使用 `DB_DRIVER` 变量选择方言目录(默认 `sqlite3`
- **THEN** SHALL 使用 `DB_DSN` 变量作为数据库连接串
@@ -79,20 +79,20 @@
#### Scenario: 迁移 down 命令
- **WHEN** 执行 `make backend-migrate-down`
- **WHEN** `backend/` 目录执行 `make migrate-down`
- **THEN** SHALL 回滚最后一个迁移
- **THEN** SHALL 使用 `DB_DRIVER``DB_DSN` 变量
- **THEN** SHALL 显示回滚进度
#### Scenario: 迁移状态命令
- **WHEN** 执行 `make backend-migrate-status`
- **WHEN** `backend/` 目录执行 `make migrate-status`
- **THEN** SHALL 显示当前迁移状态
- **THEN** SHALL 显示已执行和待执行的迁移
#### Scenario: 创建迁移命令
- **WHEN** 执行 `make backend-migrate-create`
- **WHEN** `backend/` 目录执行 `make migrate-create`
- **THEN** SHALL 同时在 `migrations/sqlite/``migrations/mysql/` 两个目录创建新的迁移文件模板
- **THEN** SHALL 使用递增的版本号

View File

@@ -8,16 +8,16 @@
### Requirement: MySQL 测试环境可启动
系统 SHALL 提供 Docker Compose 配置以启动 MySQL 8.0 测试环境。
系统 SHALL 提供 Docker Compose 配置和 backend 局部 make 命令以启动 MySQL 8.0 测试环境。
#### Scenario: 启动 MySQL 测试容器
- **WHEN** 执行 `make test-mysql-up`
- **WHEN** `backend/` 目录执行 `make mysql-up`
- **THEN** 启动 MySQL 8.0 容器,端口 13306
- **AND** 创建数据库 `nex_test`
- **AND** 容器数据存储在内存盘tmpfs
#### Scenario: 销毁 MySQL 测试容器
- **WHEN** 执行 `make test-mysql-down`
- **WHEN** `backend/` 目录执行 `make mysql-down`
- **THEN** 停止并删除容器
- **AND** 所有数据被销毁
@@ -90,15 +90,15 @@ MySQL 测试 SHALL 验证并发写入不丢失数据。
### Requirement: MySQL 测试命令完整
Makefile SHALL 提供完整的 MySQL 测试命令。
`backend/Makefile` SHALL 提供完整的 MySQL 测试命令。
#### Scenario: 完整测试流程
- **WHEN** 执行 `make test-mysql`
- **WHEN** `backend/` 目录执行 `make mysql-test`
- **THEN** 启动 Docker MySQL
- **AND** 等待 MySQL 就绪
- **AND** 运行所有 MySQL 测试
- **AND** 销毁容器
#### Scenario: 快速测试(容器已运行)
- **WHEN** 执行 `make test-mysql-quick`
- **WHEN** `backend/` 目录执行 `make mysql-test-quick`
- **THEN** 直接运行测试,不管理容器生命周期

View File

@@ -157,26 +157,33 @@
### Requirement: 集成到构建流程
测试 SHALL 集成到构建流程中。
测试 SHALL 同时集成到根目录公共流程和 backend 局部流程中。
#### Scenario: 运行测试命令
- **WHEN** 执行 `make test` 命令
- **THEN** SHALL 运行所有单元测试和集成测试
- **THEN** SHALL 运行 backend 核心测试、frontend 的 Vitest 单元/组件测试和 desktop 专属测试
- **THEN** SHALL NOT 运行 MySQL 专项测试和 frontend E2E 测试
- **THEN** SHALL 显示测试结果
- **THEN** SHALL 在测试失败时返回非零退出码
#### Scenario: 运行 backend 局部测试命令
- **WHEN** 在 `backend/` 目录执行 `make test` 命令
- **THEN** SHALL 运行 backend 核心测试
- **THEN** SHALL NOT 运行 frontend 的 Vitest 单元/组件测试、desktop 专属测试、MySQL 专项测试或 frontend E2E 测试
#### Scenario: 分类测试命令
- **WHEN** 执行 `make test-unit` 命令
- **WHEN** `backend/` 目录执行 `make test-unit` 命令
- **THEN** SHALL 仅运行 `./internal/...``./pkg/...` 下的单元测试
- **WHEN** 执行 `make test-integration` 命令
- **WHEN** `backend/` 目录执行 `make test-integration` 命令
- **THEN** SHALL 仅运行 `./tests/...` 下的集成测试
#### Scenario: 覆盖率检查命令
- **WHEN** 执行 `make test-coverage` 命令
- **WHEN** `backend/` 目录执行 `make test-coverage` 命令
- **THEN** SHALL 运行测试并生成覆盖率报告
- **THEN** SHALL 检查覆盖率是否达标
- **THEN** SHALL 在覆盖率不足时返回非零退出码

View File

@@ -0,0 +1,114 @@
# Workspace Command Flows
## Purpose
定义根目录 `Makefile``backend/Makefile` 的公开命令边界,明确全仓命令、产品级命令和 backend 局部维护命令的职责分层。
## Requirements
### Requirement: 根目录公开命令分层
根目录 `Makefile` SHALL 仅暴露全局命令、版本命令、server 产品命令、desktop 产品命令和 release 命令,不再作为 backend 局部维护命令或内部打包步骤的公开入口。
#### Scenario: 查看根目录公开命令
- **WHEN** 开发者查看根目录 `Makefile` 的公开 target
- **THEN** SHALL 仅看到 `lint``test``clean``version-sync``version-check``server-run``server-build``server-lint``server-test``server-clean``desktop-build-mac``desktop-build-win``desktop-build-linux``desktop-lint``desktop-test``desktop-clean``release-assets-linux``release-assets-windows``release-assets-macos` 这类公共入口
#### Scenario: 根目录不暴露局部和内部命令
- **WHEN** 开发者查看根目录 `Makefile` 的公开 target
- **THEN** SHALL NOT 暴露 `backend-*``frontend-*`、数据库迁移命令、MySQL 专项测试命令或 `desktop-prepare-*` 之类内部步骤
- **THEN** SHALL NOT 暴露 `dev``build``all``desktop-dev``desktop-build` 这类模糊或聚合式公共命令
### Requirement: 全局质量与清理命令
根目录 `Makefile` SHALL 提供 `lint``test``clean` 作为全仓默认入口。
#### Scenario: 执行全局 lint
- **WHEN** 执行 `make lint`
- **THEN** SHALL 运行 backend 的 Go lint 检查和 frontend 的 lint / format check
- **THEN** SHALL 在任一检查失败时返回非零退出码
#### Scenario: 执行全局 test
- **WHEN** 执行 `make test`
- **THEN** SHALL 运行 backend 核心测试、frontend 的 Vitest 单元/组件测试和 desktop 专属测试
- **THEN** SHALL NOT 运行 MySQL 专项测试和 frontend E2E 测试
- **THEN** SHALL 在任一测试失败时返回非零退出码
#### Scenario: 执行全局 clean
- **WHEN** 执行 `make clean`
- **THEN** SHALL 清理 server 与 desktop 相关的构建产物、发布产物和测试报告
- **THEN** SHALL NOT 删除 `frontend/node_modules`、Go module cache 或 bun cache 之类依赖目录和全局缓存
### Requirement: Server 产品命令
根目录 `Makefile` SHALL 提供面向前后端分离 server 模式的产品级命令。
#### Scenario: 启动 server 模式联调环境
- **WHEN** 执行 `make server-run`
- **THEN** SHALL 并行启动 Go 后端服务和前端 Vite 开发服务器
- **THEN** SHALL 使前端继续通过现有代理访问本地 backend 服务
#### Scenario: 构建 server 模式产物
- **WHEN** 执行 `make server-build`
- **THEN** SHALL 生成 `backend/bin/server`
- **AND** SHALL 生成 `frontend/dist`
- **AND** SHALL 在构建前校验版本一致性
- **AND** SHALL NOT 隐式执行 `version-sync` 或修改版本镜像文件
#### Scenario: 执行 server lint
- **WHEN** 执行 `make server-lint`
- **THEN** SHALL 运行 backend 的 Go lint 检查和 frontend 的 lint / format check
#### Scenario: 执行 server test
- **WHEN** 执行 `make server-test`
- **THEN** SHALL 运行 backend 核心测试和 frontend 的 Vitest 单元/组件测试
- **THEN** SHALL NOT 运行 MySQL 专项测试、frontend E2E 测试或 desktop 专属测试
#### Scenario: 执行 server clean
- **WHEN** 执行 `make server-clean`
- **THEN** SHALL 清理 `backend/bin/server``frontend/dist` 以及 server 模式相关测试报告与临时产物
### Requirement: Desktop 产品命令
根目录 `Makefile` SHALL 提供按平台拆分的 desktop 构建命令,以及 desktop 产品级 `lint``test``clean` 命令。
#### Scenario: 执行按平台拆分的 desktop 构建
- **WHEN** 执行 `make desktop-build-mac``make desktop-build-win``make desktop-build-linux`
- **THEN** SHALL 分别构建对应平台的 desktop 产物
- **THEN** SHALL 在构建前执行版本一致性校验
- **THEN** SHALL NOT 隐式执行 `version-sync` 或修改版本镜像文件
- **THEN** SHALL NOT 要求通过额外的 `desktop-build` 聚合命令触发构建
#### Scenario: 根目录不提供 desktop 开发聚合入口
- **WHEN** 开发者查看根目录 `Makefile`
- **THEN** SHALL NOT 提供 `desktop-dev` 作为公共命令
#### Scenario: 执行 desktop lint
- **WHEN** 执行 `make desktop-lint`
- **THEN** SHALL 运行 backend 的 Go lint 检查和 frontend 的 lint / format check
#### Scenario: 执行 desktop test
- **WHEN** 执行 `make desktop-test`
- **THEN** SHALL 运行 desktop 专属测试
#### Scenario: 执行 desktop clean
- **WHEN** 执行 `make desktop-clean`
- **THEN** SHALL 清理 desktop 构建目录、嵌入资源目录和 desktop 相关测试/打包产物
### Requirement: Release 命令沿用根目录入口
根目录 `Makefile` SHALL 继续提供 `release-assets-*` 作为发布资产入口,并与新的版本校验规则保持一致。
#### Scenario: 执行 release 资产命令
- **WHEN** 执行 `make release-assets-linux``make release-assets-windows``make release-assets-macos`
- **THEN** SHALL 在构建发布资产前执行版本一致性校验
- **THEN** SHALL NOT 隐式执行 `version-sync` 或修改版本镜像文件
### Requirement: Backend 局部命令下沉
数据库迁移、MySQL 专项测试以及其他 backend 局部维护命令 SHALL 由 `backend/Makefile` 提供,而不是由根目录 `Makefile` 公开。
#### Scenario: 执行 backend 局部维护命令
- **WHEN** 开发者需要执行数据库迁移或 MySQL 专项测试
- **THEN** SHALL 在 `backend/` 目录使用 backend 局部 make 命令完成操作
- **THEN** 根目录 `Makefile` SHALL NOT 提供等价的公共命令别名