Skip to content

Commit 268af1d

Browse files
Add initial code coverage report for PSModuleTest
- Created a new code coverage report XML file for the PSModuleTest module. - The report includes detailed coverage metrics for various methods and classes within the module. - Coverage statistics indicate missed instructions, lines, and methods, highlighting areas for potential improvement.
1 parent 3d6cfbe commit 268af1d

16 files changed

+156
-16
lines changed

.github/workflows/Action-Test.yml

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,57 @@ jobs:
2525
- name: Checkout repo
2626
uses: actions/checkout@v4
2727

28+
# Upload artifact from tests:
29+
- name: Upload artifact [Environments-macOS-CodeCoverage]
30+
uses: actions/upload-artifact@v4
31+
with:
32+
name: Environments-macOS-CodeCoverage
33+
path: ./tests/CodeCoverage/Environments-macOS-CodeCoverage
34+
retention-days: 1
35+
if-no-files-found: error
36+
37+
- name: Upload artifact [Environments-Windows-CodeCoverage]
38+
uses: actions/upload-artifact@v4
39+
with:
40+
name: Environments-Windows-CodeCoverage
41+
path: ./tests/CodeCoverage/Environments-Windows-CodeCoverage
42+
retention-days: 1
43+
if-no-files-found: error
44+
45+
- name: Upload artifact [Module-macOS-CodeCoverage]
46+
uses: actions/upload-artifact@v4
47+
with:
48+
name: Module-macOS-CodeCoverage
49+
path: ./tests/CodeCoverage/Module-macOS-CodeCoverage
50+
retention-days: 1
51+
if-no-files-found: error
52+
53+
- name: Upload artifact [Module-Windows-CodeCoverage]
54+
uses: actions/upload-artifact@v4
55+
with:
56+
name: Module-Windows-CodeCoverage
57+
path: ./tests/CodeCoverage/Module-Windows-CodeCoverage
58+
retention-days: 1
59+
if-no-files-found: error
60+
61+
- name: Upload artifact [MyTests-macOS-CodeCoverage]
62+
uses: actions/upload-artifact@v4
63+
with:
64+
name: MyTests-macOS-CodeCoverage
65+
path: ./tests/CodeCoverage/MyTests-macOS-CodeCoverage
66+
retention-days: 1
67+
if-no-files-found: error
68+
69+
- name: Upload artifact [MyTests-Windows-CodeCoverage]
70+
uses: actions/upload-artifact@v4
71+
with:
72+
name: MyTests-Windows-CodeCoverage
73+
path: ./tests/CodeCoverage/MyTests-Windows-CodeCoverage
74+
retention-days: 1
75+
if-no-files-found: error
76+
2877
- name: Action-Test
2978
uses: ./
3079
with:
31-
working-directory: ./tests
32-
subject: PSModule
80+
StepSummary_Mode: Full
81+
CodeCoveragePercentTarget: 80

README.md

Lines changed: 100 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,111 @@
1-
# Template-Action
1+
# Get-PesterCodeCoverage
22

3-
A template repository for GitHub Actions
3+
A GitHub Action that aggregates Pester code coverage reports and generates a detailed summary with coverage statistics.
4+
Fails the workflow if coverage falls below specified targets.
5+
6+
This GitHub Action is a part of the [PSModule framework](https://github.com/PSModule). It is recommended to use the
7+
[Process-PSModule workflow](https://github.com/PSModule/Process-PSModule) to automate the whole process of managing the PowerShell module.
8+
9+
## Features
10+
11+
- Combines multiple code coverage reports from parallel test runs
12+
- Generates markdown/HTML tables showing missed & executed commands
13+
- Displays analyzed files and coverage statistics
14+
- Configurable step summary sections
15+
- Threshold enforcement for minimum code coverage
416

517
## Usage
618

719
### Inputs
820

9-
### Secrets
21+
| Name | Description | Required | Default |
22+
|------|-------------|----------|---------|
23+
| `Debug` | Enable debug output | No | `false` |
24+
| `Verbose` | Enable verbose output | No | `false` |
25+
| `Version` | Exact version of GitHub module to install | No | Latest |
26+
| `Prerelease` | Allow prerelease versions | No | `false` |
27+
| `WorkingDirectory` | Working directory for the action | No | `.` |
28+
| `StepSummary_Mode` | Step summary sections to show (`Full`, `None`, or comma-separated list of `Missed,Executed,Files`) | No | `Missed,Files` |
29+
| `CodeCoveragePercentTarget` | Target code coverage percentage | No | Max target from individual reports |
30+
31+
### Example Workflow
32+
33+
```yaml
34+
- name: Process Code Coverage
35+
uses: PSModule/Get-PesterCodeCoverage@v1
36+
with:
37+
StepSummary_Mode: Full
38+
CodeCoveragePercentTarget: 80
39+
```
40+
41+
## Outputs
42+
43+
### GitHub Step Summary
44+
45+
The action generates a detailed summary visible in the GitHub Actions UI:
46+
47+
1. **Coverage Overview Table**
48+
- Coverage percentage vs target
49+
- Analyzed/executed/missed command counts
50+
- Number of files analyzed
51+
52+
2. **Expandable Sections**
53+
- **Missed Commands**: HTML table with code snippets
54+
- **Executed Commands**: HTML table with code snippets
55+
- **Analyzed Files**: List of covered files
56+
57+
Example summary:
58+
```
59+
✅ Code Coverage Report
60+
61+
Summary:
62+
| Coverage | Target | Analyzed | Executed | Missed | Files |
63+
|----------|--------|---------------|---------------|---------------|---------------|
64+
| 85% | 80% | 1000 commands | 850 commands | 150 commands | 15 files |
65+
66+
▶️ Missed commands [150] (click to expand)
67+
▶️ Executed commands [850] (click to expand)
68+
▶️ Files analyzed [15] (click to expand)
69+
```
70+
71+
## Requirements
72+
73+
1. **Pester Code Coverage Reports**
74+
Preceding steps must generate JSON coverage reports named `*-CodeCoverage*.json`
75+
76+
2. **GitHub CLI**
77+
The action uses `gh run download` to fetch artifacts from the current workflow run
78+
79+
## Behavior
80+
81+
1. **Coverage Calculation**
82+
- Combines multiple coverage reports
83+
- Removes duplicate entries
84+
- Calculates aggregate coverage percentage
85+
86+
2. **Threshold Enforcement**
87+
Fails the workflow if coverage is below either:
88+
- Explicitly specified `CodeCoveragePercentTarget`
89+
- Highest target from individual reports (if no target specified)
90+
91+
3. **Output Control**
92+
Configure visibility of sections using `StepSummary_Mode`:
93+
```yaml
94+
# Show all sections
95+
StepSummary_Mode: Full
96+
97+
# Disable summary
98+
StepSummary_Mode: None
1099

11-
### Outputs
100+
# Custom selection
101+
StepSummary_Mode: Missed,Files
102+
```
12103
13-
### Example
104+
## Troubleshooting
14105
106+
Enable debugging by setting inputs:
15107
```yaml
16-
Example here
108+
with:
109+
Debug: true
110+
Verbose: true
17111
```

scripts/main.ps1

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ LogGroup 'Init - Setup prerequisites' {
2727
Import-Module "$PSScriptRoot/Helpers.psm1"
2828
}
2929

30-
$PSStyle.OutputRendering = 'Ansi'
31-
$repo = $env:GITHUB_REPOSITORY
30+
$owner = $env:GITHUB_REPOSITORY_OWNER
31+
$repo = $env:GITHUB_REPOSITORY_NAME
3232
$runId = $env:GITHUB_RUN_ID
33-
$codeCoverageFolder = New-Item -Path . -ItemType Directory -Name 'CodeCoverage' -Force
34-
gh run download $runId --repo $repo --pattern *-CodeCoverage --dir CodeCoverage
35-
$files = Get-ChildItem -Path $codeCoverageFolder -Recurse -File -Filter *.json | Sort-Object Name
33+
34+
$files = Get-GitHubArtifact -Owner $owner -Repository $repo -WorkflowRunID $runId -Name '*-CodeCoverage' |
35+
Save-GitHubArtifact -Path 'CodeCoverage' -Force -Expand -PassThru | Get-ChildItem -Recurse -Filter *.json | Sort-Object Name -Unique
3636

3737
LogGroup 'List files' {
3838
$files.Name | Out-String

tests/Environments-Windows-CodeCoverage/Environments-Windows-CodeCoverage-Report.json renamed to tests/CodeCoverage/Environments-Windows-CodeCoverage/Environments-Windows-CodeCoverage-Report.json

File renamed without changes.

tests/Environments-Windows-CodeCoverage/Environments-Windows-CodeCoverage-Report.xml renamed to tests/CodeCoverage/Environments-Windows-CodeCoverage/Environments-Windows-CodeCoverage-Report.xml

File renamed without changes.

tests/Environments-macOS-CodeCoverage/Environments-macOS-CodeCoverage-Report.json renamed to tests/CodeCoverage/Environments-macOS-CodeCoverage/Environments-macOS-CodeCoverage-Report.json

File renamed without changes.

tests/Environments-macOS-CodeCoverage/Environments-macOS-CodeCoverage-Report.xml renamed to tests/CodeCoverage/Environments-macOS-CodeCoverage/Environments-macOS-CodeCoverage-Report.xml

File renamed without changes.

tests/Module-Windows-CodeCoverage/Module-Windows-CodeCoverage-Report.json renamed to tests/CodeCoverage/Module-Windows-CodeCoverage/Module-Windows-CodeCoverage-Report.json

File renamed without changes.

tests/Module-Windows-CodeCoverage/Module-Windows-CodeCoverage-Report.xml renamed to tests/CodeCoverage/Module-Windows-CodeCoverage/Module-Windows-CodeCoverage-Report.xml

File renamed without changes.

tests/Module-macOS-CodeCoverage/Module-macOS-CodeCoverage-Report.json renamed to tests/CodeCoverage/Module-macOS-CodeCoverage/Module-macOS-CodeCoverage-Report.json

File renamed without changes.

0 commit comments

Comments
 (0)