27
27
required : false
28
28
default : outputs/docs
29
29
SkipTests :
30
- type : boolean
31
- description : Whether to skip tests .
30
+ type : string
31
+ description : Defines what types of tests to skip. Allowed values are 'All', 'SourceCode', 'Module', 'None', 'macOS', 'Windows', 'Linux', 'Desktop', 'Core' .
32
32
required : false
33
- default : false
33
+ default : None
34
34
TestProcess :
35
35
type : boolean
36
36
description : Whether to test the process.
@@ -55,17 +55,10 @@ permissions:
55
55
statuses : write
56
56
57
57
jobs :
58
- TestSourceCode :
59
- name : Test code
60
- strategy :
61
- fail-fast : false
62
- matrix :
63
- shell : [pwsh]
64
- os : [ubuntu-latest, macos-latest, windows-latest]
65
- include :
66
- - shell : powershell
67
- os : windows-latest
68
- runs-on : ${{ matrix.os }}
58
+ TestSourceCode-pwsh-ubuntu-latest :
59
+ name : Test source code (pwsh, ubuntu-latest)
60
+ if : ${{ !(contains(inputs.SkipTests, 'All') || contains(inputs.SkipTests, 'SourceCode') || contains(inputs.SkipTests, 'Linux') || contains(inputs.SkipTests, 'Core')) }}
61
+ runs-on : ubuntu-latest
69
62
steps :
70
63
- name : Checkout Code
71
64
uses : actions/checkout@v4
@@ -75,20 +68,103 @@ jobs:
75
68
with :
76
69
Version : ${{ inputs.Version }}
77
70
Prerelease : ${{ inputs.Prerelease }}
78
- Shell : ${{ matrix.shell }}
71
+ Shell : pwsh
79
72
80
- - name : Test built module
73
+ - name : Test source code
74
+ id : test
75
+ uses : PSModule/Test-PSModule@v1
76
+ with :
77
+ Name : ${{ inputs.Name }}
78
+ Path : ${{ inputs.Path }}
79
+ Shell : pwsh
80
+ TestType : SourceCode
81
+
82
+ TestSourceCode-pwsh-macos-latest :
83
+ name : Test source code (pwsh, macos-latest)
84
+ if : ${{ !(contains(inputs.SkipTests, 'All') || contains(inputs.SkipTests, 'SourceCode' ) || contains(inputs.SkipTests, 'macOS') || contains(inputs.SkipTests, 'Core')) }}
85
+ runs-on : macos-latest
86
+ outputs :
87
+ passed : ${{ steps.test.outputs.passed }}
88
+ steps :
89
+ - name : Checkout Code
90
+ uses : actions/checkout@v4
91
+
92
+ - name : Initialize environment
93
+ uses : PSModule/Initialize-PSModule@v1
94
+ with :
95
+ Version : ${{ inputs.Version }}
96
+ Prerelease : ${{ inputs.Prerelease }}
97
+ Shell : pwsh
98
+
99
+ - name : Test source code
100
+ id : test
101
+ uses : PSModule/Test-PSModule@v1
102
+ with :
103
+ Name : ${{ inputs.Name }}
104
+ Path : ${{ inputs.Path }}
105
+ Shell : pwsh
106
+ TestType : SourceCode
107
+
108
+ TestSourceCode-pwsh-windows-latest :
109
+ name : Test source code (pwsh, windows-latest)
110
+ if : ${{ !(contains(inputs.SkipTests, 'All' ) || contains(inputs.SkipTests, 'SourceCode' ) || contains(inputs.SkipTests, 'Windows') || contains(inputs.SkipTests, 'Core')) }}
111
+ runs-on : windows-latest
112
+ outputs :
113
+ passed : ${{ steps.test.outputs.passed }}
114
+ steps :
115
+ - name : Checkout Code
116
+ uses : actions/checkout@v4
117
+
118
+ - name : Initialize environment
119
+ uses : PSModule/Initialize-PSModule@v1
120
+ with :
121
+ Version : ${{ inputs.Version }}
122
+ Prerelease : ${{ inputs.Prerelease }}
123
+ Shell : pwsh
124
+
125
+ - name : Test source code
126
+ id : test
127
+ uses : PSModule/Test-PSModule@v1
128
+ with :
129
+ Name : ${{ inputs.Name }}
130
+ Path : ${{ inputs.Path }}
131
+ Shell : pwsh
132
+ TestType : SourceCode
133
+
134
+ TestSourceCode-powershell-windows-latest :
135
+ name : Test source code (powershell, windows-latest)
136
+ if : ${{ !(contains(inputs.SkipTests, 'All' ) || contains(inputs.SkipTests, 'SourceCode' ) || contains(inputs.SkipTests, 'Windows') || contains(inputs.SkipTests, 'Desktop')) }}
137
+ runs-on : windows-latest
138
+ outputs :
139
+ passed : ${{ steps.test.outputs.passed }}
140
+ steps :
141
+ - name : Checkout Code
142
+ uses : actions/checkout@v4
143
+
144
+ - name : Initialize environment
145
+ uses : PSModule/Initialize-PSModule@v1
146
+ with :
147
+ Version : ${{ inputs.Version }}
148
+ Prerelease : ${{ inputs.Prerelease }}
149
+ Shell : powershell
150
+
151
+ - name : Test source code
152
+ id : test
81
153
uses : PSModule/Test-PSModule@v1
82
- if : ${{ inputs.SkipTests != true }}
83
154
with :
84
155
Name : ${{ inputs.Name }}
85
156
Path : ${{ inputs.Path }}
86
- Shell : ${{ matrix.shell }}
157
+ Shell : powershell
87
158
TestType : SourceCode
88
159
89
160
BuildModule :
90
161
name : Build module
91
- needs : TestSourceCode
162
+ if : ${{ contains(fromJson('["success", "skipped"]'), needs.TestSourceCode-pwsh-ubuntu-latest.result) && contains(fromJson('["success", "skipped"]'), needs.TestSourceCode-pwsh-macos-latest.result) && contains(fromJson('["success", "skipped"]'), needs.TestSourceCode-pwsh-windows-latest.result) && contains(fromJson('["success", "skipped"]'), needs.TestSourceCode-powershell-windows-latest.result) && !cancelled() }}
163
+ needs :
164
+ - TestSourceCode-pwsh-ubuntu-latest
165
+ - TestSourceCode-pwsh-macos-latest
166
+ - TestSourceCode-pwsh-windows-latest
167
+ - TestSourceCode-powershell-windows-latest
92
168
runs-on : ubuntu-latest
93
169
steps :
94
170
- name : Checkout Code
@@ -127,6 +203,7 @@ jobs:
127
203
# This is necessary as there is no way to get output from a matrix job
128
204
TestModule-pwsh-ubuntu-latest :
129
205
name : Test module (pwsh, ubuntu-latest)
206
+ if : ${{ needs.BuildModule.result == 'success' && !(contains(inputs.SkipTests, 'All') || contains(inputs.SkipTests, 'Module') || contains(inputs.SkipTests, 'Linux') || contains(inputs.SkipTests, 'Core')) && !cancelled() }}
130
207
needs : BuildModule
131
208
runs-on : ubuntu-latest
132
209
outputs :
@@ -151,7 +228,6 @@ jobs:
151
228
- name : Test built module
152
229
id : test
153
230
uses : PSModule/Test-PSModule@v1
154
- if : ${{ inputs.SkipTests != true }}
155
231
continue-on-error : true
156
232
with :
157
233
Name : ${{ inputs.Name }}
@@ -166,6 +242,7 @@ jobs:
166
242
167
243
TestModule-pwsh-macos-latest :
168
244
name : Test module (pwsh, macos-latest)
245
+ if : ${{ needs.BuildModule.result == 'success' && !(contains(inputs.SkipTests, 'All') || contains(inputs.SkipTests, 'Module') || contains(inputs.SkipTests, 'macOS') || contains(inputs.SkipTests, 'Core')) && !cancelled() }}
169
246
needs : BuildModule
170
247
runs-on : macos-latest
171
248
outputs :
@@ -190,7 +267,6 @@ jobs:
190
267
- name : Test built module
191
268
id : test
192
269
uses : PSModule/Test-PSModule@v1
193
- if : ${{ inputs.SkipTests != true }}
194
270
continue-on-error : true
195
271
with :
196
272
Name : ${{ inputs.Name }}
@@ -205,6 +281,7 @@ jobs:
205
281
206
282
TestModule-pwsh-windows-latest :
207
283
name : Test module (pwsh, windows-latest)
284
+ if : ${{ needs.BuildModule.result == 'success' && !(contains(inputs.SkipTests, 'All') || contains(inputs.SkipTests, 'Module') || contains(inputs.SkipTests, 'Windows') || contains(inputs.SkipTests, 'Core')) && !cancelled() }}
208
285
needs : BuildModule
209
286
runs-on : windows-latest
210
287
outputs :
@@ -229,7 +306,6 @@ jobs:
229
306
- name : Test built module
230
307
id : test
231
308
uses : PSModule/Test-PSModule@v1
232
- if : ${{ inputs.SkipTests != true }}
233
309
continue-on-error : true
234
310
with :
235
311
Name : ${{ inputs.Name }}
@@ -244,6 +320,7 @@ jobs:
244
320
245
321
TestModule-powershell-windows-latest :
246
322
name : Test module (powershell, windows-latest)
323
+ if : ${{ needs.BuildModule.result == 'success' && !(contains(inputs.SkipTests, 'All') || contains(inputs.SkipTests, 'Module') || contains(inputs.SkipTests, 'Windows') || contains(inputs.SkipTests, 'Desktop')) && !cancelled() }}
247
324
needs : BuildModule
248
325
runs-on : windows-latest
249
326
outputs :
@@ -268,7 +345,6 @@ jobs:
268
345
- name : Test built module
269
346
id : test
270
347
uses : PSModule/Test-PSModule@v1
271
- if : ${{ inputs.SkipTests != true }}
272
348
continue-on-error : true
273
349
with :
274
350
Name : ${{ inputs.Name }}
@@ -283,13 +359,13 @@ jobs:
283
359
284
360
TestModuleStatus :
285
361
name : Test module status
362
+ if : ${{ contains(fromJson('["success", "skipped"]'), needs.TestModule-pwsh-ubuntu-latest.result) && contains(fromJson('["success", "skipped"]'), needs.TestModule-pwsh-macos-latest.result) && contains(fromJson('["success", "skipped"]'), needs.TestModule-pwsh-windows-latest.result) && contains(fromJson('["success", "skipped"]'), needs.TestModule-powershell-windows-latest.result) && !cancelled() }}
286
363
needs :
287
364
- TestModule-pwsh-ubuntu-latest
288
365
- TestModule-pwsh-macos-latest
289
366
- TestModule-pwsh-windows-latest
290
367
- TestModule-powershell-windows-latest
291
368
runs-on : ubuntu-latest
292
- if : success() || failure()
293
369
steps :
294
370
- name : Checkout Code
295
371
uses : actions/checkout@v4
@@ -309,28 +385,62 @@ jobs:
309
385
- name : Summerize tests
310
386
shell : pwsh
311
387
run : |
312
- Start-LogGroup -Name 'Status'
313
- $Linux = '${{ needs.TestModule-pwsh-ubuntu-latest.outputs.passed }}' -eq 'true'
314
- $MacOS = '${{ needs.TestModule-pwsh-macos-latest.outputs.passed }}' -eq 'true'
315
- $Windows = '${{ needs.TestModule-pwsh-windows-latest.outputs.passed }}' -eq 'true'
316
- $Desktop = '${{ needs.TestModule-powershell-windows-latest.outputs.passed }}' -eq 'true'
317
- $Core = $Linux -or $MacOS -or $Windows
318
-
319
- $Status = [pscustomobject]@{
320
- Linux = $Linux
321
- MacOS = $MacOS
322
- Windows = $Windows
323
- Desktop = $Desktop
324
- Core = $Core
325
- }
326
-
327
- Write-Host ($Status | Format-Table | Out-String)
388
+ Start-LogGroup -Name 'Passed tests'
389
+
390
+ $linuxPassed = '${{ needs.TestModule-pwsh-ubuntu-latest.outputs.passed }}' -eq 'true'
391
+ $linuxSkipped = '${{ needs.TestModule-pwsh-ubuntu-latest.result }}' -eq 'skipped'
392
+ $macOSPassed = '${{ needs.TestModule-pwsh-macos-latest.outputs.passed }}' -eq 'true'
393
+ $macOSSkipped = '${{ needs.TestModule-pwsh-macos-latest.result }}' -eq 'skipped'
394
+ $windowsPassed = '${{ needs.TestModule-pwsh-windows-latest.outputs.passed }}' -eq 'true'
395
+ $windowsSkipped = '${{ needs.TestModule-pwsh-windows-latest.result }}' -eq 'skipped'
396
+ $desktopPassed = '${{ needs.TestModule-powershell-windows-latest.outputs.passed }}' -eq 'true'
397
+ $desktopSkipped = '${{ needs.TestModule-powershell-windows-latest.result }}' -eq 'skipped'
398
+ $corePassed = $linuxPassed -or $macOSPassed -or $windowsPassed
399
+ $coreSkipped = $linuxSkipped -and $macOSSkipped -and $windowsSkipped
400
+ $anyPassed = $corePassed -or $desktopPassed
401
+ $allSkipped = $coreSkipped -and $desktopSkipped
402
+
403
+ $Status = @(
404
+ [pscustomobject]@{
405
+ Name = 'Linux'
406
+ Icon = $linuxSkipped ? '⚠️' : $linuxPassed ? '✅' : '❌'
407
+ Status = $linuxSkipped ? 'Skipped' : $linuxPassed ? 'Passed' : 'Failed'
408
+ }
409
+ [pscustomobject]@{
410
+ Name = 'MacOS'
411
+ Icon = $macOSSkipped ? '⚠️' : $macOSPassed ? '✅' : '❌'
412
+ Status = $macOSSkipped ? 'Skipped' : $macOSPassed ? 'Passed' : 'Failed'
413
+ }
414
+ [pscustomobject]@{
415
+ Name = 'Windows'
416
+ Icon = $windowsSkipped ? '⚠️' : $windowsPassed ? '✅' : '❌'
417
+ Status = $windowsSkipped ? 'Skipped' : $windowsPassed ? 'Passed' : 'Failed'
418
+ }
419
+ [pscustomobject]@{
420
+ Name = 'Desktop'
421
+ Icon = $desktopSkipped ? '⚠️' : $desktopPassed ? '✅' : '❌'
422
+ Status = $desktopSkipped ? 'Skipped' : $desktopPassed ? 'Passed' : 'Failed'
423
+ }
424
+ [pscustomobject]@{
425
+ Name = 'Core'
426
+ Icon = $coreSkipped ? '⚠️' : $corePassed ? '✅' : '❌'
427
+ Status = $coreSkipped ? 'Skipped' : $corePassed ? 'Passed' : 'Failed'
428
+ }
429
+ [pscustomobject]@{
430
+ Name = 'Result'
431
+ Icon = $allSkipped ? '⚠️' : $anyPassed ? '✅' : '❌'
432
+ Status = $allSkipped ? 'Skipped' : $anyPassed ? 'Passed' : 'Failed'
433
+ }
434
+ )
435
+
436
+ Write-Host ($Status | Format-Table | Out-String)
437
+ ($Status | New-MDTable) | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Append
438
+ Stop-LogGroup
328
439
329
- if (-not ($Core -or $Desktop) ) {
440
+ if (-not $anyPassed -and -not $allSkipped ) {
330
441
Write-Host "::[error]::No tests passed"
331
442
exit 1
332
443
}
333
- Stop-LogGroup
334
444
335
445
Start-LogGroup -Name 'Data'
336
446
$moduleName = [string]::IsNullOrEmpty('${{ inputs.Name }}') ? $env:GITHUB_REPOSITORY_NAME : '${{ inputs.Name }}'
@@ -346,6 +456,8 @@ jobs:
346
456
347
457
Set-ModuleManifest -Path $moduleManifestPath -PowerShellVersion '5.1'
348
458
459
+ #TODO: DONT OVERRIDE MANIFEST
460
+
349
461
if ($Desktop) {
350
462
Add-ModuleManifestData -Path $moduleManifestPath -CompatiblePSEditions 'Desktop'
351
463
Add-ModuleManifestData -Path $moduleManifestPath -Tags 'PSEdition_Desktop'
@@ -386,6 +498,7 @@ jobs:
386
498
387
499
LintDocs :
388
500
name : Lint documentation
501
+ if : ${{ needs.BuildModule.result == 'success' && !cancelled() }}
389
502
needs : BuildModule
390
503
runs-on : ubuntu-latest
391
504
steps :
@@ -419,7 +532,7 @@ jobs:
419
532
420
533
PublishModule :
421
534
name : Publish module
422
- if : ${{ needs.TestModuleStatus.result == 'success' && needs.LintDocs.result == 'success' && (success() || failure() ) }}
535
+ if : ${{ needs.TestModuleStatus.result == 'success' && needs.LintDocs.result == 'success' && !cancelled( ) }}
423
536
needs :
424
537
- TestModuleStatus
425
538
- LintDocs
0 commit comments