ci(coverage): enable full-ecosystem coverage build#987
Conversation
The coverage workflow previously disabled BUILD_WITH_LOGGER_SYSTEM, BUILD_WITH_THREAD_SYSTEM and BUILD_WITH_CONTAINER_SYSTEM, which compiled out large sections of code that depend on these integrations. The resulting coverage numbers were a structural lower bound rather than a real measurement. Mirror the ecosystem build pattern already used by ci.yml (sanitizer job) to check out and build common_system, thread_system, logger_system and container_system in tier order, then flip the three BUILD_WITH_* flags to ON. BUILD_MESSAGING_BRIDGE is kept OFF because it requires messaging_system headers that are not checked out in CI, matching every other workflow in this repo. Also extend push/pull_request triggers to cover the develop branch so post-merge coverage measurements happen on the integration branch. Relates to #953 (Step 1: fix the measurement).
CI Failure Analysis — Coverage Analysis hangSymptom
Root cause
with no per-test timeout. When a network test hangs on socket I/O (accept loop, connect wait), the job runs until GitHub's default 6-hour runner cap. The Comparable jobs in this repo already set timeouts: Fix plan
NextCancel the stuck run, apply the fix on this branch, push, and re-verify. |
Coverage Analysis had no timeout at any level, letting a hung network test in ctest run until the 6-hour runner cap. Added job-level timeout-minutes: 60 (matches ci.yml build jobs) and ctest --timeout 300 to convert per-test hangs into visible TIMEOUT failures.
Coverage Report
Coverage DetailsFull HTML report is available as a build artifact. |
Summary
Addresses Step 1 of epic #953 — "Fix the measurement (prerequisite)".
The coverage workflow currently disables
BUILD_WITH_LOGGER_SYSTEM,BUILD_WITH_THREAD_SYSTEM, andBUILD_WITH_CONTAINER_SYSTEM, so large sections of protocol code that depend on those integrations are compiled out. The resulting 62.4% line coverage recorded on the epic is a structural lower bound, not a real measurement.What changed
thread_system,logger_system, andcontainer_systemalongsidecommon_system.Build common_system dependencystep with a consolidatedBuild ecosystem dependenciesstep that builds all four in tier order. The pattern mirrorsci.yml's sanitizer job (L269-410), minus sanitizer-specific compiler flags.BUILD_WITH_LOGGER_SYSTEM,BUILD_WITH_THREAD_SYSTEM,BUILD_WITH_CONTAINER_SYSTEMfromOFFtoONin the coverage CMake configuration.pushandpull_requesttriggers to cover thedevelopbranch so post-merge coverage runs on the integration branch without waiting for a release cut.Deviation from epic body
Epic #953 asks for
BUILD_MESSAGING_BRIDGE=ONas well. This PR keeps itOFFbecause enabling it compilessrc/integration/messaging_bridge.cpp, which depends onmessaging_systemheaders that no CI workflow in this repo currently checks out. Every other workflow (ci.yml,sanitizers.yml,performance-regression.yml) consistently keeps this flagOFFfor the same reason. Enabling it would require first adding messaging_system checkout and install to every dependent workflow — a separate scope.I'll add a follow-up comment to #953 documenting this.
Test plan
develop(coverage workflow will trigger because of the new trigger addition).develop.Out of scope
BUILD_MESSAGING_BRIDGE— separate dependency work as noted above.Relates to #953