Skip to content

Conversation

@iand675
Copy link
Contributor

@iand675 iand675 commented Nov 9, 2025

TL;DR

Added code coverage generation for the Temporal SDK Haskell packages.

What changed?

  • Added a new Nix overlay (nix/overlays/haskell/coverage.nix) that enables code coverage for the main temporal-sdk package while disabling Haddock documentation generation to speed up builds
  • Created a new package definition (nix/packages/coverage.nix) that:
    • Builds coverage reports for the SDK
    • Copies HTML coverage reports and .tix files to the output
    • Provides convenience scripts to view and display coverage information
  • Updated flake.nix to expose coverage packages for each GHC version in the Nix flake outputs

How to test?

  1. Build the coverage package for a specific GHC version:

    nix build .#coverage-ghc94
    
  2. View the coverage report:

    ./result/bin/view-coverage
    
  3. Show the text coverage summary:

    ./result/bin/show-coverage-report
    

Copy link
Contributor Author

iand675 commented Nov 9, 2025

This stack of pull requests is managed by Graphite. Learn more about stacking.

@iand675 iand675 marked this pull request as ready for review November 9, 2025 12:41
@github-actions
Copy link

github-actions bot commented Nov 9, 2025

📊 Code Coverage Report

Current PR Coverage

Overall Coverage: 🟠 58.3%

  • 10162 / 17439 expressions covered

Overall Summary

Category Coverage
Top-level definitions 793/2604 🔴 30.5%
Alternatives 27/57 🟠 47.4%
Expressions 9094/14355 🟡 63.4%
Local definitions 228/366 🟡 62.3%
Other 20/57 🔴 35.1%

Coverage by Module

Module Coverage Top-level Alternatives Expressions Local
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.TH.Internal 🔴 0.0% 0/15 🔴 0.0% 0/2 🔴 0.0% 0/135 🔴 0.0% 0/2 🔴 0.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.TH 🔴 8.2% 1/21 🔴 4.8% 0/16 🔴 0.0% 41/460 🔴 8.9% 3/36 🔴 8.3%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.SearchAttributes 🔴 15.6% 12/101 🔴 11.9% N/A 19/92 🔴 20.7% 0/6 🔴 0.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Common 🔴 16.1% 50/637 🔴 7.8% 1/1 🟢 100.0% 78/170 🟠 45.9% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Data.EvalRecord 🔴 21.0% 12/71 🔴 16.9% N/A 68/308 🔴 22.1% 2/12 🔴 16.7%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Worker.Types 🔴 25.0% 9/35 🔴 25.7% N/A 9/37 🔴 24.3% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Client.TestService 🔴 32.0% 7/16 🟠 43.8% 1/1 🟢 100.0% 43/139 🔴 30.9% 3/12 🔴 25.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Activity.Definition 🔴 35.1% 22/57 🔴 38.6% N/A 24/74 🔴 32.4% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Payload 🔴 35.4% 38/125 🔴 30.4% 0/5 🔴 0.0% 162/438 🔴 37.0% 2/4 🟠 50.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow.Update 🟠 40.0% 1/3 🔴 33.3% N/A 1/2 🟠 50.0% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow.Signal 🟠 40.0% 1/3 🔴 33.3% N/A 1/2 🟠 50.0% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow.Query 🟠 40.0% 1/3 🔴 33.3% N/A 1/2 🟠 50.0% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.TH.Classes 🟠 40.0% 10/27 🔴 37.0% N/A 28/68 🟠 41.2% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow.Definition 🟠 41.7% 8/20 🟠 40.0% N/A 32/76 🟠 42.1% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow.Types 🟠 45.3% 49/179 🔴 27.4% N/A 81/108 🟡 75.0% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Bundle 🟠 45.5% 9/25 🔴 36.0% N/A 91/199 🟠 45.7% 10/18 🟠 55.6%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Activity.Types 🟠 47.4% 9/20 🟠 45.0% N/A 9/18 🟠 50.0% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow.Unsafe.Handle 🟠 49.4% 5/8 🟡 62.5% N/A 72/148 🟠 48.6% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Coroutine 🟠 49.7% 12/23 🟠 52.2% N/A 65/132 🟠 49.2% 3/6 🟠 50.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow.WorkflowInstance 🟠 50.0% 1/1 🟢 100.0% N/A 1/3 🔴 33.3% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.EphemeralServer 🟠 50.0% 4/13 🔴 30.8% N/A 64/122 🟠 52.5% 0/1 🔴 0.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Common.Async 🟠 50.0% 1/2 🟠 50.0% N/A 10/20 🟠 50.0% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Exception 🟠 52.0% 84/291 🔴 28.9% 2/3 🟡 66.7% 301/455 🟡 66.2% 5/5 🟢 100.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Testing.MockActivityEnvironment 🟠 53.4% 7/14 🟠 50.0% N/A 43/84 🟠 51.2% 5/5 🟢 100.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Operator 🟠 55.6% 3/12 🔴 25.0% 1/1 🟢 100.0% 53/92 🟠 57.6% 2/2 🟢 100.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow 🟠 58.2% 38/104 🔴 36.5% 2/3 🟡 66.7% 1237/2085 🟠 59.3% 31/56 🟠 55.4%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Worker 🟠 59.1% 42/111 🔴 37.8% 1/1 🟢 100.0% 601/997 🟡 60.3% 34/39 🟢 87.2%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow.Internal.Monad 🟡 60.6% 135/254 🟠 53.1% 1/3 🔴 33.3% 613/976 🟡 62.8% 2/3 🟡 66.7%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Client.Types 🟡 65.5% 49/104 🟠 47.1% N/A 124/159 🟡 78.0% 0/1 🔴 0.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Interceptor 🟡 67.6% 15/33 🟠 45.5% N/A 56/72 🟡 77.8% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Activity 🟡 69.8% 3/6 🟠 50.0% N/A 84/120 🟡 70.0% 3/3 🟢 100.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Duration 🟡 70.9% 27/64 🟠 42.2% 6/7 🟢 85.7% 213/274 🟡 77.7% 6/9 🟡 66.7%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.WorkflowInstance 🟡 71.2% 18/22 🟢 81.8% 2/2 🟢 100.0% 1258/1767 🟡 71.2% 29/42 🟡 69.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Contrib.OpenTelemetry 🟡 73.6% 3/7 🟠 42.9% N/A 512/694 🟡 73.8% 12/15 🟢 80.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow.Internal.Instance 🟡 74.7% 6/8 🟡 75.0% N/A 124/166 🟡 74.7% 6/8 🟡 75.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Client 🟡 76.2% 34/76 🟠 44.7% 5/7 🟡 71.4% 1455/1879 🟡 77.4% 26/32 🟢 81.2%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Common.Logging 🟢 81.0% 11/14 🟡 78.6% 1/1 🟢 100.0% 87/106 🟢 82.1% 3/4 🟡 75.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Testing.Assertions 🟢 81.1% 6/11 🟠 54.5% N/A 24/26 🟢 92.3% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Activity.Worker 🟢 81.4% 25/36 🟡 69.4% N/A 450/550 🟢 81.8% 10/10 🟢 100.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow.Worker 🟢 84.7% 15/22 🟡 68.2% 1/1 🟢 100.0% 630/740 🟢 85.1% 22/26 🟢 84.6%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow.Eval 🟢 91.1% 4/4 🟢 100.0% 3/3 🟢 100.0% 300/329 🟢 91.2% 9/9 🟢 100.0%
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.SearchAttributes.Internal 🟢 93.3% 5/5 🟢 100.0% N/A 23/25 🟢 92.0% N/A
temporal-sdk-2025.10.1.0-KbLX5CyBDl95aLVKKsIYt0/Temporal.Workflow.Unsafe 🟢 100.0% 1/1 🟢 100.0% N/A 6/6 🟢 100.0% N/A

🟢 ≥80% 🟡 ≥60% 🟠 ≥40% 🔴 <40%

@iand675 iand675 merged commit 8e478bc into main Nov 9, 2025
31 of 32 checks passed
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