Mizuki Build & Test Architecture¶
1. Overview¶
Mizuki is a polyglot, multi-service system composed of several core services, clients, and external dependencies.
The build system must:
Support Python, C++, and potentially other languages.
Handle compiled external libraries using their native build systems.
Allow clear separation of source, tests, and staging deployment.
Use SCons as the top-level orchestrator, delegating to CMake (or others) for external dependencies.
Provide unit, component, integration, and system testing capabilities.
2. Services and Clients¶
Core Services¶
FileManipulator— Handles file operations.ProjectExplorer— Manages project structures and metadata.EDDI— Specialized domain-specific processing engine.Glotty— Localization and translation service.
Clients¶
TerminalClient— CLI interface for Mizuki.MizukiCockpit— GUI dashboard and control center.
3. External Dependencies¶
External libraries are stored in external/ and built using their native build systems.
Examples:
NATS(messaging middleware) — CMake build.Other libraries to be added as needed.
4. Directory Structure¶
mizuki/
│
├── build/ # All build artifacts
│ ├── scons/ # SCons build cache
│ └── staging/ # "Install" area for testing & packaging
│ └── windows
│ │ └── bin # Here we store the binaries
│ │ └── res # Here we store the resources
│ │ └── cfg # Here we store the configurations
│ └── linux
│ ├── testlibs/ # Build results for testing (pr platform target)
│ │ └── windows/ # One area for each platform
│
│
├── external/ # External libraries
│ ├── lib/
│ ├── include/
│ ├── nats/ # NATS source, built with CMake
│ └── ...
│
├── services/ # Mizuki services
│ ├── FileManipulator/
│ │ ├── src/ # Production source code
│ │ ├── include/ # Public headers
│ │ └── SConscript
│ ├── ProjectExplorer/
│ │ ├── src/
│ │ ├── include/
│ │ └── SConscript
│ ├── EDDI/
│ ├── Glotty/
│ └── ...
│
├── clients/ # Mizuki clients
│ ├── TerminalClient/
│ │ ├── src/
│ │ └── SConscript
│ └── MizukiCockpit/
│
├── tests/ # All tests
│ ├── unit/
│ │ ├── FileManipulator/
│ │ ├── ProjectExplorer/
│ │ └── ...
│ ├── component/
│ │ ├── FileManipulator/
│ │ └── ProjectExplorer/
│ ├── integration/
│ └── system/
│
├── scripts/ # Helper scripts for dev & CI/CD
│ ├── build_all.py
│ ├── run_tests.py
│ ├── deploy_staging.py
│ └── ...
│
└── SConstruct # Top-level build orchestrator
5. Build Strategy¶
5.1 SCons as the Orchestrator¶
The top-level
SConstructcoordinates:Build external dependencies (via native build systems like CMake).
Build each service/client as a library and/or executable.
Install outputs into
build/staging/.
5.2 External Libraries¶
Placed in
external/.Each external library has:
Its own native build invocation (
cmake .. && make).A staging install path inside
build/staging/.
5.3 Services and Clients¶
Core logic built into a library (
libServiceName.aor.so).Service executables link against their own libraries.
Unit/component test binaries also link against the same libraries.
6. Testing Strategy¶
6.1 Test Types¶
Unit tests
Test individual functions/classes. Link directly against the service library with mocks.Component tests
Test a single service with real dependencies (e.g., FileManipulator with real file I/O).Integration tests
Test multiple services working together in a coordinated environment.System tests
Test the entire deployed staging installation as a black box.
6.2 Test Build Model¶
Key principle:
Services are compiled into libraries, which are then linked into:
The service executable (for production)
One or more test executables (for testing)
Example:
libFileManipulator.a
├── file_ops.cpp
├── path_utils.cpp
└── ...
Unit test binary:
test_FileManipulator
Links: libFileManipulator.a + GoogleTest
6.3 Test Execution Model¶
Each service produces:
service_name→ production executable.test_service_name→ test executable for unit/component tests.
Run order for CI/CD:
Build external dependencies.
Build all service libraries.
Build and run all unit tests (fast fail).
Build and run component tests.
Build staging install (
build/staging/).Run integration tests.
Run system tests against staging.
7. Staging Installation¶
The
build/staging/directory mirrors the real installation layout:
build/staging/
├── bin/ # Executables
├── lib/ # Libraries
├── share/ # Resources
└── etc/ # Config files
System tests operate against this staging installation to validate deployment readiness.
This also serves as the packaging source for release builds.
8. Tooling & Frameworks¶
Build systems:
Top-level: SCons
External deps: Native (CMake, Make, etc.)
Test frameworks:
GoogleTest for C++ tests.
pytest for Python components.
Orchestration:
scripts/run_tests.pyto run all test levels in order.scripts/build_all.pyto build everything from scratch.
9. Benefits of This Approach¶
Clean separation of production code and tests.
Unified top-level build via SCons.
Native builds for external dependencies without rewriting.
Reproducible staging area for system tests and packaging.
Incremental builds possible for faster development cycles.