1
0

feat: 版本管理,package.json 唯一版本源、/api/meta 返回版本、Dashboard Header 展示版本号

This commit is contained in:
2026-05-20 19:14:37 +08:00
parent f3df3a203b
commit 8eac814cc6
25 changed files with 490 additions and 20 deletions

View File

@@ -34,3 +34,18 @@ Dashboard SHALL 使用 TDesign Layout 组件体系构建页面骨架,包含顶
#### Scenario: 页面背景色
- **WHEN** Dashboard 页面渲染
- **THEN** 页面背景色 SHALL 使用 `var(--td-bg-color-page)`,内容卡片浮于当前 TDesign 主题背景之上
### Requirement: Header 版本号展示
Dashboard SHALL 在顶部导航栏品牌区域展示当前运行实例的应用版本号,版本号 SHALL 使用 `/api/meta` 返回的 `version` 字段,并以 `v` 前缀显示。
#### Scenario: Meta 数据已加载
- **WHEN** Dashboard 成功获取 `/api/meta` 且返回 `version: "0.1.0"`
- **THEN** Header 品牌区域 SHALL 展示 `v0.1.0`
#### Scenario: Meta 数据尚未加载或请求失败
- **WHEN** Dashboard 尚未获取到有效 `version`
- **THEN** Header SHALL 保持可用并省略版本号占位,不影响品牌名、主题模式选择器、刷新频率选择器和倒计时/刷新按钮渲染
#### Scenario: 版本号视觉层级
- **WHEN** Header 展示版本号
- **THEN** 版本号 SHALL 使用次级文本样式弱展示,不得使用内联 style、硬编码色值、`!important` 或覆盖 TDesign 内部类名

View File

@@ -1,20 +1,24 @@
## Purpose
定义系统运行时元数据 APIchecker 类型列表等元信息的对外暴露方式。
定义系统运行时元数据 APIchecker 类型列表、应用版本号等元信息的对外暴露方式。
## Requirements
### Requirement: Meta 信息 API
系统 SHALL 提供 `GET /api/meta` 端点,返回系统运行时元数据。未匹配 method SHALL 按 API 通配符处理为 JSON 404不再保留自定义 HEAD/405 语义。
系统 SHALL 提供 `GET /api/meta` 端点,返回系统运行时元数据,包括应用版本号和 checker 类型列表。未匹配 method SHALL 按 API 通配符处理为 JSON 404不再保留自定义 HEAD/405 语义。
#### Scenario: 获取 checker 类型列表
#### Scenario: 获取 checker 类型列表和版本号
- **WHEN** 客户端请求 `GET /api/meta`
- **THEN** 系统 SHALL 返回 JSON `{ checkerTypes: string[] }`包含所有已注册的 checker 类型标识符(如 `["http", "cmd"]`
- **THEN** 系统 SHALL 返回 JSON `{ checkerTypes: string[], version: string }`,其中 `checkerTypes` 包含所有已注册的 checker 类型标识符(如 `["http", "cmd"]``version` 为当前运行实例的 `MAJOR.MINOR.PATCH` 应用版本
#### Scenario: 类型列表来源
- **WHEN** 系统启动并注册了 checker
- **THEN** `/api/meta` 返回的 `checkerTypes` SHALL 与 `CheckerRegistry.supportedTypes` 完全一致
#### Scenario: 版本号来源
- **WHEN** 系统启动并确定应用版本
- **THEN** `/api/meta` 返回的 `version` SHALL 与启动时注入的应用版本完全一致
#### Scenario: 不支持的 method 请求
- **WHEN** 客户端使用 POST/PUT/DELETE/HEAD 等未声明 method 请求 `/api/meta`
- **THEN** `/api/*` 通配符 SHALL 返回 JSON 404 响应
@@ -24,4 +28,4 @@
#### Scenario: MetaResponse 类型定义
- **WHEN** 前后端引用 `MetaResponse` 类型
- **THEN** 该类型 SHALL 包含 `checkerTypes: string[]` 字段
- **THEN** 该类型 SHALL 包含 `checkerTypes: string[]``version: string` 字段

View File

@@ -66,3 +66,18 @@ executable MUST 将环境相关运行时配置保留在嵌入的前端和 server
#### Scenario: 验证失败
- **WHEN** 质量检查或构建阶段失败
- **THEN** 验证 SHALL 使命令失败
### Requirement: 生产构建版本固化
生产构建 SHALL 在 code generation 阶段读取 `package.json.version`,并将该版本号固化到生成的 production server entry 中,使 standalone executable 能在运行时返回构建时版本。
#### Scenario: 构建时注入版本号
- **WHEN** 开发者运行生产构建命令
- **THEN** 构建脚本 SHALL 在生成 `.build/server-entry.ts` 时写入当前 `package.json.version` 对应的版本字面量
#### Scenario: executable 不依赖外部 package.json 返回版本
- **WHEN** 生成的 standalone executable 在目标机器运行且外部不存在项目根目录 `package.json`
- **THEN** `GET /api/meta` SHALL 仍返回构建时固化的 `version`
#### Scenario: 升迁后重新构建
- **WHEN** 开发者先升迁 `package.json.version` 再运行生产构建命令
- **THEN** 新生成的 standalone executable SHALL 返回升迁后的版本号

View File

@@ -47,7 +47,18 @@
#### Scenario: meta 数据返回
- **WHEN** meta 查询成功
- **THEN** hook SHALL 返回 `MetaResponse` 类型数据,包含 `checkerTypes` 字段
- **THEN** hook SHALL 返回 `MetaResponse` 类型数据,包含 `checkerTypes``version` 字段
### Requirement: Meta 版本数据
前端 SHALL 通过现有 `useMeta` hook 获取系统版本元数据,并将 `MetaResponse.version` 提供给需要展示版本号的组件。
#### Scenario: useMeta 返回版本字段
- **WHEN** `useMeta` 请求 `/api/meta` 成功
- **THEN** hook 返回的数据 SHALL 符合 `MetaResponse`,包含 `checkerTypes``version` 字段
#### Scenario: Header 复用 meta 查询
- **WHEN** Header 需要展示应用版本号
- **THEN** Header SHALL 复用 `useMeta``queryKey``["meta"]` 的查询结果,不得新增重复的版本专用请求
### Requirement: Hook 文件拆分
数据层 hook SHALL 按职责拆分为独立文件。

View File

@@ -0,0 +1,54 @@
## Purpose
定义 DiAL 应用版本号的唯一来源、手动版本升迁命令和版本管理文档要求。
## Requirements
### Requirement: 应用版本唯一来源
系统 SHALL 使用根目录 `package.json.version` 作为 DiAL 应用版本号的唯一来源。版本号 MUST 使用 `MAJOR.MINOR.PATCH` 数字格式,不包含 prerelease 或 build metadata。
#### Scenario: 读取应用版本
- **WHEN** 开发、构建或版本升迁流程需要获取 DiAL 应用版本
- **THEN** 系统 SHALL 从根目录 `package.json.version` 读取版本号
#### Scenario: 版本格式有效
- **WHEN** `package.json.version``0.1.0``1.2.3``MAJOR.MINOR.PATCH` 数字格式
- **THEN** 版本管理流程 SHALL 视为有效版本
#### Scenario: 版本格式无效
- **WHEN** `package.json.version` 缺失或不符合 `MAJOR.MINOR.PATCH` 数字格式
- **THEN** 版本管理流程 MUST 失败并输出可读错误,不得继续写入错误版本
### Requirement: 手动版本升迁命令
项目 SHALL 通过 `package.json` scripts 提供基于 Bun 的手动版本升迁命令,支持 `patch``minor``major` 和显式设置版本。
#### Scenario: 升迁 patch 版本
- **WHEN** 当前版本为 `1.2.3` 且开发者运行 `bun run version:patch`
- **THEN** 系统 SHALL 将 `package.json.version` 更新为 `1.2.4`
#### Scenario: 升迁 minor 版本
- **WHEN** 当前版本为 `1.2.3` 且开发者运行 `bun run version:minor`
- **THEN** 系统 SHALL 将 `package.json.version` 更新为 `1.3.0`
#### Scenario: 升迁 major 版本
- **WHEN** 当前版本为 `1.2.3` 且开发者运行 `bun run version:major`
- **THEN** 系统 SHALL 将 `package.json.version` 更新为 `2.0.0`
#### Scenario: 显式设置版本
- **WHEN** 开发者运行 `bun run version:set 0.2.0`
- **THEN** 系统 SHALL 将 `package.json.version` 更新为 `0.2.0`
#### Scenario: 拒绝无效设置版本
- **WHEN** 开发者运行 `bun run version:set 1.0.0-beta.1` 或其他非 `MAJOR.MINOR.PATCH` 版本
- **THEN** 系统 MUST 失败并保持 `package.json.version` 不变
#### Scenario: 版本升迁不执行发布副作用
- **WHEN** 开发者运行任意版本升迁命令
- **THEN** 系统 MUST NOT 自动创建 git commit、git tag、changelog 或 release
### Requirement: 版本管理文档
项目 SHALL 在开发文档中说明版本号规则、升迁命令、展示位置和暂不支持的发布自动化能力。
#### Scenario: 开发者查阅版本规则
- **WHEN** 开发者阅读 README.md 或 DEVELOPMENT.md
- **THEN** 文档 SHALL 说明 `package.json.version` 是唯一版本源,以及 `bun run version:patch``bun run version:minor``bun run version:major``bun run version:set <version>` 的用途