This commit is contained in:
2026-08-08 22:39:18 +08:00
parent d1cff37a2a
commit 464f3a166a
22 changed files with 510 additions and 54 deletions
+15 -1
View File
@@ -825,7 +825,7 @@ ctest --test-dir build --output-on-failure
测试使用 `backend/test_support/adminive_test.hpp``ADMINIVE_CHECK`,不会像标准 `assert()` 一样在 Release `NDEBUG` 下被移除。旧的 `Synchronized_Value`/`Resource_Lock_Scope` 测试实现已经删除;仍有意义的嵌套同步、无锁字段、读写能力和多线程序列化用例由当前 `Managed_Value` 测试覆盖,不恢复旧 API。
CTest 使用 label 区分 `unit``protocol``http``install``package``header``concurrency``managed` 等测试。全部 Adminive Core 公共头和 5 个 Service Adapter 公共头都注册独立 include 编译测试,避免 umbrella header 掩盖缺失依赖。`Adminive_Install_Consumer_Test` 会先安装到构建目录内的固定测试 prefix,再从独立 `install_consumer` 工程只通过 `find_package(Adminive)` 同时构建 `Adminive::Core``Adminive::Default`/Httplib consumer。`Adminive_Package_Zip_Test` 会实际生成源码 ZIP,验证根目录精确文件匹配、无残留嵌套工程且已删除的旧同步实现不会重新进入发布包。
CTest 使用 label 区分 `unit``protocol``http``install``package``header``concurrency``managed` 等测试。全部 Adminive Core 公共头和 5 个 Service Adapter 公共头都注册独立 include 编译测试,避免 umbrella header 掩盖缺失依赖。`Adminive_Install_Consumer_Test` 会先安装到构建目录内的固定测试 prefix,再从独立 `install_consumer` 工程只通过 `find_package(Adminive)` 同时构建 `Adminive::Core``Adminive::Default`/Httplib consumer。安装包不再把仓库内置的 nlohmann/json、magic_enum、cpp-httplib 复制到公共 include 命名空间;测试会用独立依赖 package fixture 验证导出目标确实通过 `find_dependency` 解析外部依赖,并检查安装 prefix 中不存在这些 bundled header。`Adminive_Package_Zip_Test` 会实际生成源码 ZIP,验证根目录精确文件匹配、release/license metadata、无残留嵌套工程且已删除的旧同步实现不会重新进入发布包。
Clang/GNU sanitizer
@@ -846,6 +846,14 @@ MSVC 配置 UBSan 或 TSan 会在 CMake 配置阶段明确失败,不允许出
python .\scripts\verify.py
```
正式发布环境安装了真实 Drogon 与 nlohmann_json CMake package 时,再执行:
```powershell
python .\scripts\verify.py --real-drogon
```
这个选项会在 Release 构建中启用真实 Drogon adapter target 和真实 installed-package consumer;默认 fake Drogon contract test 不冒充这一 Gate。
Gate 使用固定 `verification/debug``verification/release``verification/asan-ubsan``verification/tsan` 路径。Clang/GNU 运行 Debug/Release 全构建和 CTest、ASan+UBSan Core/Service 矩阵、TSan concurrency、前端依赖/单测/production build、Playwright Chromium E2EWindows MSVC 只运行真实 ASan,并明确输出 UBSan/TSan SKIP,额外运行 `msedge` channel。Sanitizer 矩阵覆盖 Core Adapter、Advanced Adapter、Safety、Managed、View Schema、Drogon 和真实 Httplib,不把耗时的示例 Gallery 重复做 sanitizer 构建。前端 E2E 覆盖导航、同一 Manifest 五种布局、display/create/edit、Collection CRUD/分页/排序/搜索/筛选/状态/重排/错误、422 nested validation、Sensitive 输出过滤、Object Adapter transaction counter、Transaction rollback、状态轮询序列、协议边界和缓存头。需要把前端测试注册进 CTest 时配置 `ADMINIVE_ENABLE_FRONTEND_TESTS=ON`
安装并通过 CMake 包使用:
@@ -861,6 +869,8 @@ find_package(Adminive CONFIG REQUIRED COMPONENTS Drogon)
target_link_libraries(drogon_app PRIVATE Adminive::Drogon)
```
安装后的 Adapter component 使用外部 CMake package`Nlohmann` 解析 `nlohmann_json::nlohmann_json``MagicEnum` 解析 `magic_enum::magic_enum``Httplib` 解析 `httplib::httplib``BoostPfr` 解析 `Boost::headers``Drogon` 解析 `Drogon::Drogon`。仓库内置的前三个 header 只服务源码树 build/test,不安装到消费者的通用 include 目录。完整规则见 `RELEASE.md`
MSVC 消费者默认接收 `/utf-8``/Zc:__cplusplus``/permissive-` 只用于 Adminive 自身目标;确实需要传播时配置 `ADMINIVE_PROPAGATE_MSVC_STRICT_MODE=ON`
访问:
@@ -886,3 +896,7 @@ add_project_zip_target(
adminive_package_excludes
)
```
## Release and third-party policy
See `RELEASE.md` for source-tree versus installed-package dependency rules and the real Drogon release gate. Redistributed dependency notices and license texts are listed in `THIRD_PARTY_NOTICES.md`. The repository does not currently declare an outbound license for Adminive/Structive project-owned code.