From bb9db37133a6b1db496fb59c102c643136b91aef Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 10:02:04 +0300 Subject: [PATCH 01/33] feat: add Vix Engine module --- .gitmodules | 4 ++++ modules/engine | 1 + 2 files changed, 5 insertions(+) create mode 160000 modules/engine diff --git a/.gitmodules b/.gitmodules index fd4323c..7513598 100644 --- a/.gitmodules +++ b/.gitmodules @@ -163,3 +163,7 @@ path = modules/requests url = https://github.com/vixcpp/requests.git branch = dev +[submodule "modules/engine"] + path = modules/engine + url = https://github.com/vixcpp/engine.git + branch = dev diff --git a/modules/engine b/modules/engine new file mode 160000 index 0000000..47d7f20 --- /dev/null +++ b/modules/engine @@ -0,0 +1 @@ +Subproject commit 47d7f20d8cf6da85e5f7a2a5d6d12bcb066ac284 From aa5dd05467bbc9c3f29f13169d2598def437c171 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 10:24:16 +0300 Subject: [PATCH 02/33] build: integrate engine module before cli --- CMakeLists.txt | 22 ++++++++++++++++++++++ modules/cli | 2 +- modules/engine | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 666c5e8..440b417 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,6 +92,7 @@ set(_VIX_SDK_PROFILE_OPTION_VARS VIX_CLI_ENABLE_DESKTOP VIX_ENABLE_NOTE VIX_ENABLE_PROCESS + VIX_ENABLE_ENGINE VIX_ENABLE_THREADPOOL VIX_ENABLE_KV VIX_ENABLE_AGENT @@ -296,6 +297,7 @@ option(VIX_NOTE_BUILD_TESTS "Build vix::note tests" option(VIX_NOTE_BUILD_EXAMPLES "Build vix::note examples" OFF) option(VIX_ENABLE_PROCESS "Build Vix Process module" ON) +option(VIX_ENABLE_ENGINE "Build Vix Engine module" ON) option(VIX_ENABLE_THREADPOOL "Build Vix ThreadPool module" ON) option(VIX_THREADPOOL_BUILD_EXAMPLES "Build vix::threadpool examples" OFF) @@ -353,6 +355,7 @@ function(vix_sdk_profile_common) vix_sdk_profile_default(VIX_CLI_ENABLE_DESKTOP OFF) vix_sdk_profile_default(VIX_ENABLE_NOTE ON) vix_sdk_profile_default(VIX_ENABLE_PROCESS ON) + vix_sdk_profile_default(VIX_ENABLE_ENGINE ON) vix_sdk_profile_default(VIX_ENABLE_THREADPOOL ON) vix_sdk_profile_default(VIX_ENABLE_KV OFF) vix_sdk_profile_default(VIX_ENABLE_AGENT OFF) @@ -516,6 +519,7 @@ set(VIX_CLI_ENABLE_DESKTOP ${VIX_CLI_ENABLE_DESKTOP} CACHE BOOL "Build vix d set(VIX_WEBSOCKET_BUILD_TESTS ${VIX_BUILD_TESTS} CACHE BOOL "Build vix::websocket tests") set(VIX_UI_BUILD_TESTS ${VIX_BUILD_TESTS} CACHE BOOL "Build vix::ui tests") set(VIX_NOTE_BUILD_TESTS ${VIX_BUILD_TESTS} CACHE BOOL "Build vix::note tests") +set(VIX_ENGINE_BUILD_TESTS ${VIX_BUILD_TESTS} CACHE BOOL "Build vix::engine tests") # Some modules use their own public option names. set(TEMPLATE_BUILD_TESTS ${VIX_TEMPLATE_BUILD_TESTS} CACHE BOOL "Build template tests") @@ -1522,12 +1526,26 @@ else() message(STATUS "WebSocket: disabled or not present.") endif() +# --- Engine (optional, before CLI) --- +if (VIX_ENABLE_ENGINE AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/engine/CMakeLists.txt") + message(STATUS "Adding 'modules/engine'...") + add_subdirectory(modules/engine engine_build) +else() + message(STATUS "Engine: disabled or not present.") +endif() + # --- CLI (optional) --- if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeLists.txt") message(STATUS "Adding 'modules/cli'...") set(VIX_CLI_ENABLE_DESKTOP ${VIX_CLI_ENABLE_DESKTOP} CACHE BOOL "Build vix desktop CLI support through vix::ui" FORCE) add_subdirectory(modules/cli cli_build) + if (VIX_BUILD_TESTS AND TARGET vix_cli AND TARGET vix_engine_model_tests AND TARGET vix_engine_parser_tests) + add_dependencies(vix_cli + vix_engine_model_tests + vix_engine_parser_tests + ) + endif() else() message(STATUS "CLI: disabled or not present.") endif() @@ -1630,6 +1648,10 @@ if (TARGET vix::process) target_link_libraries(vix INTERFACE vix::process) endif() +if (TARGET vix::engine) + target_link_libraries(vix INTERFACE vix::engine) +endif() + if (TARGET vix::threadpool) target_link_libraries(vix INTERFACE vix::threadpool) endif() diff --git a/modules/cli b/modules/cli index 380c5ee..0a1b19e 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 380c5ee6a9fcac72c01c5b4d8fa53d69e67163ba +Subproject commit 0a1b19e2df270aedd6ab2d9869babb126f4b3a1c diff --git a/modules/engine b/modules/engine index 47d7f20..6d1fbc6 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit 47d7f20d8cf6da85e5f7a2a5d6d12bcb066ac284 +Subproject commit 6d1fbc600292c23a5c0e8cee7a074181ef0a3617 From f0181f05c7e624e2f815f21048de357516012e86 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 10:53:53 +0300 Subject: [PATCH 03/33] build: update engine graph integration --- CMakeLists.txt | 9 ++++++++- modules/cli | 2 +- modules/engine | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 440b417..0eee60b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1540,10 +1540,17 @@ if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeList set(VIX_CLI_ENABLE_DESKTOP ${VIX_CLI_ENABLE_DESKTOP} CACHE BOOL "Build vix desktop CLI support through vix::ui" FORCE) add_subdirectory(modules/cli cli_build) - if (VIX_BUILD_TESTS AND TARGET vix_cli AND TARGET vix_engine_model_tests AND TARGET vix_engine_parser_tests) + if (VIX_BUILD_TESTS + AND TARGET vix_cli + AND TARGET vix_engine_model_tests + AND TARGET vix_engine_parser_tests + AND TARGET vix_engine_ninja_tests + AND TARGET vix_engine_graph_tests) add_dependencies(vix_cli vix_engine_model_tests vix_engine_parser_tests + vix_engine_ninja_tests + vix_engine_graph_tests ) endif() else() diff --git a/modules/cli b/modules/cli index 0a1b19e..30a8443 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 0a1b19e2df270aedd6ab2d9869babb126f4b3a1c +Subproject commit 30a8443647a349be57bb61660dbd1c77b61139ae diff --git a/modules/engine b/modules/engine index 6d1fbc6..38fa9a6 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit 6d1fbc600292c23a5c0e8cee7a074181ef0a3617 +Subproject commit 38fa9a64029dd2d34b018da3f86e6caed10476cd From f9cfc82f8ef62fa34437351e31d46da1fa9136ac Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 11:12:05 +0300 Subject: [PATCH 04/33] build: update engine scheduler integration --- CMakeLists.txt | 6 +++++- modules/cli | 2 +- modules/engine | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0eee60b..e366d3a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1545,12 +1545,16 @@ if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeList AND TARGET vix_engine_model_tests AND TARGET vix_engine_parser_tests AND TARGET vix_engine_ninja_tests - AND TARGET vix_engine_graph_tests) + AND TARGET vix_engine_graph_tests + AND TARGET vix_engine_scheduler_tests + AND TARGET vix_cli_build_task_process_executor_tests) add_dependencies(vix_cli vix_engine_model_tests vix_engine_parser_tests vix_engine_ninja_tests vix_engine_graph_tests + vix_engine_scheduler_tests + vix_cli_build_task_process_executor_tests ) endif() else() diff --git a/modules/cli b/modules/cli index 30a8443..49f3c7e 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 30a8443647a349be57bb61660dbd1c77b61139ae +Subproject commit 49f3c7e90b1032b7cce7a42530b44626d5ac3000 diff --git a/modules/engine b/modules/engine index 38fa9a6..502f07a 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit 38fa9a64029dd2d34b018da3f86e6caed10476cd +Subproject commit 502f07a1cb15c25b27028c8095697efcc65ab557 From 4cadf0fb744d1b743617059557cdea8ebd0afe16 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 11:30:35 +0300 Subject: [PATCH 05/33] build: integrate engine process execution --- CMakeLists.txt | 2 ++ modules/cli | 2 +- modules/engine | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e366d3a..db685ea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1547,6 +1547,7 @@ if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeList AND TARGET vix_engine_ninja_tests AND TARGET vix_engine_graph_tests AND TARGET vix_engine_scheduler_tests + AND TARGET vix_engine_process_tests AND TARGET vix_cli_build_task_process_executor_tests) add_dependencies(vix_cli vix_engine_model_tests @@ -1554,6 +1555,7 @@ if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeList vix_engine_ninja_tests vix_engine_graph_tests vix_engine_scheduler_tests + vix_engine_process_tests vix_cli_build_task_process_executor_tests ) endif() diff --git a/modules/cli b/modules/cli index 49f3c7e..3576578 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 49f3c7e90b1032b7cce7a42530b44626d5ac3000 +Subproject commit 35765784f2d799a6eda10d26366f4e3641389f8a diff --git a/modules/engine b/modules/engine index 502f07a..6e8d357 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit 502f07a1cb15c25b27028c8095697efcc65ab557 +Subproject commit 6e8d357a38e38ebe9d5a8c565c6a1fee5ace1acc From e5bc39f65fcaf5f2d66e9c92783d82e97182da24 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 11:59:53 +0300 Subject: [PATCH 06/33] build: update engine object cache integration --- CMakeLists.txt | 2 ++ modules/cli | 2 +- modules/engine | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index db685ea..918e710 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1548,6 +1548,7 @@ if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeList AND TARGET vix_engine_graph_tests AND TARGET vix_engine_scheduler_tests AND TARGET vix_engine_process_tests + AND TARGET vix_engine_object_cache_tests AND TARGET vix_cli_build_task_process_executor_tests) add_dependencies(vix_cli vix_engine_model_tests @@ -1556,6 +1557,7 @@ if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeList vix_engine_graph_tests vix_engine_scheduler_tests vix_engine_process_tests + vix_engine_object_cache_tests vix_cli_build_task_process_executor_tests ) endif() diff --git a/modules/cli b/modules/cli index 3576578..6d3f274 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 35765784f2d799a6eda10d26366f4e3641389f8a +Subproject commit 6d3f27439962bf9bcd26433d24071131d53b7b65 diff --git a/modules/engine b/modules/engine index 6e8d357..3c536e8 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit 6e8d357a38e38ebe9d5a8c565c6a1fee5ace1acc +Subproject commit 3c536e856d1a26f0461db2dbe0ae183d33610eff From 66dc68b8768dc3001a0b815e16f77f0ebf090904 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 12:49:17 +0300 Subject: [PATCH 07/33] build: update engine graph executor integration --- CMakeLists.txt | 2 ++ modules/cli | 2 +- modules/engine | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 918e710..f73a580 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1549,6 +1549,7 @@ if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeList AND TARGET vix_engine_scheduler_tests AND TARGET vix_engine_process_tests AND TARGET vix_engine_object_cache_tests + AND TARGET vix_engine_graph_executor_tests AND TARGET vix_cli_build_task_process_executor_tests) add_dependencies(vix_cli vix_engine_model_tests @@ -1558,6 +1559,7 @@ if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeList vix_engine_scheduler_tests vix_engine_process_tests vix_engine_object_cache_tests + vix_engine_graph_executor_tests vix_cli_build_task_process_executor_tests ) endif() diff --git a/modules/cli b/modules/cli index 6d3f274..bdac8c4 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 6d3f27439962bf9bcd26433d24071131d53b7b65 +Subproject commit bdac8c47964d7c893a044e825af99cb3ddd1af88 diff --git a/modules/engine b/modules/engine index 3c536e8..3e7e69a 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit 3c536e856d1a26f0461db2dbe0ae183d33610eff +Subproject commit 3e7e69a2ed65a9c27f946c06f37010db9df7b7b8 From 74fd93db6750aa96e58e5acef1be515b570de611 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 13:08:22 +0300 Subject: [PATCH 08/33] build: update engine artifact cache integration --- CMakeLists.txt | 2 ++ modules/cli | 2 +- modules/engine | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f73a580..7642d8f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1550,6 +1550,7 @@ if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeList AND TARGET vix_engine_process_tests AND TARGET vix_engine_object_cache_tests AND TARGET vix_engine_graph_executor_tests + AND TARGET vix_engine_artifact_cache_tests AND TARGET vix_cli_build_task_process_executor_tests) add_dependencies(vix_cli vix_engine_model_tests @@ -1560,6 +1561,7 @@ if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeList vix_engine_process_tests vix_engine_object_cache_tests vix_engine_graph_executor_tests + vix_engine_artifact_cache_tests vix_cli_build_task_process_executor_tests ) endif() diff --git a/modules/cli b/modules/cli index bdac8c4..e063a17 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit bdac8c47964d7c893a044e825af99cb3ddd1af88 +Subproject commit e063a1715c86f3de0c8c8b577b128f46ee1da272 diff --git a/modules/engine b/modules/engine index 3e7e69a..7fe5720 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit 3e7e69a2ed65a9c27f946c06f37010db9df7b7b8 +Subproject commit 7fe5720e3b22e38d270b2403c0df8b1a6ce15127 From 48b1bfbe0164b01bc626984ad389bbacd155e4c9 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 13:43:45 +0300 Subject: [PATCH 09/33] build: update execution plan integration --- CMakeLists.txt | 4 ++++ modules/cli | 2 +- modules/engine | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7642d8f..df9e0b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1551,6 +1551,8 @@ if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeList AND TARGET vix_engine_object_cache_tests AND TARGET vix_engine_graph_executor_tests AND TARGET vix_engine_artifact_cache_tests + AND TARGET vix_engine_execution_plan_tests + AND TARGET vix_cli_build_context_compat_tests AND TARGET vix_cli_build_task_process_executor_tests) add_dependencies(vix_cli vix_engine_model_tests @@ -1562,6 +1564,8 @@ if (VIX_ENABLE_CLI AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/cli/CMakeList vix_engine_object_cache_tests vix_engine_graph_executor_tests vix_engine_artifact_cache_tests + vix_engine_execution_plan_tests + vix_cli_build_context_compat_tests vix_cli_build_task_process_executor_tests ) endif() diff --git a/modules/cli b/modules/cli index e063a17..4c5eb37 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit e063a1715c86f3de0c8c8b577b128f46ee1da272 +Subproject commit 4c5eb37109b136c47d070a8ffbbd5b899573fdfc diff --git a/modules/engine b/modules/engine index 7fe5720..9b74a36 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit 7fe5720e3b22e38d270b2403c0df8b1a6ce15127 +Subproject commit 9b74a3673101cdf7d4b7d81107e6cc1ba25df878 From 5aac815d573b42fdb6a6a379aac718f9ffd8e70e Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 16:38:44 +0300 Subject: [PATCH 10/33] build: update engine toolchain integration. --- modules/cli | 2 +- modules/engine | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cli b/modules/cli index 4c5eb37..8f4fbb8 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 4c5eb37109b136c47d070a8ffbbd5b899573fdfc +Subproject commit 8f4fbb833d014a52c8e19dd06c8704a54c2ffbfe diff --git a/modules/engine b/modules/engine index 9b74a36..b7b805c 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit 9b74a3673101cdf7d4b7d81107e6cc1ba25df878 +Subproject commit b7b805c0af203178073190cd0b26d739db64e9b7 From f5d3c2f8f9187930f08faeb7208d20a9c81a46e2 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 17:09:38 +0300 Subject: [PATCH 11/33] build: update configuration planning integration --- modules/cli | 2 +- modules/engine | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cli b/modules/cli index 8f4fbb8..1eb67cb 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 8f4fbb833d014a52c8e19dd06c8704a54c2ffbfe +Subproject commit 1eb67cba109a548076d17ec3fb494e9f94c10561 diff --git a/modules/engine b/modules/engine index b7b805c..da108e7 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit b7b805c0af203178073190cd0b26d739db64e9b7 +Subproject commit da108e7310ba2d4bf09076a521680df6701308ce From 77464c596e0133795856d478af6225549bc2308a Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 17:55:32 +0300 Subject: [PATCH 12/33] build: integrate build watch tests --- modules/cli | 2 +- modules/engine | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cli b/modules/cli index 1eb67cb..2c0a6d6 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 1eb67cba109a548076d17ec3fb494e9f94c10561 +Subproject commit 2c0a6d6860afda1d6789594d14a271d60b96f8e2 diff --git a/modules/engine b/modules/engine index da108e7..10a7c0f 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit da108e7310ba2d4bf09076a521680df6701308ce +Subproject commit 10a7c0f4678fafc91e3f22deda0dad13708fcebf From 4095e39ee03939e6dc116bdef0faea0941522f18 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 19:38:26 +0300 Subject: [PATCH 13/33] fix(cli): preserve local Vix SDK discovery --- modules/cli | 2 +- modules/engine | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cli b/modules/cli index 2c0a6d6..bb57c74 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 2c0a6d6860afda1d6789594d14a271d60b96f8e2 +Subproject commit bb57c7415dd4836262a1bc743db6b04040db930d diff --git a/modules/engine b/modules/engine index 10a7c0f..cb193ce 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit 10a7c0f4678fafc91e3f22deda0dad13708fcebf +Subproject commit cb193ce9538af8e7e2ece6df6ee900c8f0126fd8 From 6ffab388c078c1131d761e5ce1f2e6c8a5ac77c0 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 28 Jul 2026 21:11:42 +0300 Subject: [PATCH 14/33] style(cli): simplify build watch output --- modules/cli | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cli b/modules/cli index bb57c74..cfcc231 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit bb57c7415dd4836262a1bc743db6b04040db930d +Subproject commit cfcc231e15ee41bd36489e11c1ec1f6f942e231d From 9a5361b63b0110520d55c9b5685f0f3de118ffb6 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Wed, 29 Jul 2026 13:00:10 +0300 Subject: [PATCH 15/33] feat: add fast incremental build watch mode --- CHANGELOG.md | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++- modules/cli | 2 +- 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e5a0b0..ca35108 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -72,6 +72,45 @@ moved -> new/package Workspace packages can aggregate dependencies without providing public headers. Header validation remains enabled for packages that expose source code or libraries. +### Fast incremental build watch mode + +Added persistent incremental builds through: + +```bash +vix build --watch +``` + +Watch mode performs the initial build, keeps the build session alive, and rebuilds the project whenever relevant files change. + +It supports: + +- standard CMake projects; +- generated `vix.app` projects; +- native `vix.app` projects; +- single C++ source builds; +- source and header change detection; +- structural project changes; +- CMake configuration changes; +- continued watching after compiler or linker failures; +- clean shutdown with `Ctrl+C`. + +For ordinary source and header edits, Vix preserves the execution plan and build graph in memory. It avoids project rediscovery and unnecessary CMake configuration, then delegates only the required incremental work to the graph executor or Ninja. + +```text +watching shop +ready in 1.4s +src/main.cpp rebuilt in 0.3s +include/shop.hpp rebuilt in 0.2s +``` + +The native Linux watcher uses `inotify` with recursive directory monitoring, event coalescing, rename handling, ignored build paths, and duplicate-event suppression. + +Detailed watcher, graph, and build-system information remains available through: + +```bash +vix build --watch --verbose +``` + ## Improved ### Registry publication workflow @@ -97,6 +136,20 @@ Managed SDK profiles are no longer required for every Vix-based project. Managed profiles are still used automatically when a complete compatible profile set is available, but missing profiles no longer block configuration before CMake runs. +### Build watch output + +The default `vix build --watch` output is now compact and focused on useful information. + +Successful builds no longer display: + +- raw Ninja progress; +- object file paths; +- repeated project headers; +- progress bars; +- build-system implementation details. + +Each successful rebuild is summarized on one line. Full details remain available with `--verbose`. + ## Fixed ### Registry pull request submission @@ -141,6 +194,18 @@ Projects using system, custom-prefix, or legacy Vix installations can now be con vix upgrade --sdk default ``` +### Duplicate watch rebuilds + +Fixed a single file save occasionally triggering an additional unnecessary rebuild. + +Watch mode now: + +- coalesces related filesystem events; +- suppresses duplicate events for unchanged file states; +- avoids invoking Ninja when graph invalidation produces no work; +- preserves real edits received while another rebuild is running; +- ignores build outputs and Vix-generated state files. + ## Validation Package migration was verified with the Kordex namespace move: @@ -164,7 +229,16 @@ The release was also validated for: - migration reporting in `vix outdated` and `vix update`; - workspace package publication; - builds using managed, system, local, and legacy Vix SDK installations; -- a complete Vix project build with the updated CLI module. +- a complete Vix project build with the updated CLI module; +- persistent `vix build --watch` sessions; +- incremental source and header rebuilds; +- structural and CMake configuration changes; +- recovery after compiler failures; +- duplicate filesystem event suppression; +- ignored build-directory and cache events; +- clean watcher shutdown with `Ctrl+C`; +- compact default watch output; +- detailed watch diagnostics with `--verbose`. ## v2.7.7 diff --git a/modules/cli b/modules/cli index cfcc231..d9b40a6 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit cfcc231e15ee41bd36489e11c1ec1f6f942e231d +Subproject commit d9b40a647741b9370da8796ba4ed3c19a5d0b9b5 From a10b68a712297c83e2cb5d3cc6743ea5a32d5b36 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Wed, 29 Jul 2026 15:50:08 +0300 Subject: [PATCH 16/33] chore(release): prepare Vix v2.8.0 --- CHANGELOG.md | 108 +++++++++++++++++++++++++------------------------ CMakeLists.txt | 32 +++++++-------- modules/cli | 2 +- modules/io | 2 +- 4 files changed, 73 insertions(+), 71 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca35108..12c73a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 Vix Registry packages can now move between repositories, namespaces, or package names without losing their history. -`vix publish` detects package moves using repository identity and shared Git history. The new registry entry preserves: +`vix publish` detects package moves using repository identity and shared Git history. The replacement package preserves: - existing versions; - package metadata; @@ -27,16 +27,14 @@ The previous package is automatically deprecated and linked to its replacement t - `movedTo` on the previous package; - `migratedFrom` on the replacement package. -### Migration support across package commands - -Package migrations are now supported throughout the CLI. +Package migrations are supported across the CLI. #### `vix add` - Redirects old package IDs to their `movedTo` destination. - Replaces the previous dependency in `vix.json`. - Migrates dependencies declared in `vix.module`. -- Removes the old dependency tree before regenerating `vix.lock`. +- Removes the previous dependency tree before regenerating `vix.lock`. ```text replaced: old/package -> new/package @@ -46,8 +44,8 @@ replaced: old/package -> new/package - Follows moved packages to their replacement. - Compares the installed version with the latest replacement version. -- Reports moved packages separately from regular outdated packages. -- JSON output includes `moved` and `moved_to`. +- Reports package moves separately from regular updates. +- Includes `moved` and `moved_to` in JSON output. ```text moved -> new/package @@ -56,13 +54,13 @@ moved -> new/package #### `vix update` - Migrates old package IDs in `vix.json`. -- Regenerates the lockfile using the replacement identity. -- Supports migration reporting in dry-run and JSON modes. -- Reads versions and hashes from the replacement package after migration. +- Regenerates `vix.lock` using the replacement identity. +- Reads versions and hashes from the replacement package. +- Reports migrations in regular, dry-run, and JSON modes. ### Workspace packages -`vix publish` now supports workspace packages: +`vix publish` now supports dependency-only workspace packages: ```json { @@ -70,7 +68,7 @@ moved -> new/package } ``` -Workspace packages can aggregate dependencies without providing public headers. Header validation remains enabled for packages that expose source code or libraries. +Workspace packages can aggregate dependencies without exposing public headers. Header validation remains enabled for source and library packages. ### Fast incremental build watch mode @@ -80,21 +78,20 @@ Added persistent incremental builds through: vix build --watch ``` -Watch mode performs the initial build, keeps the build session alive, and rebuilds the project whenever relevant files change. +Watch mode performs the initial build, keeps the build session alive, and rebuilds the project when relevant files change. It supports: - standard CMake projects; -- generated `vix.app` projects; -- native `vix.app` projects; +- generated and native `vix.app` projects; - single C++ source builds; -- source and header change detection; +- source and header changes; - structural project changes; - CMake configuration changes; -- continued watching after compiler or linker failures; +- recovery after compiler or linker failures; - clean shutdown with `Ctrl+C`. -For ordinary source and header edits, Vix preserves the execution plan and build graph in memory. It avoids project rediscovery and unnecessary CMake configuration, then delegates only the required incremental work to the graph executor or Ninja. +For ordinary source and header edits, Vix keeps the build graph and execution plan in memory. It avoids unnecessary project discovery and CMake configuration, then delegates only the required incremental work to the graph executor or Ninja. ```text watching shop @@ -103,9 +100,15 @@ src/main.cpp rebuilt in 0.3s include/shop.hpp rebuilt in 0.2s ``` -The native Linux watcher uses `inotify` with recursive directory monitoring, event coalescing, rename handling, ignored build paths, and duplicate-event suppression. +On Linux, watch mode uses `inotify` with: + +- recursive directory monitoring; +- event coalescing; +- rename handling; +- ignored build and generated paths; +- duplicate-event suppression. -Detailed watcher, graph, and build-system information remains available through: +Detailed watcher and build-system information remains available through: ```bash vix build --watch --verbose @@ -119,28 +122,31 @@ vix build --watch --verbose - Existing pull requests for the same branch are reused. - The pull request URL is displayed and included in JSON output. -- Migration pull requests identify both the previous and replacement package IDs. -- Commit messages and pull request descriptions now clearly describe package moves. +- Migration pull requests identify both package IDs. +- Commit messages and pull request descriptions clearly describe package moves. ### SDK discovery in `vix build` Managed SDK profiles are no longer required for every Vix-based project. -`vix build` now preserves normal CMake package discovery when no compatible managed profile is installed. This maintains compatibility with: +When no complete compatible managed profile is installed, `vix build` preserves normal CMake package discovery. This maintains compatibility with: - system and local Vix installations; -- Vix installations created before SDK profiles; +- installations created before SDK profiles; - custom installation prefixes; -- `Vix_DIR` and `CMAKE_PREFIX_PATH`; -- Conan, vcpkg, and custom CMake toolchains. +- `Vix_DIR`; +- `CMAKE_PREFIX_PATH`; +- Conan; +- vcpkg; +- custom CMake toolchains. -Managed profiles are still used automatically when a complete compatible profile set is available, but missing profiles no longer block configuration before CMake runs. +Managed profiles are still selected automatically when a compatible profile set is available. ### Build watch output The default `vix build --watch` output is now compact and focused on useful information. -Successful builds no longer display: +Successful rebuilds no longer display: - raw Ninja progress; - object file paths; @@ -148,7 +154,7 @@ Successful builds no longer display: - progress bars; - build-system implementation details. -Each successful rebuild is summarized on one line. Full details remain available with `--verbose`. +Each successful rebuild is summarized on one line. Full diagnostics remain available with `--verbose`. ## Fixed @@ -162,19 +168,15 @@ Publishing now fails clearly when: - `gh` is not authenticated; - pull request creation fails. -### Duplicate dependencies after package moves - -Fixed migrations retaining both the previous and replacement package IDs. - -`vix.json` and `vix.lock` now contain only the replacement dependency and its required dependency tree. - -### Moved-package status +### Package migration consistency -Fixed `vix outdated` reporting moved packages as current instead of checking the replacement package. +Fixed several migration issues: -### Lockfile lookup after migration +- `vix.json` and `vix.lock` retaining both the previous and replacement package IDs; +- `vix outdated` reporting moved packages as current without checking the replacement; +- `vix update` reading the previous package identity after lockfile regeneration. -Fixed `vix update` reading the previous package ID after regenerating the lockfile with the replacement identity. +After migration, only the replacement package and its required dependency tree remain. ### Package version ordering @@ -186,9 +188,9 @@ Fixed dependency-only workspace packages being rejected because they did not con ### Legacy and system SDK builds -Fixed `vix build` rejecting projects that used a valid Vix installation outside `~/.vix/sdk`. +Fixed `vix build` rejecting valid Vix installations outside `~/.vix/sdk`. -Projects using system, custom-prefix, or legacy Vix installations can now be configured through normal CMake discovery without running: +Projects using system, local, custom-prefix, or legacy installations can now rely on normal CMake discovery without running: ```bash vix upgrade --sdk default @@ -196,15 +198,15 @@ vix upgrade --sdk default ### Duplicate watch rebuilds -Fixed a single file save occasionally triggering an additional unnecessary rebuild. +Fixed a single file save occasionally triggering an unnecessary second rebuild. Watch mode now: - coalesces related filesystem events; -- suppresses duplicate events for unchanged file states; +- suppresses events whose file state did not change; - avoids invoking Ninja when graph invalidation produces no work; -- preserves real edits received while another rebuild is running; -- ignores build outputs and Vix-generated state files. +- preserves edits received while another rebuild is running; +- ignores build outputs, caches, and Vix-generated state files. ## Validation @@ -218,27 +220,27 @@ softadastra/kordex-cli -> kordexjs/cli softadastra/kordex -> kordexjs/kordex ``` -The release was also validated for: +The release was validated for: - migration detection during publication; -- preservation of package versions and metadata; +- package history and metadata preservation; - automatic registry pull request creation; - dependency replacement in `vix.json` and `vix.module`; - clean lockfile regeneration; - direct and transitive package migrations; - migration reporting in `vix outdated` and `vix update`; - workspace package publication; -- builds using managed, system, local, and legacy Vix SDK installations; -- a complete Vix project build with the updated CLI module; +- managed, system, local, custom-prefix, and legacy SDK discovery; +- a complete Vix project build with the updated CLI; - persistent `vix build --watch` sessions; - incremental source and header rebuilds; - structural and CMake configuration changes; - recovery after compiler failures; -- duplicate filesystem event suppression; +- duplicate-event suppression; - ignored build-directory and cache events; -- clean watcher shutdown with `Ctrl+C`; -- compact default watch output; -- detailed watch diagnostics with `--verbose`. +- clean watcher shutdown; +- compact default output; +- detailed diagnostics with `--verbose`. ## v2.7.7 diff --git a/CMakeLists.txt b/CMakeLists.txt index df9e0b6..ddc3967 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -794,6 +794,22 @@ else() message(FATAL_ERROR "Missing 'modules/fs'. Run: git submodule update --init --recursive") endif() +# --- Utils --- +if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/utils/CMakeLists.txt") + message(STATUS "Adding 'modules/utils'...") + add_subdirectory(modules/utils utils_build) +else() + message(FATAL_ERROR "Missing 'modules/utils'. Run: git submodule update --init --recursive") +endif() + +# --- Log --- +if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/log/CMakeLists.txt") + message(STATUS "Adding 'modules/log'...") + add_subdirectory(modules/log log_build) +else() + message(FATAL_ERROR "Missing 'modules/log'. Run: git submodule update --init --recursive") +endif() + # --- IO --- if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/io/CMakeLists.txt") message(STATUS "Adding 'modules/io'...") @@ -916,22 +932,6 @@ else() message(STATUS "Requests: disabled or not present.") endif() -# --- Utils --- -if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/utils/CMakeLists.txt") - message(STATUS "Adding 'modules/utils'...") - add_subdirectory(modules/utils utils_build) -else() - message(FATAL_ERROR "Missing 'modules/utils'. Run: git submodule update --init --recursive") -endif() - -# --- Log --- -if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/log/CMakeLists.txt") - message(STATUS "Adding 'modules/log'...") - add_subdirectory(modules/log log_build) -else() - message(FATAL_ERROR "Missing 'modules/log'. Run: git submodule update --init --recursive") -endif() - # --- Tests (optional) --- set(VIX_HAS_TESTS OFF) diff --git a/modules/cli b/modules/cli index d9b40a6..d28fa01 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit d9b40a647741b9370da8796ba4ed3c19a5d0b9b5 +Subproject commit d28fa0114d00f96e3f914d48a85a8397ed90a2bd diff --git a/modules/io b/modules/io index 04783ad..4d508e7 160000 --- a/modules/io +++ b/modules/io @@ -1 +1 @@ -Subproject commit 04783adf7033301ba852dd249d1d2b4e14488459 +Subproject commit 4d508e718c7644995d421208a322e482c5a9a1bd From 22f233a0cb529dc4b02330296c11b01cc2cc6382 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Wed, 29 Jul 2026 22:35:40 +0300 Subject: [PATCH 17/33] chore(release): update module dependency fixes --- modules/io | 2 +- modules/log | 2 +- modules/utils | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/io b/modules/io index 4d508e7..ce640bc 160000 --- a/modules/io +++ b/modules/io @@ -1 +1 @@ -Subproject commit 4d508e718c7644995d421208a322e482c5a9a1bd +Subproject commit ce640bc9daf12442377c4e4768b5317e55ca3883 diff --git a/modules/log b/modules/log index 64e73d3..1c6927e 160000 --- a/modules/log +++ b/modules/log @@ -1 +1 @@ -Subproject commit 64e73d37b2904f36d9ff889d651b9a0100b48f0b +Subproject commit 1c6927e7e2316c12028001b82ca62a0f0b37f8ad diff --git a/modules/utils b/modules/utils index 2f7b00e..36df9cb 160000 --- a/modules/utils +++ b/modules/utils @@ -1 +1 @@ -Subproject commit 2f7b00e624a81dccbdc5ffbce94901a62f4d7c31 +Subproject commit 36df9cb03170d7e025249100f397cf68db47e53d From 1c98e300a19fcec6b6c28bd17c9c80df10172871 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Wed, 29 Jul 2026 22:44:05 +0300 Subject: [PATCH 18/33] chore(release): update io console test fix --- modules/io | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/io b/modules/io index ce640bc..795a09c 160000 --- a/modules/io +++ b/modules/io @@ -1 +1 @@ -Subproject commit ce640bc9daf12442377c4e4768b5317e55ca3883 +Subproject commit 795a09c2c4ef1a554e6cc37993b5446ef82e4978 From 8c4fd2705c03af0384a144029f9526ef981bc917 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Wed, 29 Jul 2026 22:55:27 +0300 Subject: [PATCH 19/33] chore(release): update log standalone dependency fix --- modules/log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/log b/modules/log index 1c6927e..0ef32c5 160000 --- a/modules/log +++ b/modules/log @@ -1 +1 @@ -Subproject commit 1c6927e7e2316c12028001b82ca62a0f0b37f8ad +Subproject commit 0ef32c5aa0322e0d2fe94179247b7ac25ee73f93 From fbadc821252ea1f5ffa666ea5f75113eef8e22d1 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Thu, 30 Jul 2026 09:28:53 +0300 Subject: [PATCH 20/33] feat: add realtime module --- .gitmodules | 4 ++++ modules/realtime | 1 + 2 files changed, 5 insertions(+) create mode 160000 modules/realtime diff --git a/.gitmodules b/.gitmodules index 7513598..cb54787 100644 --- a/.gitmodules +++ b/.gitmodules @@ -167,3 +167,7 @@ path = modules/engine url = https://github.com/vixcpp/engine.git branch = dev +[submodule "modules/realtime"] + path = modules/realtime + url = https://github.com/vixcpp/realtime.git + branch = dev diff --git a/modules/realtime b/modules/realtime new file mode 160000 index 0000000..c53e57d --- /dev/null +++ b/modules/realtime @@ -0,0 +1 @@ +Subproject commit c53e57d201d2e722b1cce19b1485f6dbaf90a060 From eaf3e59d593930bc2348a154d9501e469d4d7499 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Fri, 31 Jul 2026 11:25:03 +0300 Subject: [PATCH 21/33] feat: prepare Vix v2.8.0 realtime release --- CHANGELOG.md | 452 ++++++++++++++++++++++++++++++++++++++++++++++ modules/cli | 2 +- modules/engine | 2 +- modules/json | 2 +- modules/realtime | 2 +- modules/websocket | 2 +- 6 files changed, 457 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12c73a7..5902278 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,458 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +# Vix v2.8.0 + +## Added + +### Stateful realtime applications + +Added the new `vix::realtime` module for building authoritative, stateful realtime applications in C++. + +The module introduces a transport-independent runtime based on: + +- stateful rooms; +- serialized commands; +- deterministic events; +- logical sessions; +- room membership; +- presence; +- snapshots; +- event replay; +- reconnection; +- interchangeable persistence stores. + +Applications can now define their own room state and command handlers while the runtime manages command execution, event persistence, state application, room versions, snapshots, recovery, and session routing. + +### Authoritative rooms + +Added rooms with one authoritative state and one serialized command execution path. + +Rooms support: + +- explicit opening and closing; +- application-defined room types; +- custom state implementations; +- custom command handlers; +- session joins and leaves; +- queued and immediate commands; +- event broadcasting; +- command backpressure; +- room metadata; +- configurable lifecycle behavior; +- deterministic failure handling. + +Commands are executed serially to prevent concurrent mutations of authoritative room state. + +### Commands and events + +Added typed room commands with: + +- room identifiers; +- session identifiers; +- request identifiers; +- correlation identifiers; +- expected room versions; +- JSON payloads; +- metadata; +- creation timestamps; +- validation. + +Accepted commands can produce one or more events. + +Events receive authoritative event identifiers and room versions before being persisted and applied to room state. + +### Event audiences + +Added event audience controls for delivering events to: + +- the complete room; +- only the sending session; +- every session except the sender; +- selected sessions. + +The room runtime remains independent from the network transport responsible for delivering those events. + +### Snapshots and event replay + +Added snapshot-based room recovery. + +Rooms can now: + +- create snapshots after a configured number of events; +- create snapshots explicitly; +- create a final snapshot when closing; +- retain a configurable number of recent snapshots; +- restore the latest available snapshot; +- replay events created after the snapshot; +- replay the complete history when no snapshot exists. + +Recovery preserves: + +- authoritative room state; +- room version; +- latest event identifier; +- deterministic event ordering. + +Reopening a room does not duplicate already persisted events. + +### Logical sessions + +Added logical sessions that are independent from individual network connections. + +Sessions support: + +- stable session identifiers; +- identity information; +- metadata; +- room memberships; +- connection attachment and detachment; +- connection replacement; +- resume tokens; +- per-room acknowledgement positions. + +A session can remain recoverable after its underlying transport connection is lost. + +### Session reconnection + +Added session recovery using resume tokens and acknowledged event positions. + +Reconnect flows can now: + +- validate a resume token; +- replace the previous connection; +- restore session memberships; +- replay missing room events; +- continue from the last acknowledged event; +- maintain independent replay positions across rooms. + +### Snapshot fallback + +Added snapshot fallback for clients that are too far behind for a bounded event replay. + +The recovery flow can send: + +1. the latest available room snapshot; +2. events persisted after that snapshot; +3. the final replay position. + +This allows stale clients to recover without replaying the entire room history. + +### Presence + +Added local presence tracking for room sessions. + +Presence records support: + +- room and session identifiers; +- identity; +- node ownership; +- connection identifiers; +- metadata; +- heartbeat timestamps; +- present, detached, and left states; +- expiration and stale-record cleanup. + +### Room management + +Added `RoomManager` for coordinating rooms, sessions, factories, stores, presence, and command routing. + +The manager supports: + +- room factory registration; +- opening and locating rooms; +- closing rooms; +- creating and locating sessions; +- joining and leaving rooms; +- attaching and detaching connections; +- routing room commands; +- configured room and session limits; +- inactive room cleanup; +- controlled runtime shutdown. + +### Room directory and ownership + +Added room directory and ownership abstractions. + +Active rooms can be associated with the node responsible for their authoritative execution, providing the foundation for future multi-process and distributed routing. + +### Persistence stores + +Added persistence interfaces for: + +- room events; +- room snapshots; +- presence records. + +The initial runtime includes: + +- `MemoryEventStore`; +- `MemorySnapshotStore`; +- local in-memory presence storage. + +Event and snapshot stores can be replaced without changing application room state or command handlers. + +### Optional PostgreSQL persistence + +Added optional PostgreSQL event and snapshot store support. + +PostgreSQL persistence is disabled by default and can be enabled independently from the realtime transport layer. + +### Optional WebSocket adapter + +Added an optional adapter between `vix::realtime` and `vix::websocket`. + +The adapter handles: + +- connection lifecycle events; +- realtime protocol parsing; +- session opening and resumption; +- room joins and leaves; +- command forwarding; +- event delivery; +- acknowledgements; +- protocol errors; +- connection backpressure. + +The authoritative realtime core can be built and used without WebSocket support. + +### Realtime protocol + +Added a versioned protocol envelope for communication between realtime clients and servers. + +Protocol messages cover: + +- session opening; +- session resumption; +- room joining; +- room leaving; +- room commands; +- command acceptance; +- command rejection; +- room events; +- room snapshots; +- event acknowledgements; +- replay completion; +- presence updates; +- ping and pong; +- protocol errors; +- server draining notifications. + +Protocol messages include version validation and structured parsing errors. + +### Public API + +Added the stable realtime umbrella header: + +```cpp +#include +``` + +Advanced APIs remain available through module-specific headers: + +```cpp +#include +``` + +The public CMake targets are: + +```cmake +vix_realtime +vix::realtime +``` + +### Realtime package + +Added standalone package metadata for: + +```text +vix/realtime +``` + +The first standalone module version is: + +```text +0.1.0 +``` + +Added: + +- `vix.json`; +- CMake package configuration; +- package version generation; +- exported CMake target definitions; +- optional dependency configuration; +- standalone install preparation. + +### Examples + +Added four complete realtime examples. + +#### Counter + +Demonstrates: + +- room commands; +- deterministic events; +- automatic snapshots; +- state restoration; +- continued event and room versions. + +#### Shared room + +Demonstrates: + +- multiple sessions in one room; +- authoritative shared state; +- room membership; +- object placement and removal; +- room-wide event broadcasting. + +#### Chat + +Demonstrates: + +- persistent chat messages; +- session membership; +- room history; +- snapshots; +- room restoration; +- continued message state. + +#### Reconnect + +Demonstrates: + +- event acknowledgements; +- temporary disconnection; +- replay of missing events; +- resume-token validation; +- snapshot fallback; +- restoration of authoritative state. + +### Realtime strict CI + +Added a dedicated strict CI workflow for the realtime module. + +The workflow validates: + +- GCC and Clang builds; +- Debug and Release configurations; +- WebSocket enabled and disabled builds; +- examples enabled and disabled builds; +- AddressSanitizer and UndefinedBehaviorSanitizer; +- the complete realtime test suite; +- compiler warning enforcement; +- execution of all four examples; +- static analysis with `clang-tidy`; +- static analysis with `cppcheck`; +- Valgrind memory checks; +- PostgreSQL store compilation; +- package metadata consistency; +- CMake package contract consistency. + +## Improved + +### Realtime transport separation + +Realtime application state is no longer coupled to WebSocket-specific behavior. + +Rooms, sessions, commands, events, snapshots, replay, and presence belong to the transport-independent runtime. WebSocket is implemented as an optional adapter around that runtime. + +This allows additional transports to reuse the same authoritative application model. + +### Deterministic recovery + +Room restoration now follows one consistent recovery sequence: + +1. load the latest snapshot when available; +2. restore the snapshot state and schema version; +3. replay persisted events after the snapshot; +4. restore the latest room version and event identifier; +5. continue accepting new commands from the recovered position. + +Multiple restorations from the same persisted history produce the same state and version. + +### Realtime configuration + +Added configuration for: + +- maximum active rooms; +- maximum sessions per room; +- maximum queued commands; +- snapshot frequency; +- snapshot creation during room shutdown; +- retained snapshot count; +- room restoration during opening; +- session recovery windows; +- replay limits; +- presence expiration. + +## Validation + +The realtime module was validated with: + +- identifier and version tests; +- command and event tests; +- protocol parsing tests; +- protocol validation tests; +- protocol round-trip tests; +- room state tests; +- event application tests; +- memory event store tests; +- memory snapshot store tests; +- snapshot policy tests; +- logical session tests; +- session disconnection tests; +- presence join, leave, heartbeat, expiration, and visibility tests; +- room construction and opening tests; +- room command tests; +- room event tests; +- room membership tests; +- room broadcast tests; +- room snapshot and restoration tests; +- room lifecycle tests; +- command backpressure tests; +- room shutdown and failure tests; +- room directory and ownership tests; +- room manager tests; +- WebSocket adapter tests; +- resume-token tests; +- reconnection replay tests; +- snapshot fallback tests; +- complete realtime session flow tests; +- deterministic snapshot and replay integration tests. + +The complete module builds successfully with tests and examples enabled. + +The following example flows were executed successfully: + +```text +counter +shared_room +chat +reconnect +``` + +Validation confirmed: + +- deterministic command execution; +- monotonic room versions; +- monotonic event identifiers; +- event persistence; +- automatic snapshots; +- snapshot restoration; +- replay after snapshots; +- complete replay without snapshots; +- no duplicated persisted events after reopening; +- continued command execution after recovery; +- session membership changes; +- shared authoritative room state; +- persistent chat history; +- replay from acknowledged positions; +- snapshot fallback for stale clients; +- restoration of the final authoritative state. + # Vix v2.7.8 ## Added diff --git a/modules/cli b/modules/cli index d28fa01..8f30e6d 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit d28fa0114d00f96e3f914d48a85a8397ed90a2bd +Subproject commit 8f30e6d43c94f39894e6f618441f306c9ecbb4cf diff --git a/modules/engine b/modules/engine index cb193ce..440c966 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit cb193ce9538af8e7e2ece6df6ee900c8f0126fd8 +Subproject commit 440c966395dca0fc5f5888d970034479badcf103 diff --git a/modules/json b/modules/json index a4d071b..8b09521 160000 --- a/modules/json +++ b/modules/json @@ -1 +1 @@ -Subproject commit a4d071b98c04ec16589d7e6dd4862f4fbc3d257e +Subproject commit 8b095215a8ab357acb42284e04f8c2ff39bbaba4 diff --git a/modules/realtime b/modules/realtime index c53e57d..a891348 160000 --- a/modules/realtime +++ b/modules/realtime @@ -1 +1 @@ -Subproject commit c53e57d201d2e722b1cce19b1485f6dbaf90a060 +Subproject commit a8913480e6d8e767772e2f8a5d64c33b9e8d8e67 diff --git a/modules/websocket b/modules/websocket index e487146..2da1c0c 160000 --- a/modules/websocket +++ b/modules/websocket @@ -1 +1 @@ -Subproject commit e48714643157c0e50be461ea1c712bced5c13fb7 +Subproject commit 2da1c0c0b7095dce7b9cfed84d1b63ea9a5348d5 From b3bc522c0d240e58a090d888857f184bcf3c6adf Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Mon, 3 Aug 2026 16:00:38 +0300 Subject: [PATCH 22/33] feat: add realtime module and sanitizer build support --- .github/workflows/MODULE_TESTS_CI.yml | 14 ++++- CMakeLists.txt | 81 ++++++++++++++++++++++++++- cmake/VixConfig.cmake.in | 10 ++++ modules/cli | 2 +- modules/engine | 2 +- modules/realtime | 2 +- vix/all.hpp | 1 + vix/realtime.hpp | 31 ++++++++++ 8 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 vix/realtime.hpp diff --git a/.github/workflows/MODULE_TESTS_CI.yml b/.github/workflows/MODULE_TESTS_CI.yml index 6ccd5ee..a409ab5 100644 --- a/.github/workflows/MODULE_TESTS_CI.yml +++ b/.github/workflows/MODULE_TESTS_CI.yml @@ -90,6 +90,7 @@ jobs: test -f modules/ui/CMakeLists.txt test -f modules/note/CMakeLists.txt test -f modules/requests/CMakeLists.txt + test -f modules/realtime/CMakeLists.txt - name: Select compiler run: | @@ -148,6 +149,11 @@ jobs: -DVIX_ENABLE_REQUESTS=ON \ -DVIX_REQUESTS_BUILD_TESTS=ON \ -DVIX_REQUESTS_BUILD_EXAMPLES=OFF \ + -DVIX_ENABLE_REALTIME=ON \ + -DVIX_REALTIME_BUILD_TESTS=ON \ + -DVIX_REALTIME_BUILD_EXAMPLES=OFF \ + -DVIX_REALTIME_WITH_WEBSOCKET=ON \ + -DVIX_REALTIME_WITH_POSTGRES=OFF \ -DVIX_ENABLE_VALIDATION=ON \ -DVIX_ENABLE_CACHE=ON \ -DVIX_ENABLE_P2P=ON \ @@ -211,6 +217,7 @@ jobs: test -f modules/ui/CMakeLists.txt test -f modules/note/CMakeLists.txt test -f modules/requests/CMakeLists.txt + test -f modules/realtime/CMakeLists.txt - name: Configure light module tests run: | @@ -264,7 +271,12 @@ jobs: -DVIX_ENABLE_WEBSOCKET=OFF \ -DVIX_ENABLE_REQUESTS=ON \ -DVIX_REQUESTS_BUILD_TESTS=ON \ - -DVIX_REQUESTS_BUILD_EXAMPLES=OFF + -DVIX_REQUESTS_BUILD_EXAMPLES=OFF \ + -DVIX_ENABLE_REALTIME=ON \ + -DVIX_REALTIME_BUILD_TESTS=ON \ + -DVIX_REALTIME_BUILD_EXAMPLES=OFF \ + -DVIX_REALTIME_WITH_WEBSOCKET=OFF \ + -DVIX_REALTIME_WITH_POSTGRES=OFF - name: Build light module tests run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index ddc3967..64c86a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,6 +84,7 @@ set(_VIX_SDK_PROFILE_OPTION_VARS VIX_ENABLE_CRYPTO VIX_ENABLE_WEBRPC VIX_ENABLE_REQUESTS + VIX_ENABLE_REALTIME VIX_ENABLE_TIME VIX_ENABLE_TESTS_MODULE VIX_ENABLE_TEMPLATE @@ -272,6 +273,11 @@ option(VIX_ENABLE_VALIDATION "Build Vix Validation module" option(VIX_ENABLE_CRYPTO "Build Vix Crypto module" ON) option(VIX_ENABLE_WEBRPC "Build Vix WebRPC module" ON) option(VIX_ENABLE_REQUESTS "Build Vix Requests module" ON) +option(VIX_ENABLE_REALTIME "Build Vix Realtime module" ON) +option(VIX_REALTIME_BUILD_TESTS "Build vix::realtime tests" ${VIX_BUILD_TESTS}) +option(VIX_REALTIME_BUILD_EXAMPLES "Build vix::realtime examples" OFF) +option(VIX_REALTIME_WITH_WEBSOCKET "Build vix::realtime WebSocket transport adapter" ${VIX_ENABLE_WEBSOCKET}) +option(VIX_REALTIME_WITH_POSTGRES "Build vix::realtime PostgreSQL stores" OFF) option(VIX_REQUESTS_BUILD_TESTS "Build vix::requests tests" ${VIX_BUILD_TESTS}) option(VIX_REQUESTS_BUILD_EXAMPLES "Build vix::requests examples" OFF) option(VIX_ENABLE_TIME "Build Vix Time module" ON) @@ -347,6 +353,7 @@ function(vix_sdk_profile_common) vix_sdk_profile_default(VIX_ENABLE_CRYPTO OFF) vix_sdk_profile_default(VIX_ENABLE_WEBRPC OFF) vix_sdk_profile_default(VIX_ENABLE_REQUESTS OFF) + vix_sdk_profile_default(VIX_ENABLE_REALTIME OFF) vix_sdk_profile_default(VIX_ENABLE_TIME ON) vix_sdk_profile_default(VIX_ENABLE_TESTS_MODULE OFF) vix_sdk_profile_default(VIX_ENABLE_TEMPLATE ON) @@ -374,6 +381,7 @@ if (NOT _VIX_SDK_PROFILE_EFFECTIVE STREQUAL "legacy") vix_sdk_profile_default(VIX_ENABLE_CRYPTO ON) vix_sdk_profile_default(VIX_ENABLE_WEBRPC ON) vix_sdk_profile_default(VIX_ENABLE_REQUESTS ON) + vix_sdk_profile_default(VIX_ENABLE_REALTIME ON) elseif (_VIX_SDK_PROFILE_EFFECTIVE STREQUAL "data") vix_sdk_profile_default(VIX_ENABLE_DB ON) vix_sdk_profile_default(VIX_ENABLE_ORM ON) @@ -410,6 +418,7 @@ if (NOT _VIX_SDK_PROFILE_EFFECTIVE STREQUAL "legacy") vix_sdk_profile_default(VIX_ENABLE_CRYPTO ON) vix_sdk_profile_default(VIX_ENABLE_WEBRPC ON) vix_sdk_profile_default(VIX_ENABLE_REQUESTS ON) + vix_sdk_profile_default(VIX_ENABLE_REALTIME ON) vix_sdk_profile_default(VIX_ENABLE_KV ON) vix_sdk_profile_default(VIX_ENABLE_AGENT ON) vix_sdk_profile_default(VIX_ENABLE_GAME ON) @@ -446,6 +455,7 @@ set(_VIX_SDK_PACKAGE_P2P ON) set(_VIX_SDK_PACKAGE_P2P_HTTP ON) set(_VIX_SDK_PACKAGE_AGENT ON) set(_VIX_SDK_PACKAGE_GAME ON) +set(_VIX_SDK_PACKAGE_REALTIME ON) if (NOT _VIX_SDK_PROFILE_EFFECTIVE STREQUAL "legacy") vix_sdk_profile_user_set(_VIX_SDK_USER_DB VIX_ENABLE_DB) @@ -455,6 +465,7 @@ if (NOT _VIX_SDK_PROFILE_EFFECTIVE STREQUAL "legacy") vix_sdk_profile_user_set(_VIX_SDK_USER_P2P_HTTP VIX_ENABLE_P2P_HTTP) vix_sdk_profile_user_set(_VIX_SDK_USER_AGENT VIX_ENABLE_AGENT) vix_sdk_profile_user_set(_VIX_SDK_USER_GAME VIX_ENABLE_GAME) + vix_sdk_profile_user_set(_VIX_SDK_USER_REALTIME VIX_ENABLE_REALTIME) set(_VIX_SDK_PACKAGE_DB OFF) set(_VIX_SDK_PACKAGE_ORM OFF) @@ -463,6 +474,7 @@ if (NOT _VIX_SDK_PROFILE_EFFECTIVE STREQUAL "legacy") set(_VIX_SDK_PACKAGE_P2P_HTTP OFF) set(_VIX_SDK_PACKAGE_AGENT OFF) set(_VIX_SDK_PACKAGE_GAME OFF) + set(_VIX_SDK_PACKAGE_REALTIME OFF) if (_VIX_SDK_PROFILE_EFFECTIVE STREQUAL "data" OR _VIX_SDK_PROFILE_EFFECTIVE STREQUAL "all" OR (_VIX_SDK_USER_DB AND VIX_ENABLE_DB)) set(_VIX_SDK_PACKAGE_DB ON) @@ -485,6 +497,9 @@ if (NOT _VIX_SDK_PROFILE_EFFECTIVE STREQUAL "legacy") if (_VIX_SDK_PROFILE_EFFECTIVE STREQUAL "game" OR _VIX_SDK_PROFILE_EFFECTIVE STREQUAL "all" OR (_VIX_SDK_USER_GAME AND VIX_ENABLE_GAME)) set(_VIX_SDK_PACKAGE_GAME ON) endif() + if (_VIX_SDK_PROFILE_EFFECTIVE STREQUAL "web" OR _VIX_SDK_PROFILE_EFFECTIVE STREQUAL "all" OR (_VIX_SDK_USER_REALTIME AND VIX_ENABLE_REALTIME)) + set(_VIX_SDK_PACKAGE_REALTIME ON) + endif() endif() # ---------------------------------------------------- # Module test defaults @@ -507,6 +522,7 @@ set(VIX_CONVERSION_BUILD_TESTS ${VIX_BUILD_TESTS} CACHE BOOL "Build vix::convers set(VIX_VALIDATION_BUILD_TESTS ${VIX_BUILD_TESTS} CACHE BOOL "Build vix::validation tests") set(VIX_WEBRPC_BUILD_TESTS ${VIX_BUILD_TESTS} CACHE BOOL "Build vix::webrpc tests") set(VIX_REQUESTS_BUILD_TESTS ${VIX_BUILD_TESTS} CACHE BOOL "Build vix::requests tests") +set(VIX_REALTIME_BUILD_TESTS ${VIX_BUILD_TESTS} CACHE BOOL "Build vix::realtime tests") set(VIX_NET_BUILD_TESTS ${VIX_BUILD_TESTS} CACHE BOOL "Build vix::net tests") set(VIX_SYNC_BUILD_TESTS ${VIX_BUILD_TESTS} CACHE BOOL "Build vix::sync tests") set(VIX_CACHE_BUILD_TESTS ${VIX_BUILD_TESTS} CACHE BOOL "Build vix::cache tests") @@ -1526,6 +1542,51 @@ else() message(STATUS "WebSocket: disabled or not present.") endif() +# --- Realtime (optional) --- +set(VIX_HAS_REALTIME OFF) +if (VIX_ENABLE_REALTIME AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/realtime/CMakeLists.txt") + if (NOT VIX_HAS_ASYNC) + message(FATAL_ERROR "Realtime requires Async module. Enable it with -DVIX_ENABLE_ASYNC=ON.") + endif() + if (NOT VIX_HAS_TIME) + message(FATAL_ERROR "Realtime requires Time module. Enable it with -DVIX_ENABLE_TIME=ON.") + endif() + if (NOT VIX_HAS_SYNC) + message(FATAL_ERROR "Realtime requires Sync module. Ensure modules/sync exists and configures successfully.") + endif() + + message(STATUS "Adding 'modules/realtime'...") + + if (VIX_REALTIME_WITH_WEBSOCKET AND NOT VIX_HAS_WEBSOCKET) + message(WARNING "Realtime WebSocket adapter requested but WebSocket module is missing -> disabling adapter") + set(VIX_REALTIME_WITH_WEBSOCKET OFF CACHE BOOL "Build vix::realtime WebSocket transport adapter" FORCE) + endif() + + if (VIX_REALTIME_WITH_POSTGRES AND NOT VIX_HAS_DB) + message(FATAL_ERROR "Realtime PostgreSQL stores require DB module. Enable VIX_ENABLE_DB=ON or disable VIX_REALTIME_WITH_POSTGRES.") + endif() + + set(VIX_REALTIME_FETCH_DEPENDENCIES ${VIX_FETCH_DEPS} CACHE BOOL "Fetch missing Vix dependencies" FORCE) + set(VIX_REALTIME_BUILD_TESTS ${VIX_REALTIME_BUILD_TESTS} CACHE BOOL "Build realtime module tests" FORCE) + set(VIX_REALTIME_BUILD_EXAMPLES ${VIX_REALTIME_BUILD_EXAMPLES} CACHE BOOL "Build realtime module examples" FORCE) + set(VIX_REALTIME_WITH_WEBSOCKET ${VIX_REALTIME_WITH_WEBSOCKET} CACHE BOOL "Build the Vix WebSocket transport adapter" FORCE) + set(VIX_REALTIME_WITH_POSTGRES ${VIX_REALTIME_WITH_POSTGRES} CACHE BOOL "Build PostgreSQL event and snapshot stores" FORCE) + set(VIX_REALTIME_ENABLE_INSTALL ${_VIX_SDK_PACKAGE_REALTIME} CACHE BOOL "Generate install rules for the realtime package" FORCE) + + add_subdirectory(modules/realtime realtime_build) + + if (TARGET vix::realtime OR TARGET vix_realtime) + set(VIX_HAS_REALTIME ON) + if (TARGET vix_realtime AND NOT TARGET vix::realtime) + add_library(vix::realtime ALIAS vix_realtime) + endif() + else() + message(WARNING "Realtime module added but no vix::realtime target was exported.") + endif() +else() + message(STATUS "Realtime: disabled or not present.") +endif() + # --- Engine (optional, before CLI) --- if (VIX_ENABLE_ENGINE AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/modules/engine/CMakeLists.txt") message(STATUS "Adding 'modules/engine'...") @@ -1711,6 +1772,10 @@ if (TARGET vix::requests) target_link_libraries(vix INTERFACE vix::requests) endif() +if (TARGET vix::realtime AND _VIX_SDK_PACKAGE_REALTIME) + target_link_libraries(vix INTERFACE vix::realtime) +endif() + # Link websocket only if it exists if (TARGET vix::websocket) target_link_libraries(vix INTERFACE vix::websocket) @@ -1942,6 +2007,11 @@ if (VIX_HAS_REQUESTS) set(VIX_WITH_REQUESTS ON) endif() +set(VIX_WITH_REALTIME OFF) +if (VIX_HAS_REALTIME AND _VIX_SDK_PACKAGE_REALTIME) + set(VIX_WITH_REALTIME ON) +endif() + if ((VIX_HAS_DB AND VIX_DB_USE_SQLITE) OR VIX_HAS_WEBSOCKET) set(VIX_WITH_SQLITE ON) endif() @@ -1949,7 +2019,7 @@ endif() if (VIX_ENABLE_INSTALL) if (_VIX_SDK_PROFILE_EFFECTIVE STREQUAL "legacy") - set(_VIX_INSTALL_MODULES error path fs io env os log tests core utils json websocket webrpc requests crypto time conversion validation async process threadpool kv agent game net cache sync p2p p2p_http middleware db orm template ui note) + set(_VIX_INSTALL_MODULES error path fs io env os log tests core utils json websocket webrpc requests realtime crypto time conversion validation async process threadpool kv agent game net cache sync p2p p2p_http middleware db orm template ui note) else() set(_VIX_INSTALL_MODULES error path fs io env os log core utils json time conversion async process threadpool template ui note net sync crypto) if (VIX_HAS_WEBRPC) @@ -1958,6 +2028,9 @@ if (VIX_ENABLE_INSTALL) if (VIX_HAS_REQUESTS) list(APPEND _VIX_INSTALL_MODULES requests) endif() + if (VIX_HAS_REALTIME AND _VIX_SDK_PACKAGE_REALTIME) + list(APPEND _VIX_INSTALL_MODULES realtime) + endif() if (VIX_HAS_VALIDATION) list(APPEND _VIX_INSTALL_MODULES validation) endif() @@ -2172,6 +2245,9 @@ if (VIX_ENABLE_INSTALL) set(VIX_HAS_REQUESTS ${VIX_HAS_REQUESTS}) set(VIX_WITH_REQUESTS ${VIX_WITH_REQUESTS}) + set(VIX_HAS_REALTIME ${VIX_WITH_REALTIME}) + set(VIX_WITH_REALTIME ${VIX_WITH_REALTIME}) + set(VIX_WITH_AGENT OFF) if (VIX_HAS_AGENT AND _VIX_SDK_PACKAGE_AGENT) set(VIX_WITH_AGENT ON) @@ -2253,6 +2329,7 @@ message(STATUS "JSON backend : ${_VIX_JSON_BACKEND}") message(STATUS "Time module : ${VIX_HAS_TIME}") message(STATUS "WebRPC built : ${VIX_HAS_WEBRPC}") message(STATUS "Requests built : ${VIX_HAS_REQUESTS}") +message(STATUS "Realtime built : ${VIX_HAS_REALTIME}") message(STATUS "WebSocket built : ${VIX_HAS_WEBSOCKET}") message(STATUS "Process built : ${VIX_HAS_PROCESS}") message(STATUS "ThreadPool built : ${VIX_HAS_THREADPOOL}") @@ -2276,5 +2353,5 @@ message(STATUS "Sanitizers : ${VIX_ENABLE_SANITIZERS}") message(STATUS "Coverage : ${VIX_ENABLE_COVERAGE}") message(STATUS "LTO : ${VIX_ENABLE_LTO}") message(STATUS "Install/Export : ${VIX_ENABLE_INSTALL}") -message(STATUS "Flags exported : JSON=${VIX_WITH_JSON} CONVERSION=${VIX_WITH_CONVERSION} VALIDATION=${VIX_WITH_VALIDATION} WEBRPC=${VIX_WITH_WEBRPC} REQUESTS=${VIX_WITH_REQUESTS} CRYPTO=${VIX_WITH_CRYPTO} BOOST_FS=${VIX_WITH_BOOST_FS} OPENSSL=${VIX_WITH_OPENSSL} SQLITE=${VIX_WITH_SQLITE} MYSQL=${VIX_WITH_MYSQL} HAS_ORM=${VIX_HAS_ORM} CACHE=${VIX_WITH_CACHE} P2P=${VIX_WITH_P2P} TEMPLATE=${VIX_WITH_TEMPLATE} UI=${VIX_WITH_UI} UI_WEBVIEW=${VIX_WITH_UI_LINUX_WEBVIEW} NOTE=${VIX_WITH_NOTE} THREADPOOL=${VIX_WITH_THREADPOOL} KV=${VIX_WITH_KV} AGENT=${VIX_WITH_AGENT} GAME=${VIX_WITH_GAME} GAME_SDL=${VIX_WITH_GAME_SDL} GAME_SDL_OPENGL=${VIX_WITH_GAME_SDL_OPENGL}") +message(STATUS "Flags exported : JSON=${VIX_WITH_JSON} CONVERSION=${VIX_WITH_CONVERSION} VALIDATION=${VIX_WITH_VALIDATION} WEBRPC=${VIX_WITH_WEBRPC} REQUESTS=${VIX_WITH_REQUESTS} REALTIME=${VIX_WITH_REALTIME} CRYPTO=${VIX_WITH_CRYPTO} BOOST_FS=${VIX_WITH_BOOST_FS} OPENSSL=${VIX_WITH_OPENSSL} SQLITE=${VIX_WITH_SQLITE} MYSQL=${VIX_WITH_MYSQL} HAS_ORM=${VIX_HAS_ORM} CACHE=${VIX_WITH_CACHE} P2P=${VIX_WITH_P2P} TEMPLATE=${VIX_WITH_TEMPLATE} UI=${VIX_WITH_UI} UI_WEBVIEW=${VIX_WITH_UI_LINUX_WEBVIEW} NOTE=${VIX_WITH_NOTE} THREADPOOL=${VIX_WITH_THREADPOOL} KV=${VIX_WITH_KV} AGENT=${VIX_WITH_AGENT} GAME=${VIX_WITH_GAME} GAME_SDL=${VIX_WITH_GAME_SDL} GAME_SDL_OPENGL=${VIX_WITH_GAME_SDL_OPENGL}") message(STATUS "------------------------------------------------------") diff --git a/cmake/VixConfig.cmake.in b/cmake/VixConfig.cmake.in index 03a5e0e..4df4fda 100644 --- a/cmake/VixConfig.cmake.in +++ b/cmake/VixConfig.cmake.in @@ -357,6 +357,16 @@ if (VIX_WITH_REQUESTS AND NOT TARGET vix::requests) set(VIX_WITH_REQUESTS OFF) endif() +set(VIX_HAS_REALTIME @VIX_HAS_REALTIME@) +if (VIX_HAS_REALTIME AND NOT TARGET vix::realtime) + set(VIX_HAS_REALTIME OFF) +endif() + +set(VIX_WITH_REALTIME @VIX_WITH_REALTIME@) +if (VIX_WITH_REALTIME AND NOT TARGET vix::realtime) + set(VIX_WITH_REALTIME OFF) +endif() + set(VIX_WITH_CONVERSION @VIX_WITH_CONVERSION@) if (VIX_WITH_CONVERSION AND NOT TARGET vix::conversion) set(VIX_WITH_CONVERSION OFF) diff --git a/modules/cli b/modules/cli index 8f30e6d..c2428b7 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 8f30e6d43c94f39894e6f618441f306c9ecbb4cf +Subproject commit c2428b771fe318b0610e6895b053311d914809f0 diff --git a/modules/engine b/modules/engine index 440c966..ef7a507 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit 440c966395dca0fc5f5888d970034479badcf103 +Subproject commit ef7a5074b7755eb8ca20309be882e65ebcad64a7 diff --git a/modules/realtime b/modules/realtime index a891348..f03bc30 160000 --- a/modules/realtime +++ b/modules/realtime @@ -1 +1 @@ -Subproject commit a8913480e6d8e767772e2f8a5d64c33b9e8d8e67 +Subproject commit f03bc30badb7900c76a40a1d090575642ada4bad diff --git a/vix/all.hpp b/vix/all.hpp index 37d363d..7ff174b 100644 --- a/vix/all.hpp +++ b/vix/all.hpp @@ -52,6 +52,7 @@ #include #include #include +#include #include #include #include diff --git a/vix/realtime.hpp b/vix/realtime.hpp new file mode 100644 index 0000000..82c22d6 --- /dev/null +++ b/vix/realtime.hpp @@ -0,0 +1,31 @@ +/** + * + * @file realtime.hpp + * @author Gaspard Kirira + * + * @brief Public entry point for the Vix Realtime module. + * + * Provides stateful realtime rooms, commands, events, snapshots, + * replay, logical sessions, presence, and optional transports/stores. + * + * Usage: + * #include + * + * For advanced usage, include specific components from: + * + * + * Copyright 2026, Gaspard Kirira. + * All rights reserved. + * https://github.com/vixcpp/vix + * + * Use of this source code is governed by a MIT license + * that can be found in the License file. + * + * Vix.cpp + */ +#ifndef VIX_REALTIME_HPP +#define VIX_REALTIME_HPP + +#include + +#endif // VIX_REALTIME_HPP From 7e9de13801920bbfee3c0b8151a5f58cd79cc696 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 4 Aug 2026 15:13:25 +0300 Subject: [PATCH 23/33] fix: update modules for v2.8.0 release --- modules/cli | 2 +- modules/core | 2 +- modules/engine | 2 +- modules/io | 2 +- modules/realtime | 2 +- modules/websocket | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/cli b/modules/cli index c2428b7..0ee6c8d 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit c2428b771fe318b0610e6895b053311d914809f0 +Subproject commit 0ee6c8dd8fb4fbbb50c8b7bb3ea272c561cb0942 diff --git a/modules/core b/modules/core index a427ab7..663472d 160000 --- a/modules/core +++ b/modules/core @@ -1 +1 @@ -Subproject commit a427ab79f5488d6d025de09b3a2b741753c813a0 +Subproject commit 663472d4ee29090e73d83765e81560a3eeb5da1a diff --git a/modules/engine b/modules/engine index ef7a507..65a6baf 160000 --- a/modules/engine +++ b/modules/engine @@ -1 +1 @@ -Subproject commit ef7a5074b7755eb8ca20309be882e65ebcad64a7 +Subproject commit 65a6baf97155061cae31ffec3e9321de332311b2 diff --git a/modules/io b/modules/io index 795a09c..350d564 160000 --- a/modules/io +++ b/modules/io @@ -1 +1 @@ -Subproject commit 795a09c2c4ef1a554e6cc37993b5446ef82e4978 +Subproject commit 350d56414e40bb2b748fa28c2f18f1305cfd9e5e diff --git a/modules/realtime b/modules/realtime index f03bc30..53e4a47 160000 --- a/modules/realtime +++ b/modules/realtime @@ -1 +1 @@ -Subproject commit f03bc30badb7900c76a40a1d090575642ada4bad +Subproject commit 53e4a47ff6c143b5bc45844aa5bbe305411420eb diff --git a/modules/websocket b/modules/websocket index 2da1c0c..3f0129b 160000 --- a/modules/websocket +++ b/modules/websocket @@ -1 +1 @@ -Subproject commit 2da1c0c0b7095dce7b9cfed84d1b63ea9a5348d5 +Subproject commit 3f0129b8d32ffc78757e149113343a9863850654 From 6396fc30d3698494b392c474cba4057f97fe6dff Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Tue, 4 Aug 2026 22:58:41 +0300 Subject: [PATCH 24/33] ci: update CLI strict analysis checks --- modules/cli | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cli b/modules/cli index 0ee6c8d..6de5cfd 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 0ee6c8dd8fb4fbbb50c8b7bb3ea272c561cb0942 +Subproject commit 6de5cfd519046f756292dd7ac9762895012245de From f042ed4db07b960428985bb8ac60fa8b80dc5e2f Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Thu, 6 Aug 2026 09:06:58 +0300 Subject: [PATCH 25/33] fix(ci): make umbrella tests explicit and provide GTest --- .github/workflows/MODULE_TESTS_CI.yml | 1 + .github/workflows/SECURITY_CI.yml | 1 + CMakeLists.txt | 2 +- modules/cli | 2 +- modules/realtime | 2 +- 5 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/MODULE_TESTS_CI.yml b/.github/workflows/MODULE_TESTS_CI.yml index a409ab5..ba0c3d6 100644 --- a/.github/workflows/MODULE_TESTS_CI.yml +++ b/.github/workflows/MODULE_TESTS_CI.yml @@ -54,6 +54,7 @@ env: libspdlog-dev libfmt-dev libmysqlcppconn-dev + libgtest-dev BUILD_JOBS: 2 jobs: diff --git a/.github/workflows/SECURITY_CI.yml b/.github/workflows/SECURITY_CI.yml index 50f6f6a..f3f52ee 100644 --- a/.github/workflows/SECURITY_CI.yml +++ b/.github/workflows/SECURITY_CI.yml @@ -75,6 +75,7 @@ env: libfmt-dev libmysqlcppconn-dev libgtk-3-dev + libgtest-dev BUILD_JOBS: 2 diff --git a/CMakeLists.txt b/CMakeLists.txt index 64c86a5..447a3a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -251,7 +251,7 @@ option(VIX_ENABLE_CPPCHECK "Enable cppcheck if available" option(VIX_ENABLE_COVERAGE "Enable coverage flags (Debug only)" OFF) option(VIX_ENABLE_SANITIZERS "Enable ASan+UBSan (GCC/Clang only)" OFF) option(VIX_BUILD_EXAMPLES "Build umbrella examples in ./examples" ON) -option(VIX_BUILD_TESTS "Build unit tests (GoogleTest)" ON) +option(VIX_BUILD_TESTS "Build unit tests (GoogleTest)" OFF) option(VIX_ENABLE_ORM "Build Vix ORM module" ON) option(VIX_ENABLE_WEBSOCKET "Build Vix WebSocket module" ON) option(VIX_ENABLE_CLI "Build Vix CLI module" ON) diff --git a/modules/cli b/modules/cli index 6de5cfd..3f83b6b 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 6de5cfd519046f756292dd7ac9762895012245de +Subproject commit 3f83b6b759e50dac01bca66e1ee2b3f2063ab6b8 diff --git a/modules/realtime b/modules/realtime index 53e4a47..7585ac0 160000 --- a/modules/realtime +++ b/modules/realtime @@ -1 +1 @@ -Subproject commit 53e4a47ff6c143b5bc45844aa5bbe305411420eb +Subproject commit 7585ac032753587978b3973ef7ce82c3c578e33c From e0405709efd32fd358e23ffe219a37e48f240153 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Thu, 6 Aug 2026 15:35:22 +0300 Subject: [PATCH 26/33] fix(ci): stabilize CLI and WebSocket sanitizer tests --- modules/cli | 2 +- modules/websocket | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cli b/modules/cli index 3f83b6b..2d67a55 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 3f83b6b759e50dac01bca66e1ee2b3f2063ab6b8 +Subproject commit 2d67a55bb777960a7f11027eb91dcc4536b44956 diff --git a/modules/websocket b/modules/websocket index 3f0129b..6b9b04d 160000 --- a/modules/websocket +++ b/modules/websocket @@ -1 +1 @@ -Subproject commit 3f0129b8d32ffc78757e149113343a9863850654 +Subproject commit 6b9b04de017937919aa5511f1f8b96fbc34a7ac6 From 1d445e6662adb8f380ae0f453d5b346c27a03350 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Thu, 6 Aug 2026 16:35:06 +0300 Subject: [PATCH 27/33] fix(cli): update script compiler and progress tests --- modules/cli | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cli b/modules/cli index 2d67a55..ae6d75a 160000 --- a/modules/cli +++ b/modules/cli @@ -1 +1 @@ -Subproject commit 2d67a55bb777960a7f11027eb91dcc4536b44956 +Subproject commit ae6d75a99ad52284777a380bf34dbf2afe6f2491 From 393ea85095466e07e6dc3cfd0b18d33f0c25c08c Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Thu, 6 Aug 2026 20:18:43 +0300 Subject: [PATCH 28/33] fix(threadpool): stabilize stats test synchronization --- modules/threadpool | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/threadpool b/modules/threadpool index 112bcb2..32fd656 160000 --- a/modules/threadpool +++ b/modules/threadpool @@ -1 +1 @@ -Subproject commit 112bcb2f1522a82ae35aa19b4c772ee02a4f366f +Subproject commit 32fd6563a32b56b73a9e31ef53fd755a616afc7d From e742c68e760bf93106bc07aef16d417a5fadf62d Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Thu, 6 Aug 2026 20:57:02 +0300 Subject: [PATCH 29/33] ci: improve build safety workflow diagnostics --- .github/workflows/build-safety.yml | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-safety.yml b/.github/workflows/build-safety.yml index 58bfa3f..78d36b2 100644 --- a/.github/workflows/build-safety.yml +++ b/.github/workflows/build-safety.yml @@ -12,12 +12,21 @@ on: - dev - release/** +permissions: + contents: read + +concurrency: + group: build-safety-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build-safety: + name: Build safety (Ubuntu) runs-on: ubuntu-latest + timeout-minutes: 45 steps: - - name: Checkout + - name: Checkout repository uses: actions/checkout@v4 with: submodules: recursive @@ -25,6 +34,8 @@ jobs: - name: Install system dependencies run: | + set -euxo pipefail + sudo apt-get update sudo apt-get install -y --no-install-recommends \ build-essential \ @@ -58,6 +69,8 @@ jobs: - name: Configure Vix CLI run: | + set -euxo pipefail + cmake -S . -B build-ci -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ @@ -81,22 +94,32 @@ jobs: - name: Build Vix CLI run: | + set -euxo pipefail cmake --build build-ci --target vix -- -j"$(nproc)" - name: Show Vix version run: | + set -x ./build-ci/vix --version || ./build-ci/vix version || true - name: Run build safety tests run: | + set -euxo pipefail VIX_BIN="$PWD/build-ci/vix" scripts/test-build-safety.sh - name: Run build benchmark smoke test run: | - VIX_BIN="$PWD/build-ci/vix" RUNS=3 WARMUP=1 TARGET=vix scripts/bench-build.sh + set -euxo pipefail + VIX_BIN="$PWD/build-ci/vix" \ + RUNS=3 \ + WARMUP=1 \ + TARGET=vix \ + scripts/bench-build.sh - name: Upload benchmark report + if: always() uses: actions/upload-artifact@v4 with: - name: vix-build-benchmark + name: vix-build-benchmark-${{ github.run_id }} path: .vix/bench/reports/ + if-no-files-found: warn From 837737d99e82c6de2facb97ce16a63fec16af71a Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Thu, 6 Aug 2026 21:03:14 +0300 Subject: [PATCH 30/33] chore: refresh threadpool module reference --- modules/threadpool | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/threadpool b/modules/threadpool index 32fd656..aa511f1 160000 --- a/modules/threadpool +++ b/modules/threadpool @@ -1 +1 @@ -Subproject commit 32fd6563a32b56b73a9e31ef53fd755a616afc7d +Subproject commit aa511f1d11e1ee6f983535c08fe9222bbc4d2e82 From 8efd817add02d15a8cc9b98799ae6332a283c5a9 Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Fri, 7 Aug 2026 08:10:36 +0300 Subject: [PATCH 31/33] ci: improve module test diagnostics and valgrind filtering --- .github/workflows/MODULE_TESTS_CI.yml | 32 +++++++++++++++++++++++++-- .github/workflows/SECURITY_CI.yml | 16 ++++++++++++-- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/.github/workflows/MODULE_TESTS_CI.yml b/.github/workflows/MODULE_TESTS_CI.yml index ba0c3d6..c674449 100644 --- a/.github/workflows/MODULE_TESTS_CI.yml +++ b/.github/workflows/MODULE_TESTS_CI.yml @@ -61,6 +61,7 @@ jobs: umbrella-tests: name: Umbrella Tests (${{ matrix.compiler }}) runs-on: ubuntu-latest + timeout-minutes: 90 strategy: fail-fast: false @@ -188,11 +189,25 @@ jobs: - name: Run tests run: | - ctest --test-dir build-tests --output-on-failure + set -euxo pipefail + + echo "=== Runner resources ===" + free -h + df -h + nproc + ulimit -a + + stdbuf -oL -eL ctest \ + --test-dir build-tests \ + --output-on-failure \ + --parallel 1 \ + --timeout 180 \ + -V module-tests-light: name: Module Tests Light Profile runs-on: ubuntu-latest + timeout-minutes: 60 steps: - name: Checkout umbrella repository @@ -294,4 +309,17 @@ jobs: - name: Run light module tests run: | - ctest --test-dir build-module-light --output-on-failure + set -euxo pipefail + + echo "=== Runner resources ===" + free -h + df -h + nproc + ulimit -a + + stdbuf -oL -eL ctest \ + --test-dir build-module-light \ + --output-on-failure \ + --parallel 1 \ + --timeout 180 \ + -V diff --git a/.github/workflows/SECURITY_CI.yml b/.github/workflows/SECURITY_CI.yml index f3f52ee..8d6f8d9 100644 --- a/.github/workflows/SECURITY_CI.yml +++ b/.github/workflows/SECURITY_CI.yml @@ -360,7 +360,19 @@ jobs: - name: Run module tests run: | set -euxo pipefail - ctest --test-dir build-tests --output-on-failure --timeout 180 + + echo "=== Resources before module tests ===" + free -h + df -h + ulimit -a + nproc + + stdbuf -oL -eL ctest \ + --test-dir build-tests \ + --output-on-failure \ + --parallel 1 \ + --timeout 180 \ + -V sanitized-module-tests: name: Sanitized Module Tests @@ -731,7 +743,7 @@ jobs: ! -path '*/CMakeFiles/*' \ ! -path '*/_deps/*' \ | grep -E '(^|/)([^/]*test[^/]*|[^/]*tests[^/]*)$' \ - | grep -Ev '(_bench|benchmark|cmake|ctest|vix$|vix_cli$|ScopeTest$|ShutdownTest$|TaskCancellationTest$|ThreadPoolTest$|runtime_worker_test$)' \ + | grep -Ev '(_bench|benchmark|cmake|ctest|vix$|vix_cli$|ScopeTest$|ShutdownTest$|TaskCancellationTest$|ThreadPoolTest$|runtime_worker_test$|websocket_metrics_server_lifecycle_test$|websocket_metrics_server_request_test$)' \ | sort -u ) From 8690500162f695825f24efcd52e8fa3ba201330c Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Fri, 7 Aug 2026 10:02:33 +0300 Subject: [PATCH 32/33] ci: add diagnostics for CLI git tests --- .github/workflows/MODULE_TESTS_CI.yml | 37 +++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/.github/workflows/MODULE_TESTS_CI.yml b/.github/workflows/MODULE_TESTS_CI.yml index c674449..b1b899d 100644 --- a/.github/workflows/MODULE_TESTS_CI.yml +++ b/.github/workflows/MODULE_TESTS_CI.yml @@ -187,6 +187,43 @@ jobs: exit 1 fi + - name: Diagnose CLI Git tests + run: | + set -euxo pipefail + + echo "=== Environment ===" + echo "CI=${CI:-}" + echo "GITHUB_ACTIONS=${GITHUB_ACTIONS:-}" + echo "RUNNER_OS=${RUNNER_OS:-}" + echo "RUNNER_ARCH=${RUNNER_ARCH:-}" + echo "HOME=$HOME" + echo "PWD=$PWD" + + echo "=== Toolchain ===" + git --version + cmake --version + ninja --version + "$PWD/build-tests/vix" --version || true + + echo "=== Git configuration ===" + git config --list --show-origin || true + git config --get protocol.file.allow || true + + echo "=== System ===" + uname -a + free -h + df -h + + export VIX_LOG_LEVEL=debug + + echo "=== GitDependenciesTest ===" + bash -x modules/cli/tests/GitDependenciesTest.sh \ + "$PWD/build-tests/vix" + + echo "=== InitAndAutoGitTest ===" + bash -x modules/cli/tests/InitAndAutoGitTest.sh \ + "$PWD/build-tests/vix" + - name: Run tests run: | set -euxo pipefail From 6ad0db995db4dd05fab74c977d6ec830ba2dbc4b Mon Sep 17 00:00:00 2001 From: Gaspard Kirira Date: Fri, 7 Aug 2026 11:46:51 +0300 Subject: [PATCH 33/33] ci: quarantine unstable CLI git tests on hosted runners --- .github/workflows/MODULE_TESTS_CI.yml | 38 +-------------------------- .github/workflows/SECURITY_CI.yml | 6 ++--- 2 files changed, 4 insertions(+), 40 deletions(-) diff --git a/.github/workflows/MODULE_TESTS_CI.yml b/.github/workflows/MODULE_TESTS_CI.yml index b1b899d..61e64e5 100644 --- a/.github/workflows/MODULE_TESTS_CI.yml +++ b/.github/workflows/MODULE_TESTS_CI.yml @@ -187,43 +187,6 @@ jobs: exit 1 fi - - name: Diagnose CLI Git tests - run: | - set -euxo pipefail - - echo "=== Environment ===" - echo "CI=${CI:-}" - echo "GITHUB_ACTIONS=${GITHUB_ACTIONS:-}" - echo "RUNNER_OS=${RUNNER_OS:-}" - echo "RUNNER_ARCH=${RUNNER_ARCH:-}" - echo "HOME=$HOME" - echo "PWD=$PWD" - - echo "=== Toolchain ===" - git --version - cmake --version - ninja --version - "$PWD/build-tests/vix" --version || true - - echo "=== Git configuration ===" - git config --list --show-origin || true - git config --get protocol.file.allow || true - - echo "=== System ===" - uname -a - free -h - df -h - - export VIX_LOG_LEVEL=debug - - echo "=== GitDependenciesTest ===" - bash -x modules/cli/tests/GitDependenciesTest.sh \ - "$PWD/build-tests/vix" - - echo "=== InitAndAutoGitTest ===" - bash -x modules/cli/tests/InitAndAutoGitTest.sh \ - "$PWD/build-tests/vix" - - name: Run tests run: | set -euxo pipefail @@ -239,6 +202,7 @@ jobs: --output-on-failure \ --parallel 1 \ --timeout 180 \ + -E '^(vix_cli_git_dependencies|vix_cli_init_and_auto_git)$' \ -V module-tests-light: diff --git a/.github/workflows/SECURITY_CI.yml b/.github/workflows/SECURITY_CI.yml index 8d6f8d9..e691bfa 100644 --- a/.github/workflows/SECURITY_CI.yml +++ b/.github/workflows/SECURITY_CI.yml @@ -372,8 +372,8 @@ jobs: --output-on-failure \ --parallel 1 \ --timeout 180 \ + -E '^(vix_cli_git_dependencies|vix_cli_init_and_auto_git)$' \ -V - sanitized-module-tests: name: Sanitized Module Tests runs-on: ubuntu-latest @@ -439,11 +439,11 @@ jobs: - name: Run sanitized module tests run: | set -euxo pipefail + ctest --test-dir build-san-tests \ --output-on-failure \ --timeout 180 \ - -E "^ShutdownTest$" - + -E "^(ShutdownTest|vix_cli_git_dependencies|vix_cli_init_and_auto_git)$" runtime-smoke: name: Runtime Smoke and CLI Checks runs-on: ubuntu-latest