Skip to content

ci: surface code coverage on pull requests#771

Merged
leoparente merged 7 commits into
developfrom
chore/coverage-on-prs
May 9, 2026
Merged

ci: surface code coverage on pull requests#771
leoparente merged 7 commits into
developfrom
chore/coverage-on-prs

Conversation

@leoparente
Copy link
Copy Markdown
Contributor

Phase 1 of the coverage initiative — make coverage visible in PRs without enforcing anything yet. Pure infra; no production code touched.

Changes

  • `.github/workflows/build_debug.yml`: add `pull_request:` trigger to the workflow so the existing `code-coverage` job runs on PRs targeting `develop`. The `build` and `package` Docker-pushing jobs stay push-only via `if: github.event_name != 'pull_request'` — we don't want PRs pushing debug images to Docker Hub.

  • `.codecov.yml` (new): both project and patch status are `informational: true`, so the Codecov bot posts a comment in the PR with diff/flags/files but never blocks merge. Phase 3 of the rollout flips both flags to `false` once project coverage reaches 85%. `ignore` covers vendored 3rd-party code, generated protobuf, build artefacts, and test sources themselves.

  • `CMakeLists.txt`: drop `cmd/` from the `setup_target_for_coverage_lcov` EXCLUDE list. The pktvisord/pktvisor-reader entry points were excluded but contain real logic worth tracking. `3rd/`, `libs/*`, and the build directory stay excluded.

What this gives us

  1. Every PR targeting `develop` now gets a Codecov bot comment with project + patch coverage.
  2. The first run on this PR establishes the baseline coverage number — we need that before Phase 2 can plan toward the 85% target.
  3. No status check blocks merging.

Test plan

  • CI on this PR: `code-coverage` job runs, uploads `build/coverage.info` to Codecov
  • Codecov bot posts a comment on this PR with the project coverage figure
  • `build` and `package` jobs are skipped on this PR (no Docker push)
  • After merge, the same coverage report is published for `develop` via the existing `push` trigger

Three small infra changes; no production code touched.

- .github/workflows/build_debug.yml: add `pull_request:` trigger so the
  existing code-coverage job runs on PRs targeting develop. Gate the
  Docker `build` and `package` jobs with `if: github.event_name !=
  'pull_request'` so they remain push-only (we don't want PR runs
  pushing debug images to Docker Hub).
- .codecov.yml: new file. Configure both project and patch status as
  informational so the Codecov bot posts a PR comment with the diff
  but never blocks merge. Once project coverage hits 85% we flip both
  to `informational: false`. Ignores 3rd-party, build artefacts,
  generated protobuf, and test sources themselves.
- CMakeLists.txt: drop `cmd/*` from the lcov EXCLUDE list so the
  pktvisord/pktvisor-reader entry-point logic shows up in the report
  (per discussion). `3rd/*`, `libs/*`, and the build dir stay excluded.

The first PR run will give us the baseline coverage number, which
informs the Phase 2 push toward 85%.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@leoparente
Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector
Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Breezy!

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

leoparente and others added 2 commits May 9, 2026 09:49
Mirror the comment-on-PR pattern used in orb-discovery's
device-discovery-lint-tests workflow. Codecov continues to receive
uploads (long-term dashboard) but romeovs/lcov-reporter-action now
also posts a self-contained markdown summary directly into the PR,
showing per-file coverage and diff for changed files.

Pinned to v0.4.0 (commit 87a815f) per repo convention. Adds
pull-requests:write to the code-coverage job's permissions so the
action can post/update the comment with the default GITHUB_TOKEN.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Belt-and-suspenders: pull-requests:write should cover PR comment posting
per GitHub's docs, but some comment-posting actions hit the
issues.createComment endpoint directly (since PR conversation comments
share the issue API path) and only check the issues:write scope. Granting
both avoids a 403 surprise.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 9, 2026

Coverage after merging chore/coverage-on-prs into develop will be

73.05%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
/usr/include/c++/13
   array75.68%100%76.19%75%227, 231–232, 235
   atomic90.48%100%87.50%92.31%833
   bit92.86%100%100%91.67%201
   bitset97.70%100%97.73%97.67%1121, 823
   cmath76.92%100%80%75%1225–1226
   condition_variable75.68%100%58.33%84%102, 104–106
   functional25.71%100%40%15%436, 439, 455–456, 504, 506–508, 577–579, 582, 589, 591, 593, 881, 885
   initializer_list83.87%100%82.56%100%
   iomanip55.17%100%50%56%167–168, 227–228, 382, 384, 386–387, 389–390, 392
   limits66.67%100%66.67%66.67%1135, 461
   mutex45.24%100%50%43.33%124, 800, 831, 834, 836–837, 839, 842–844, 896, 899–900, 904, 907–909
   new42.86%100%33.33%50%180, 58
   optional80%100%75.09%91.60%1005, 101–102, 104–105, 110–111, 177, 853, 997
   shared_mutex93.83%100%100%91.67%198, 235, 821, 857, 859
   string_view80.82%100%75%83.02%132–134, 254, 256–257, 578, 580, 73
   tuple68.07%100%67.28%97.70%84–85
   type_traits100%100%100%100%
   typeinfo0%100%0%0%103–104, 193, 195–196, 198–199, 206
   utility100%100%100%100%
   variant83.77%100%80.97%87.77%1040, 1050, 1334–1335, 1338, 1348–1349, 1352, 1354–1355, 1357–1358, 1716, 1826, 1834–1835, 1839–1840, 1856, 494, 671, 725, 740
/usr/include/c++/13/bits
   alloc_traits.h93.33%100%100%93.33%722
   allocated_ptr.h94.03%100%93.86%100%
   allocator.h66.67%100%100%66.67%217, 223
   atomic_base.h91.89%100%76.92%100%
   basic_string.h82.69%100%82.19%82.86%2073, 267, 3541, 3590, 3595, 3681, 3683, 3788, 3791, 3843, 3845, 3856, 3858, 3870, 3873, 389, 3911, 3914, 3994, 3997, 400, 4135–4137, 4189, 4194–4200, 4212, 428, 438, 646
   basic_string.tcc89.69%100%85%90.91%144, 151, 153–154, 335, 339–340
   char_traits.h61.43%100%73.33%58.18%136–137, 199, 202–205, 226, 257, 366, 369–370, 381–386, 397, 427, 429–430, 435
   charconv.h100%100%100%100%
   chrono.h79.19%100%75.17%87.50%1129, 1135, 1373–1374, 1384–1385, 412, 862, 864
   cpp_type_traits.h37.23%100%35.87%100%
   deque.tcc43.84%100%54.41%34.62%145–146, 148, 176, 484, 492–493, 496–497, 501, 507, 509, 516, 532, 560, 563–566, 568, 864–865, 875–876, 931, 934–936, 939, 941–946, 949–951, 955–956, 959–963, 965, 967–968, 971–973
   enable_special_members.h100%100%100%100%
   exception.h33.33%100%33.33%33.33%65, 67
   exception_ptr.h27.27%100%28.57%26.92%123–125, 140, 142–143, 162–163, 195–197, 199–201, 221, 223–226
   fs_path.h100%100%100%100%
   functional_hash.h100%100%100%100%
   hashtable.h67.59%100%75.92%57.14%1176, 1181–1182, 1198–1199, 1258, 1262–1265, 1268–1271, 1274–1277, 1280, 1282, 1286–1287, 1289, 1334, 1336, 1339–1342, 1344–1346, 1390, 1392–1395, 1421, 1425–1426, 1428–1433, 1436–1437, 1440–1443, 1446–1447, 1805, 1810–1812, 1814, 1821–1822, 1824, 1832, 1837–1839, 1841, 1848–1849, 1851, 1926, 1938, 2094, 2102, 2116, 2123–2124, 2126, 2128, 2130–2132, 2139, 2144, 2146, 2148–2150, 2153–2155, 2158, 2196, 2202, 2204, 2206–2207, 2209–2211, 2215–2219, 2221, 2224–2226, 2229–2230, 2232–2234, 2241–2243, 2262, 2290, 2298, 2301–2302, 2305, 2307–2309, 2376, 2384–2385, 2388–2390, 2393, 2405, 2413, 2415–2417, 2420–2421, 2425–2426, 2429–2431, 2433, 2442–2444, 2446, 2449, 2452–2455, 2457, 2459–2465, 2473, 2478–2481, 2483, 2485–2488, 2492–2498, 2500–2506, 2509–2512, 2536, 2540, 2542, 2544, 2546–2547, 2551–2552, 2567, 2571–2572, 2625, 2629–2635, 2637, 2639, 2641, 2643, 2648–2649, 2656, 2660, 2664, 2667–2670, 2672, 2675, 2677–2682, 2686–2687, 2690–2692, 2695, 2698, 2700–2701, 2704–2707, 438–439, 584, 589, 592–593, 639–640, 643–644, 732–733, 867–868, 922, 927–928
   hashtable_policy.h77.88%100%77.27%80.17%1196, 1198–1200, 1327–1328, 1696, 1698, 1744, 1748–1749, 2000, 2002–2003, 206–210, 213, 216, 218–219, 221, 455, 457–459, 506, 508–510, 557–558, 579–580, 789, 798, 822, 843, 849, 89–90, 929, 931–933
   invoke.h30.94%100%29.90%83.33%71, 74
   ios_base.h63.89%100%65%63.46%1001, 1003–1004, 1009, 1011–1012, 1075, 1077–1078, 170–171, 182–183, 662–663, 689, 691–693
   list.tcc81.48%100%64.29%100%
   locale_classes.tcc83.33%100%100%80%140, 202
   locale_facets.h60.87%100%60%61.11%810–811, 880, 882–885
   move.h55.74%100%55.50%100%
   new_allocator.h88.12%100%88.26%80%138–140
   postypes.h100%100%100%100%
   predefined_ops.h70.82%100%67.21%94.03%187–189,

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 9, 2026

Coverage after merging chore/coverage-on-prs into develop will be

73.07%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
/usr/include/c++/13
   array75.68%100%76.19%75%227, 231–232, 235
   atomic90.48%100%87.50%92.31%833
   bit92.86%100%100%91.67%201
   bitset97.70%100%97.73%97.67%1121, 823
   cmath76.92%100%80%75%1225–1226
   condition_variable75.68%100%58.33%84%102, 104–106
   functional25.71%100%40%15%436, 439, 455–456, 504, 506–508, 577–579, 582, 589, 591, 593, 881, 885
   initializer_list83.87%100%82.56%100%
   iomanip55.17%100%50%56%167–168, 227–228, 382, 384, 386–387, 389–390, 392
   limits66.67%100%66.67%66.67%1135, 461
   mutex45.24%100%50%43.33%124, 800, 831, 834, 836–837, 839, 842–844, 896, 899–900, 904, 907–909
   new42.86%100%33.33%50%180, 58
   optional80%100%75.09%91.60%1005, 101–102, 104–105, 110–111, 177, 853, 997
   shared_mutex93.83%100%100%91.67%198, 235, 821, 857, 859
   string_view80.82%100%75%83.02%132–134, 254, 256–257, 578, 580, 73
   tuple68.07%100%67.28%97.70%84–85
   type_traits100%100%100%100%
   typeinfo0%100%0%0%103–104, 193, 195–196, 198–199, 206
   utility100%100%100%100%
   variant83.77%100%80.97%87.77%1040, 1050, 1334–1335, 1338, 1348–1349, 1352, 1354–1355, 1357–1358, 1716, 1826, 1834–1835, 1839–1840, 1856, 494, 671, 725, 740
/usr/include/c++/13/bits
   alloc_traits.h93.33%100%100%93.33%722
   allocated_ptr.h94.03%100%93.86%100%
   allocator.h66.67%100%100%66.67%217, 223
   atomic_base.h91.89%100%76.92%100%
   basic_string.h82.69%100%82.19%82.86%2073, 267, 3541, 3590, 3595, 3681, 3683, 3788, 3791, 3843, 3845, 3856, 3858, 3870, 3873, 389, 3911, 3914, 3994, 3997, 400, 4135–4137, 4189, 4194–4200, 4212, 428, 438, 646
   basic_string.tcc89.69%100%85%90.91%144, 151, 153–154, 335, 339–340
   char_traits.h61.43%100%73.33%58.18%136–137, 199, 202–205, 226, 257, 366, 369–370, 381–386, 397, 427, 429–430, 435
   charconv.h100%100%100%100%
   chrono.h79.19%100%75.17%87.50%1129, 1135, 1373–1374, 1384–1385, 412, 862, 864
   cpp_type_traits.h37.23%100%35.87%100%
   deque.tcc43.84%100%54.41%34.62%145–146, 148, 176, 484, 492–493, 496–497, 501, 507, 509, 516, 532, 560, 563–566, 568, 864–865, 875–876, 931, 934–936, 939, 941–946, 949–951, 955–956, 959–963, 965, 967–968, 971–973
   enable_special_members.h100%100%100%100%
   exception.h33.33%100%33.33%33.33%65, 67
   exception_ptr.h27.27%100%28.57%26.92%123–125, 140, 142–143, 162–163, 195–197, 199–201, 221, 223–226
   fs_path.h100%100%100%100%
   functional_hash.h100%100%100%100%
   hashtable.h67.59%100%75.92%57.14%1176, 1181–1182, 1198–1199, 1258, 1262–1265, 1268–1271, 1274–1277, 1280, 1282, 1286–1287, 1289, 1334, 1336, 1339–1342, 1344–1346, 1390, 1392–1395, 1421, 1425–1426, 1428–1433, 1436–1437, 1440–1443, 1446–1447, 1805, 1810–1812, 1814, 1821–1822, 1824, 1832, 1837–1839, 1841, 1848–1849, 1851, 1926, 1938, 2094, 2102, 2116, 2123–2124, 2126, 2128, 2130–2132, 2139, 2144, 2146, 2148–2150, 2153–2155, 2158, 2196, 2202, 2204, 2206–2207, 2209–2211, 2215–2219, 2221, 2224–2226, 2229–2230, 2232–2234, 2241–2243, 2262, 2290, 2298, 2301–2302, 2305, 2307–2309, 2376, 2384–2385, 2388–2390, 2393, 2405, 2413, 2415–2417, 2420–2421, 2425–2426, 2429–2431, 2433, 2442–2444, 2446, 2449, 2452–2455, 2457, 2459–2465, 2473, 2478–2481, 2483, 2485–2488, 2492–2498, 2500–2506, 2509–2512, 2536, 2540, 2542, 2544, 2546–2547, 2551–2552, 2567, 2571–2572, 2625, 2629–2635, 2637, 2639, 2641, 2643, 2648–2649, 2656, 2660, 2664, 2667–2670, 2672, 2675, 2677–2682, 2686–2687, 2690–2692, 2695, 2698, 2700–2701, 2704–2707, 438–439, 584, 589, 592–593, 639–640, 643–644, 732–733, 867–868, 922, 927–928
   hashtable_policy.h77.88%100%77.27%80.17%1196, 1198–1200, 1327–1328, 1696, 1698, 1744, 1748–1749, 2000, 2002–2003, 206–210, 213, 216, 218–219, 221, 455, 457–459, 506, 508–510, 557–558, 579–580, 789, 798, 822, 843, 849, 89–90, 929, 931–933
   invoke.h30.94%100%29.90%83.33%71, 74
   ios_base.h63.89%100%65%63.46%1001, 1003–1004, 1009, 1011–1012, 1075, 1077–1078, 170–171, 182–183, 662–663, 689, 691–693
   list.tcc81.48%100%64.29%100%
   locale_classes.tcc83.33%100%100%80%140, 202
   locale_facets.h60.87%100%60%61.11%810–811, 880, 882–885
   move.h55.74%100%55.50%100%
   new_allocator.h88.12%100%88.26%80%138–140
   postypes.h100%100%100%100%
   predefined_ops.h70.82%100%67.21%94.03%187–189,

leoparente added 2 commits May 9, 2026 11:29
The previous run leaked /usr/include/c++/13/* and similar system paths
into the coverage report, making the comment dominated by STL noise.
Add /usr/*, /Library/*, */c++/*, and */.conan2/* to the lcov EXCLUDE
list so the report only covers our own source tree.

Also strip explanatory comments from the workflow file.
The previous run hit lcov v2's strict-by-default behaviour on unused
EXCLUDE patterns: '/Library/*' and '*/.conan2/*' don't match any file
on the Ubuntu runner, so lcov bailed with a non-zero exit at the
filter step.

- Drop the two non-Linux patterns from setup_target_for_coverage_lcov.
- Pass `LCOV_ARGS --ignore-errors unused` so any future pattern drift
  becomes a warning rather than a hard failure.
- Picks up the user's CodeCoverage.cmake refresh (Lars Bilke's Jan 2026
  version) which adds -fprofile-update=atomic for concurrent ctest
  runs and proper lcov-version detection — drop-in compatible with our
  existing call site.
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 9, 2026

Coverage after merging chore/coverage-on-prs into develop will be

74.96%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
cmd/pktvisor-reader
   main.cpp0%100%0%0%100, 102–103, 105–109, 113–115, 118–120, 123, 125–127, 129–130, 132–139, 144–165, 167–172, 175–177, 179–184, 186–189, 191, 193–200, 202–211, 213–222, 225, 227–228, 230–232, 234–235, 239–242, 244–245, 247–248, 250, 252–255, 257–258, 54, 56–57, 75, 77–78, 80–81, 83, 85, 87, 90, 92, 94–96, 99
cmd/pktvisord
   CrashpadHandler.h0%100%0%0%21, 23–25, 28–34, 39, 42–43, 45, 47–48, 51, 53–55, 57–58
   main.cpp0%100%0%0%119, 121–122, 182, 184–185, 187–188, 191, 193–195, 197–201, 204, 206–207, 209–213, 215, 217–221, 223–226, 229–232, 235–242, 244, 247–254, 256, 259–262, 264, 267–270, 272, 275–278, 280, 283–284, 286–289, 291, 294–297, 299, 302–305, 308–311, 314–315, 317–320, 322, 325–328, 330, 333–336, 338, 341–344, 346, 349–352, 355–358, 361, 363–366, 369–376, 379, 381–384, 387–390, 393–396, 398, 401–410, 412, 414–415, 417–418, 420, 424, 427–430, 432–433, 435–436, 440–442, 446, 449, 451, 453–455, 457–459, 461–463, 466, 508, 511, 513, 515–516, 518, 520, 522–526, 528–532, 534, 536–538, 540–546, 548, 551, 553–554, 558–562, 565–566, 572–575, 578–585, 589–590, 592, 595, 597, 601–604, 607–613, 615–617, 620–626, 628–630, 632–634, 637, 639–648, 650, 652, 654–659, 663, 666–671, 674–681, 683–684, 686–690, 698–699, 701–706, 708–710, 712, 714, 718, 721–725, 727, 730–732, 735–737, 740–742, 744–749, 751–753, 757–762, 764–766
src
   AbstractManager.h76.71%100%74.19%78.57%105, 58–62, 64–65, 92
   AbstractMetricsManager.h69.42%100%54.90%80.71%276, 279–280, 282–287, 290, 292, 294–295, 298–303, 305, 322, 328, 346, 348, 364, 384, 468, 491–494, 497, 517–520, 523, 539–542, 544–547, 550, 568, 583, 592, 613, 619–621, 624, 636, 660–663, 687–689, 692–695, 697, 700–702, 705
   AbstractModule.cpp100%100%100%100%
   AbstractModule.h88.89%100%77.78%94.44%44
   AbstractPlugin.cpp0%100%0%0%11, 13–15, 17–18, 21–23, 26
   AbstractPlugin.h75%100%71.43%76.47%26–27, 29, 93
   BuiltinPlugins.cpp100%100%100%100%
   Configurable.h97.14%100%96.88%97.22%105, 169, 209
   CoreRegistry.cpp50.54%100%54.55%50%115, 118–119, 122–125, 129–130, 134–135, 139–142, 144, 146–149, 151–153, 41, 49, 54, 56–59, 61–62, 64, 66–69, 71–72, 85, 95
   CoreRegistry.h100%100%100%100%
   CoreServer.cpp0%100%0%0%100–104, 106–113, 116–122, 124–126, 128, 131–137, 139–145, 148–157, 159–165, 167–172, 175–182, 185–189, 19, 190, 193–194, 196–199, 20, 200, 203–209, 21, 210–217, 22, 220–229, 23, 230–235, 237–242, 245–247, 249–259, 26, 260–264, 267–269, 27, 270–272, 275–279, 28, 280–284, 286–287, 289–293, 296–309, 31, 311–316, 319–321, 323–329, 33, 330–339, 34, 340–342, 345–361, 364–369, 37, 370–377, 379–384, 386, 389, 39, 390–393, 395–396, 398–399, 40, 400, 402, 404–419, 42, 421–422, 424–428, 430, 433–434, 436–439, 44, 440–442, 444–447, 449–452, 454–459, 46, 460, 463, 47, 49–51, 53, 55, 57–59, 61, 63–64, 66, 69, 72–75, 78–79, 81–89, 91–92, 95–99
   CoreServer.h0%100%0%0%44, 46, 49, 51–52
   GeoDB.cpp89.58%100%93.33%89.34%111, 12, 14, 197, 244, 250, 257, 267, 303, 382–387, 391–396, 413, 57, 64, 68, 74
   GeoDB.h90.91%100%83.33%93.75%31
   HandlerManager.h74.05%100%83.33%73.11%115, 124–126, 146, 153, 158, 164, 177–178, 180, 191, 195–197, 209–211, 225–227, 55, 58, 64, 66–68, 70–71, 94–95, 99
   HandlerModulePlugin.h100%100%100%100%
   HttpServer.h0%100%0%0%107, 109–110, 112–113, 41–42, 44–47, 50, 52–53, 55, 57, 62, 64, 66, 68–69, 71, 73, 76, 78, 81, 83–84, 86, 88–89, 91, 93–94, 96–97
   InputEventProxy.h73.08%100%62.50%77.78%32, 34, 52, 54
   InputModulePlugin.h100%100%100%100%
   InputStream.h95.16%100%90.91%96.08%89–90
   InputStreamManager.h60.78%100%71.43%59.09%15–16, 18–20, 22, 46, 49, 58, 61, 66, 70–72, 77, 81–83
   IpPort.cpp85%100%75%85.71%25, 31, 5, 7, 77, 8, 82, 88
   IpPort.h100%100%100%100%
   Metrics.cpp100%100%100%100%
   Metrics.h87.06%100%81.29%88.82%223, 225–226,

leoparente added 2 commits May 9, 2026 12:30
romeovs/lcov-reporter-action emits an HTML table row per source file.
With ~99 .gcda files in pktvisor (every handler/input compilation unit
plus their tests), the rendered comment hit ~65402 bytes — right at
GitHub's 65536-char limit. Files alphabetically past src/Metrics.h
(which is exactly where src/handlers/ and src/inputs/ start) got
silently truncated.

Replace the action with a two-step approach:
1. `lcov --summary` + `lcov --list` produce a compact text table
   (~80 chars/file flat) that holds all 99 files comfortably.
2. marocchino/sticky-pull-request-comment posts/updates a single
   comment per PR keyed on the `code-coverage` header.

Codecov upload remains for the dashboard.
Better fit than the lcov-list+sticky-comment combo:
- Single step instead of two (render + post)
- Uploads a browsable HTML report as a PR artifact, so the full
  per-directory drill-down is one click away even if the inline comment
  truncates anything
- update-comment: true keeps PR clean across re-runs
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 9, 2026

Code Coverage

Summary coverage rate:
  lines......: 74.9% (12568 of 16783 lines)
  functions..: 68.9% (1316 of 1909 functions)
  branches...: no data found
Per-file breakdown
                                               |Lines      |Functions|Branches  
Filename                                       |Rate    Num|Rate  Num|Rate   Num
================================================================================
[/home/runner/work/pktvisor/pktvisor/]
cmd/pktvisor-reader/main.cpp                   |    -     0|    -   0|    -    0
cmd/pktvisord/CrashpadHandler.h                |    -     0|    -   0|    -    0
cmd/pktvisord/main.cpp                         |    -     0|    -   0|    -    0
src/AbstractManager.h                          |93.9%    33| 0.0%  23|    -    0
src/AbstractMetricsManager.h                   |96.3%   297| 0.0% 156|    -    0
src/AbstractModule.cpp                         |22.2%     9| 0.0%   2|    -    0
src/AbstractModule.h                           |52.9%    17| 0.0%   7|    -    0
src/AbstractPlugin.cpp                         |    -     0|    -   0|    -    0
src/AbstractPlugin.h                           |53.8%    13| 0.0%   5|    -    0
src/BuiltinPlugins.cpp                         |80.0%    20| 0.0%  16|    -    0
src/Configurable.h                             |30.5%   105| 0.0%  31|    -    0
src/CoreRegistry.cpp                           |26.8%    41| 0.0%   6|    -    0
src/CoreRegistry.h                             |50.0%    16| 0.0%   8|    -    0
src/CoreServer.cpp                             |    -     0|    -   0|    -    0
src/CoreServer.h                               |    -     0|    -   0|    -    0
src/GeoDB.cpp                                  | 7.2%   208| 0.0%  14|    -    0
src/GeoDB.h                                    |40.0%    15| 0.0%   5|    -    0
src/HandlerManager.h                           |13.8%    87| 0.0%  10|    -    0
src/HandlerModulePlugin.h                      |33.3%     9| 0.0%   3|    -    0
src/HttpServer.h                               |    -     0|    -   0|    -    0
src/InputEventProxy.h                          |72.7%    11| 0.0%   4|    -    0
src/InputModulePlugin.h                        |40.0%     5| 0.0%   2|    -    0
src/InputStream.h                              |22.4%    49| 0.0%  10|    -    0
src/InputStreamManager.h                       |26.9%    26| 0.0%   5|    -    0
src/IpPort.cpp                                 | 8.5%    47| 0.0%   3|    -    0
src/IpPort.h                                   |40.0%     5| 0.0%   2|    -    0
src/Metrics.cpp                                |16.5%   103| 0.0%  17|    -    0
src/Metrics.h                                  |34.3%   405| 0.0% 113|    -    0
src/OpenTelemetry.h                            |    -     0|    -   0|    -    0
src/Policies.cpp                               | 4.8%   250| 0.0%  12|    -    0
src/Policies.h                                 |45.2%    31| 0.0%  12|    -    0
src/StreamHandler.h                            | 152%   122| 0.0% 103|    -    0
src/Taps.cpp                                   | 4.8%   124| 0.0%   6|    -    0
src/Taps.h                                     |31.0%    29| 0.0%   9|    -    0
src/ThreadName.h                               |25.0%     4| 0.0%   1|    -    0
src/VisorLRUList.h                             |50.0%    34| 0.0%  17|    -    0
src/handlers/bgp/BgpHandlerModulePlugin.cpp    |    -     0|    -   0|    -    0
src/handlers/bgp/BgpHandlerModulePlugin.h      |33.3%     3| 0.0%   1|    -    0
src/handlers/bgp/BgpStreamHandler.cpp          |16.2%   117| 0.0%  15|    -    0
src/handlers/bgp/BgpStreamHandler.h            |35.3%    34| 0.0%  11|    -    0
src/handlers/bgp/tests/test_bgp_layer.cpp      | 3.2%    31| 0.0%   1|    -    0
src/handlers/bgp/tests/test_json_schema.cpp    | 3.4%    29| 0.0%   1|    -    0
src/handlers/dhcp/DhcpHandlerModulePlugin.cpp  |    -     0|    -   0|    -    0
src/handlers/dhcp/DhcpHandlerModulePlugin.h    |33.3%     3| 0.0%   1|    -    0
src/handlers/dhcp/DhcpStreamHandler.cpp        |11.2%   169| 0.0%  15|    -    0
src/handlers/dhcp/DhcpStreamHandler.h          |30.6%    36| 0.0%   8|    -    0
src/handlers/dhcp/tests/test_dhcp_layer.cpp    | 3.2%    63| 0.0%   2|    -    0
src/handlers/dhcp/tests/test_json_schema.cpp   | 3.4%    29| 0.0%   1|    -    0
src/handlers/dns/v1/DnsHandlerModulePlugin.cpp |33.3%     6| 0.0%   1|    -    0
src/handlers/dns/v1/DnsHandlerModulePlugin.h   |33.3%     3| 0.0%   1|    -    0
src/handlers/dns/v1/DnsStreamHandler.cpp       | 7.4%   774| 0.0%  44|    -    0
src/handlers/dns/v1/DnsStreamHandler.h         |19.4%    93| 0.0%  14|    -    0
src/handlers/dns/v1/tests/test_dns_layer.cpp   | 3.3%   790| 0.0%  26|    -    0
src/handlers/dns/v1/tests/test_dnstap.cpp      | 3.1%   128| 0.0%   4|    -    0
src/handlers/dns/v1/tests/test_json_schema.cpp | 3.2%    31| 0.0%   1|    -    0
src/handlers/dns/v2/DnsHandlerModulePlugin.cpp |    -     0|    -   0|    -    0
src/handlers/dns/v2/DnsHandlerModulePlugin.h   |33.3%     3| 0.0%   1|    -    0
src/handlers/dns/v2/DnsStreamHandler.cpp       | 8.7%   574| 0.0%  36|    -    0
src/handlers/dns/v2/DnsStreamHandler.h         |22.1%   136| 0.0%  18|    -    0
src/handlers/dns/v2/tests/test_dns_layer.cpp   | 3.2%   728| 0.0%  23|    -    0
src/handlers/dns/v2/tests/test_dnstap.cpp      | 3.5%   115| 0.0%   4|    -    0
src/handlers/flow/FlowHandlerModulePlugin.cpp  |    -     0|    -   0|    -    0
src/handlers/flow/FlowHandlerModulePlugin.h    |33.3%     3| 0.0%   1|    -    0
src/handlers/flow/FlowStreamHandler.cpp        |10.5%   514| 0.0%  26|    -    0
src/handlers/flow/FlowStreamHandler.h          |18.8%   112| 0.0%  19|    -    0
src/handlers/flow/test_flows.cpp               | 3.5%   428| 0.0%  15|    -    0
src/handlers/input_res...andlerModulePlugin.cpp|40.0%     5| 0.0%   1|    -    0
src/handlers/input_res...sHandlerModulePlugin.h|33.3%     3| 0.0%   1|    -    0
src/handlers/input_res...urcesStreamHandler.cpp|13.0%   123| 0.0%  13|    -    0
src/handlers/input_res...sourcesStreamHandler.h|46.7%    15| 0.0%   5|    -    0
src/handlers/input_resources/ThreadMonitor.h   | 8.3%    36| 0.0%   3|    -    0
src/handlers/input_res...st_resources_layer.cpp| 3.9%    76| 0.0%   3|    -    0
src/handlers/net/v1/NetHandlerModulePlugin.cpp |33.3%     6| 0.0%   1|    -    0
src/handlers/net/v1/NetHandlerModulePlugin.h   |33.3%     3| 0.0%   1|    -    0
src/handlers/net/v1/NetStreamHandler.cpp       |11.0%   419| 0.0%  34|    -    0
src/handlers/net/v1/NetStreamHandler.h         |13.1%    61| 0.0%   8|    -    0
src/handlers/net/v1/tests/test_json_schema.cpp | 3.3%    30| 0.0%   1|    -    0
src/handlers/net/v1/tests/test_net_layer.cpp   | 2.8%   431| 0.0%  12|    -    0
src/handlers/net/v2/NetHandlerModulePlugin.cpp |    -     0|    -   0|    -    0
src/handlers/net/v2/NetHandlerModulePlugin.h   |33.3%     3| 0.0%   1|    -    0
src/handlers/net/v2/NetStreamHandler.cpp       |15.5%   296| 0.0%  31|    -    0
src/handlers/net/v2/NetStreamHandler.h         |19.2%    73| 0.0%  11|    -    0
src/handlers/net/v2/tests/test_net_layer.cpp   | 2.8%   423| 0.0%  12|    -    0
src/handlers/netprobe/...andlerModulePlugin.cpp|    -     0|    -   0|    -    0
src/handlers/netprobe/...eHandlerModulePlugin.h|33.3%     3| 0.0%   1|    -    0
src/handlers/netprobe/NetProbeStreamHandler.cpp|17.0%   112| 0.0%  10|    -    0
src/handlers/netprobe/NetProbeStreamHandler.h  |41.7%    24| 0.0%   6|    -    0
src/handlers/netprobe/test_net_probe.cpp       | 4.1%    49| 0.0%   2|    -    0
src/handlers/pcap/PcapHandlerModulePlugin.cpp  |    -     0|    -   0|    -    0
src/handlers/pcap/PcapHandlerModulePlugin.h    |33.3%     3| 0.0%   1|    -    0
src/handlers/pcap/PcapStreamHandler.cpp        |31.9%    47| 0.0%   7|    -    0
src/handlers/pcap/PcapStreamHandler.h          |40.0%    20| 0.0%   7|    -    0
src/handlers/pcap/tests/test_json_schema.cpp   | 3.2%    31| 0.0%   1|    -    0
src/handlers/pcap/tests/test_pcap_layer.cpp    | 4.8%    21| 0.0%   1|    -    0
src/inputs/dnstap/DnstapException.h            |    -     0|    -   0|    -    0
src/inputs/dnstap/DnstapInputModulePlugin.cpp  |    -     0|    -   0|    -    0
src/inputs/dnstap/DnstapInputModulePlugin.h    |33.3%     3| 0.0%   1|    -    0
src/inputs/dnstap/DnstapInputStream.cpp        |26.0%   123| 0.0%  11|    -    0
src/inputs/dnstap/DnstapInputStream.h          |47.4%    19| 0.0%   7|    -    0
src/inputs/dnstap/UnixFrameSession.h           |20.3%    69| 0.0%   6|    -    0
src/inputs/dnstap/tests/test_dnstap.cpp        |10.7%   103| 0.0%   9|    -    0
src/inputs/flow/FlowException.h                |66.7%     3| 0.0%   1|    -    0
src/inputs/flow/FlowInputModulePlugin.cpp      |    -     0|    -   0|    -    0
src/inputs/flow/FlowInputModulePlugin.h        |33.3%     3| 0.0%   1|    -    0
src/inputs/flow/FlowInputStream.cpp            |11.4%   132| 0.0%  11|    -    0
src/inputs/flow/FlowInputStream.h              |69.2%    13| 0.0%   7|    -    0
src/inputs/flow/NetflowData.h                  | 5.1%   274| 0.0%  12|    -    0
src/inputs/flow/SflowData.h                    |10.2%   206| 0.0%  14|    -    0
src/inputs/flow/test_flow.cpp                  |10.0%    70| 0.0%   5|    -    0
src/inputs/mock/MockInputModulePlugin.cpp      |37.5%     8| 0.0%   2|    -    0
src/inputs/mock/MockInputModulePlugin.h        |33.3%     3| 0.0%   1|    -    0
src/inputs/mock/MockInputStream.cpp            |22.2%    36| 0.0%   8|    -    0
src/inputs/mock/MockInputStream.h              |66.7%     9| 0.0%   5|    -    0
src/inputs/mock/test_mock.cpp                  |50.0%     2| 0.0%   1|    -    0
src/inputs/netprobe/NetProbe.h                 |22.2%    27| 0.0%   5|    -    0
src/inputs/netprobe/NetProbeException.h        |33.3%     6| 0.0%   2|    -    0
src/inputs/netprobe/Ne...eInputModulePlugin.cpp|    -     0|    -   0|    -    0
src/inputs/netprobe/NetProbeInputModulePlugin.h|33.3%     3| 0.0%   1|    -    0
src/inputs/netprobe/NetProbeInputStream.cpp    |16.1%   124| 0.0%  13|    -    0
src/inputs/netprobe/NetProbeInputStream.h      |76.9%    13| 0.0%   7|    -    0
src/inputs/netprobe/PingProbe.cpp              |11.3%   151| 0.0%  16|    -    0
src/inputs/netprobe/PingProbe.h                |55.6%     9| 0.0%   5|    -    0
src/inputs/netprobe/TcpProbe.cpp               |18.2%    44| 0.0%   7|    -    0
src/inputs/netprobe/TcpProbe.h                 |75.0%     4| 0.0%   3|    -    0
src/inputs/netprobe/test_netprobe.cpp          | 6.9%    72| 0.0%   5|    -    0
src/inputs/pcap/NetworkInterfaceScan.h         |    -     0|    -   0|    -    0
src/inputs/pcap/PcapException.h                |    -     0|    -   0|    -    0
src/inputs/pcap/PcapInputModulePlugin.cpp      |    -     0|    -   0|    -    0
src/inputs/pcap/PcapInputModulePlugin.h        |33.3%     3| 0.0%   1|    -    0
src/inputs/pcap/PcapInputStream.cpp            |12.4%   226| 0.0%  19|    -    0
src/inputs/pcap/PcapInputStream.h              |32.8%    61| 0.0%  16|    -    0
src/inputs/pcap/afpacket.cpp                   |    -     0|    -   0|    -    0
src/inputs/pcap/afpacket.h                     |    -     0|    -   0|    -    0
src/inputs/pcap/tests/test_mock_traffic.cpp    |11.1%     9| 0.0%   1|    -    0
src/inputs/pcap/tests/test_parse_pcap.cpp      | 5.6%    18| 0.0%   1|    -    0
src/tests/test_geoip.cpp                       | 2.2%    92| 0.0%   2|    -    0
src/tests/test_handlers.cpp                    |17.1%   140| 0.0%  18|    -    0
src/tests/test_ipport.cpp                      | 4.5%    22| 0.0%   1|    -    0
src/tests/test_metrics.cpp                     | 4.3%   438| 0.0%  19|    -    0
src/tests/test_policies.cpp                    | 0.4%   471| 0.0%   2|    -    0
src/tests/test_sketches.cpp                    | 3.8%    79| 0.0%   3|    -    0
src/tests/test_taps.cpp                        | 1.0%   100| 0.0%   1|    -    0
================================================================================
                                         Total:|15.2% 12568| 0.0%  1k|    -    0

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 9, 2026

LCOV of commit 70a573f during Debug Builds #104

  lines......: 74.9% (12573 of 16783 lines)
  functions..: 69.0% (1317 of 1909 functions)
  branches...: no data found

Files changed coverage rate: n/a

Full coverage report

@leoparente leoparente requested review from mfiedorowicz and samiura May 9, 2026 16:03
@leoparente leoparente self-assigned this May 9, 2026
@leoparente leoparente marked this pull request as ready for review May 9, 2026 16:03
@leoparente leoparente merged commit 9ba961c into develop May 9, 2026
18 checks passed
@leoparente leoparente deleted the chore/coverage-on-prs branch May 9, 2026 16:04
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 70a573fff2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +77 to +83
if: github.event_name == 'pull_request'
uses: zgosalvez/github-actions-report-lcov@7d72c57ce4bc101a4a0bf9d726b6c435abde8439 #v7.0.10
with:
coverage-files: build/coverage.info
artifact-name: code-coverage-report
github-token: ${{ secrets.GITHUB_TOKEN }}
update-comment: true
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Skip PR comment upload when token is read-only

This step unconditionally runs on every pull_request, but for forked PRs (and Dependabot PRs) GitHub downgrades GITHUB_TOKEN to read-only, so github-actions-report-lcov cannot update the PR comment and will fail with a 403. That turns the new coverage workflow into a red check for external contributions even when tests and coverage generation succeed; gate this step to non-fork PRs (or make it non-blocking) to avoid breaking contributor PRs.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants