From daedd9807c154ea6649aa02f59837bd60bffd914 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Thu, 6 Mar 2025 17:21:03 +0100 Subject: [PATCH 01/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Update=20defaul?= =?UTF-8?q?t=20working=20directory=20in=20action.yml=20to=20use=20a=20rela?= =?UTF-8?q?tive=20path?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 102 ++++++++++++++++++++++++++--------------------------- action.yml | 2 +- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index cda9dea9..02cc5303 100644 --- a/README.md +++ b/README.md @@ -252,57 +252,57 @@ jobs: *All inputs are optional unless noted otherwise. For more details, refer to the [Pester Configuration documentation](https://pester.dev/docs/usage/configuration).* `Run.PassThru` is forced to `$true` to ensure the action can capture test results. -| **Input** | **Description** | **Default** | -|--------------------------------------|--------------------------------------------------------------------------------------------------------|---------------------------------| -| `Path` | Path to where tests are located or a configuration file. | *(none)* | -| `ReportAsJson` | Output generated reports in JSON format in addition to the configured format through Pester. | `true` | -| `Run_Path` | Directories/files to be searched for tests. | *(none)* | -| `Run_ExcludePath` | Directories/files to exclude from the run. | *(none)* | -| `Run_ScriptBlock` | ScriptBlocks containing tests to be executed. | *(none)* | -| `Run_Container` | ContainerInfo objects containing tests to be executed. | *(none)* | -| `Run_TestExtension` | Filter used to identify test files (e.g. `.Tests.ps1`). | *(none)* | -| `Run_Exit` | Whether to exit with a non-zero exit code on failure. | *(none)* | -| `Run_Throw` | Whether to throw an exception on test failure. | *(none)* | -| `Run_SkipRun` | Discovery only, skip actual test run. | *(none)* | -| `Run_SkipRemainingOnFailure` | Skips remaining tests after the first failure. Options: `None`, `Run`, `Container`, `Block`. | *(none)* | -| `Filter_Tag` | Tags of Describe/Context/It blocks to run. | *(none)* | -| `Filter_ExcludeTag` | Tags of Describe/Context/It blocks to exclude. | *(none)* | -| `Filter_Line` | Filter by file + scriptblock start line (e.g. `C:\tests\file1.Tests.ps1:37`). | *(none)* | -| `Filter_ExcludeLine` | Exclude by file + scriptblock start line. Precedence over `Filter_Line`. | *(none)* | -| `Filter_FullName` | Full name of a test with wildcards, joined by dot. E.g. `*.describe Get-Item.test1` | *(none)* | -| `CodeCoverage_Enabled` | Enable code coverage. | *(none)* | -| `CodeCoverage_OutputFormat` | Format for the coverage report. Possible values: `JaCoCo`, `CoverageGutters`, `Cobertura`. | *(none)* | -| `CodeCoverage_OutputPath` | Where to save the code coverage report (relative to the current dir). | *(none)* | -| `CodeCoverage_OutputEncoding` | Encoding of the coverage file. | *(none)* | -| `CodeCoverage_Path` | Files/directories to measure coverage on (by default, reuses `Path` from the general settings). | *(none)* | -| `CodeCoverage_ExcludeTests` | Exclude tests themselves from coverage. | *(none)* | -| `CodeCoverage_RecursePaths` | Recurse through coverage directories. | *(none)* | -| `CodeCoverage_CoveragePercentTarget` | Desired minimum coverage percentage. | *(none)* | -| `CodeCoverage_UseBreakpoints` | **Experimental**: When `false`, use a Profiler-based tracer instead of breakpoints. | *(none)* | -| `CodeCoverage_SingleHitBreakpoints` | Remove breakpoints after first hit. | *(none)* | -| `TestResult_Enabled` | Enable test-result output (e.g. NUnitXml, JUnitXml). | *(none)* | -| `TestResult_OutputFormat` | Possible values: `NUnitXml`, `NUnit2.5`, `NUnit3`, `JUnitXml`. | *(none)* | -| `TestResult_OutputPath` | Where to save the test-result report (relative path). | *(none)* | -| `TestResult_OutputEncoding` | Encoding of the test-result file. | *(none)* | -| `TestResult_TestSuiteName` | Name used for the root `test-suite` element in the result file. | *(none)* | -| `Should_ErrorAction` | Controls if `Should` throws on error. Use `Stop` to throw, or `Continue` to fail at the end. | *(none)* | -| `Debug_ShowFullErrors` | Show Pester internal stack on errors. (Deprecated – overrides `Output.StackTraceVerbosity` to `Full`). | *(none)* | -| `Debug_WriteDebugMessages` | Write debug messages to screen. | *(none)* | -| `Debug_WriteDebugMessagesFrom` | Filter debug messages by source. Wildcards allowed. | *(none)* | -| `Debug_ShowNavigationMarkers` | Write paths after every block/test for easy navigation in Visual Studio Code. | *(none)* | -| `Debug_ReturnRawResultObject` | Returns an unfiltered result object, for development only. | *(none)* | -| `Output_Verbosity` | Verbosity: `None`, `Normal`, `Detailed`, `Diagnostic`. | *(none)* | -| `Output_StackTraceVerbosity` | Stacktrace detail: `None`, `FirstLine`, `Filtered`, `Full`. | *(none)* | -| `Output_CIFormat` | CI format of error output: `None`, `Auto`, `AzureDevops`, `GithubActions`. | *(none)* | -| `Output_CILogLevel` | CI log level: `Error` or `Warning`. | *(none)* | -| `Output_RenderMode` | How to render console output: `Auto`, `Ansi`, `ConsoleColor`, `Plaintext`. | *(none)* | -| `TestDrive_Enabled` | Enable `TestDrive`. | *(none)* | -| `TestRegistry_Enabled` | Enable `TestRegistry`. | *(none)* | -| `Debug` | Enable debug output. | `'false'` | -| `Verbose` | Enable verbose output. | `'false'` | -| `Version` | Specifies the exact version of the GitHub module to install. | *(none)* | -| `Prerelease` | Allow prerelease versions if available. | `'false'` | -| `WorkingDirectory` | The working directory where the script runs. | `${{ github.workspace }}` | +| **Input** | **Description** | **Default** | +|--------------------------------------|--------------------------------------------------------------------------------------------------------|-------------| +| `Path` | Path to where tests are located or a configuration file. | *(none)* | +| `ReportAsJson` | Output generated reports in JSON format in addition to the configured format through Pester. | `true` | +| `Run_Path` | Directories/files to be searched for tests. | *(none)* | +| `Run_ExcludePath` | Directories/files to exclude from the run. | *(none)* | +| `Run_ScriptBlock` | ScriptBlocks containing tests to be executed. | *(none)* | +| `Run_Container` | ContainerInfo objects containing tests to be executed. | *(none)* | +| `Run_TestExtension` | Filter used to identify test files (e.g. `.Tests.ps1`). | *(none)* | +| `Run_Exit` | Whether to exit with a non-zero exit code on failure. | *(none)* | +| `Run_Throw` | Whether to throw an exception on test failure. | *(none)* | +| `Run_SkipRun` | Discovery only, skip actual test run. | *(none)* | +| `Run_SkipRemainingOnFailure` | Skips remaining tests after the first failure. Options: `None`, `Run`, `Container`, `Block`. | *(none)* | +| `Filter_Tag` | Tags of Describe/Context/It blocks to run. | *(none)* | +| `Filter_ExcludeTag` | Tags of Describe/Context/It blocks to exclude. | *(none)* | +| `Filter_Line` | Filter by file + scriptblock start line (e.g. `C:\tests\file1.Tests.ps1:37`). | *(none)* | +| `Filter_ExcludeLine` | Exclude by file + scriptblock start line. Precedence over `Filter_Line`. | *(none)* | +| `Filter_FullName` | Full name of a test with wildcards, joined by dot. E.g. `*.describe Get-Item.test1` | *(none)* | +| `CodeCoverage_Enabled` | Enable code coverage. | *(none)* | +| `CodeCoverage_OutputFormat` | Format for the coverage report. Possible values: `JaCoCo`, `CoverageGutters`, `Cobertura`. | *(none)* | +| `CodeCoverage_OutputPath` | Where to save the code coverage report (relative to the current dir). | *(none)* | +| `CodeCoverage_OutputEncoding` | Encoding of the coverage file. | *(none)* | +| `CodeCoverage_Path` | Files/directories to measure coverage on (by default, reuses `Path` from the general settings). | *(none)* | +| `CodeCoverage_ExcludeTests` | Exclude tests themselves from coverage. | *(none)* | +| `CodeCoverage_RecursePaths` | Recurse through coverage directories. | *(none)* | +| `CodeCoverage_CoveragePercentTarget` | Desired minimum coverage percentage. | *(none)* | +| `CodeCoverage_UseBreakpoints` | **Experimental**: When `false`, use a Profiler-based tracer instead of breakpoints. | *(none)* | +| `CodeCoverage_SingleHitBreakpoints` | Remove breakpoints after first hit. | *(none)* | +| `TestResult_Enabled` | Enable test-result output (e.g. NUnitXml, JUnitXml). | *(none)* | +| `TestResult_OutputFormat` | Possible values: `NUnitXml`, `NUnit2.5`, `NUnit3`, `JUnitXml`. | *(none)* | +| `TestResult_OutputPath` | Where to save the test-result report (relative path). | *(none)* | +| `TestResult_OutputEncoding` | Encoding of the test-result file. | *(none)* | +| `TestResult_TestSuiteName` | Name used for the root `test-suite` element in the result file. | *(none)* | +| `Should_ErrorAction` | Controls if `Should` throws on error. Use `Stop` to throw, or `Continue` to fail at the end. | *(none)* | +| `Debug_ShowFullErrors` | Show Pester internal stack on errors. (Deprecated – overrides `Output.StackTraceVerbosity` to `Full`). | *(none)* | +| `Debug_WriteDebugMessages` | Write debug messages to screen. | *(none)* | +| `Debug_WriteDebugMessagesFrom` | Filter debug messages by source. Wildcards allowed. | *(none)* | +| `Debug_ShowNavigationMarkers` | Write paths after every block/test for easy navigation in Visual Studio Code. | *(none)* | +| `Debug_ReturnRawResultObject` | Returns an unfiltered result object, for development only. | *(none)* | +| `Output_Verbosity` | Verbosity: `None`, `Normal`, `Detailed`, `Diagnostic`. | *(none)* | +| `Output_StackTraceVerbosity` | Stacktrace detail: `None`, `FirstLine`, `Filtered`, `Full`. | *(none)* | +| `Output_CIFormat` | CI format of error output: `None`, `Auto`, `AzureDevops`, `GithubActions`. | *(none)* | +| `Output_CILogLevel` | CI log level: `Error` or `Warning`. | *(none)* | +| `Output_RenderMode` | How to render console output: `Auto`, `Ansi`, `ConsoleColor`, `Plaintext`. | *(none)* | +| `TestDrive_Enabled` | Enable `TestDrive`. | *(none)* | +| `TestRegistry_Enabled` | Enable `TestRegistry`. | *(none)* | +| `Debug` | Enable debug output. | `'false'` | +| `Verbose` | Enable verbose output. | `'false'` | +| `Version` | Specifies the exact version of the GitHub module to install. | *(none)* | +| `Prerelease` | Allow prerelease versions if available. | `'false'` | +| `WorkingDirectory` | The working directory where the script runs. | `'.'` | ### Outputs diff --git a/action.yml b/action.yml index 546ac0ac..323f0cba 100644 --- a/action.yml +++ b/action.yml @@ -205,7 +205,7 @@ inputs: WorkingDirectory: description: The working directory where the script will run from. required: false - default: ${{ github.workspace }} + default: '.' runs: using: composite From 0a6707a88a20f0feb2905a65fc4572684cab47ce Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 11:23:04 +0100 Subject: [PATCH 02/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Enhance=20test?= =?UTF-8?q?=20file=20discovery=20by=20separating=20root=20and=20subfolder?= =?UTF-8?q?=20searches=20in=20initialization=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/init.ps1 | 22 +++++++++++++++++----- scripts/main.ps1 | 3 +++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/scripts/init.ps1 b/scripts/init.ps1 index 2a6d41b8..bb0bf8c1 100644 --- a/scripts/init.ps1 +++ b/scripts/init.ps1 @@ -194,20 +194,31 @@ LogGroup 'Init - Export containers' { $containerFiles = Get-ChildItem -Path $testDir -Filter *.Container.* -Recurse Write-Output "Containers found in [$testDir]: [$($containerFiles.Count)]" if ($containerFiles.Count -eq 0) { - # Look for test files and make a container for each test file. - $testFiles = Get-ChildItem -Path $testDir -Filter *.Tests.ps1 -Recurse - Write-Output "Test files found in [$testDir]: [$($testFiles.Count)]" + # First, look for test files directly in the test directory (non-recursive) + $rootTestFiles = Get-ChildItem -Path $testDir -Filter *.Tests.ps1 -File + Write-Output "Root level test files found in [$testDir]: [$($rootTestFiles.Count)]" + + # Then, look for test files in subdirectories + $subfolderTestFiles = Get-ChildItem -Path $testDir -Filter *.Tests.ps1 -Recurse -File | + Where-Object { $_.DirectoryName -ne $testDir } + Write-Output "Subfolder test files found in [$testDir]: [$($subfolderTestFiles.Count)]" + + # Combine all test files + $testFiles = $rootTestFiles + $subfolderTestFiles + Write-Output "Total test files found in [$testDir]: [$($testFiles.Count)]" + foreach ($testFile in $testFiles) { $container = @{ Path = $testFile.FullName } + $containerFileName = ($testFile | Split-Path -Leaf).Replace('.Tests.ps1', '.Container.ps1') LogGroup "Init - Export containers - Generated - $containerFileName" { - $containerFileName = ($testFile | Split-Path -Leaf).Replace('.Tests.ps1', '.Container.ps1') Write-Output "Exporting container [$path/$containerFileName]" Export-Hashtable -Hashtable $container -Path "$path/$containerFileName" } - Write-Output "Containers created from test files: [$($containers.Count)]" + $containers += $container } + Write-Output "Containers created from test files: [$($containers.Count)]" } foreach ($containerFile in $containerFiles) { $container = Import-Hashtable $containerFile @@ -217,6 +228,7 @@ LogGroup 'Init - Export containers' { Write-Output "Exporting container [$path/$containerFileName]" Export-Hashtable -Hashtable $container -Path "$path/$containerFileName" } + $containers += $container } } $configuration.Run.Container = @() diff --git a/scripts/main.ps1 b/scripts/main.ps1 index 51d32736..0e9ab4dd 100644 --- a/scripts/main.ps1 +++ b/scripts/main.ps1 @@ -33,6 +33,9 @@ if (-not (Test-Path -Path $configPath)) { exit 1 } Get-Content -Path $configPath -Raw +'::endgroup::' + +'::group::Exec - PesterConfiguration' $configuration = . $configPath $configuration.Run.Container = @() $containerFiles = Get-ChildItem -Path $path -Filter *.Container.* -Recurse | Sort-Object FullName From 403457af9a3fa21aac4e4922393261adf95def89 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 11:26:38 +0100 Subject: [PATCH 03/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Refactor=20test?= =?UTF-8?q?=20file=20combination=20to=20use=20a=20generic=20List=20for=20i?= =?UTF-8?q?mproved=20performance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/init.ps1 | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/init.ps1 b/scripts/init.ps1 index bb0bf8c1..b1f76f89 100644 --- a/scripts/init.ps1 +++ b/scripts/init.ps1 @@ -203,8 +203,14 @@ LogGroup 'Init - Export containers' { Where-Object { $_.DirectoryName -ne $testDir } Write-Output "Subfolder test files found in [$testDir]: [$($subfolderTestFiles.Count)]" - # Combine all test files - $testFiles = $rootTestFiles + $subfolderTestFiles + # Combine all test files using a generic List + $testFiles = [System.Collections.Generic.List[System.IO.FileInfo]]::new() + if ($rootTestFiles) { + $rootTestFiles | ForEach-Object { $testFiles.Add($_) } + } + if ($subfolderTestFiles) { + $subfolderTestFiles | ForEach-Object { $testFiles.Add($_) } + } Write-Output "Total test files found in [$testDir]: [$($testFiles.Count)]" foreach ($testFile in $testFiles) { From 556da9cbf661ceb343b7c1e7b990184708c1872f Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 11:37:27 +0100 Subject: [PATCH 04/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Enhance=20error?= =?UTF-8?q?=20handling=20in=20action.yml=20and=20main.ps1=20for=20test=20e?= =?UTF-8?q?xecution=20outcomes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- action.yml | 34 ++++++++++++++++++++++++++++++++-- scripts/main.ps1 | 1 + 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index 323f0cba..542137a6 100644 --- a/action.yml +++ b/action.yml @@ -298,9 +298,39 @@ runs: - name: Status shell: pwsh working-directory: ${{ inputs.WorkingDirectory }} + env: + PSMODULE_INVOKE_PESTER_INTERNAL_Executed: ${{ steps.test.outputs.Executed }} + PSMODULE_INVOKE_PESTER_INTERNAL_Outcome: ${{ steps.test.outcome }} + PSMODULE_INVOKE_PESTER_INTERNAL_Conclusion: ${{ steps.test.conclusion }} run: | - $outcome = '${{ steps.test.outcome }}' - Write-Host "outcome: [$outcome]" + $executed = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Executed + $outcome = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Outcome + $conclusion = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Conclusion + + [pscustomobject]@{ + Executed = $executed + Outcome = $outcome + Conclusion = $conclusion + } | Format-Table -AutoSize + + # If the tests did not execute, exit with a failure code + if ($executed -ne 'true') { + Write-Error "Tests did not execute." + exit 1 + } + # If the outcome is not success, exit with a failure code if ($outcome -ne 'success') { + Write-Error "Tests did not pass." + exit 1 + } + # If the conclusion is not success + if ($conclusion -ne 'success') { + Write-Error "Tests did not pass." + exit 1 + } + + + if ($outcome -ne 'success') { + exit 1 } diff --git a/scripts/main.ps1 b/scripts/main.ps1 index 0e9ab4dd..ef68eb2e 100644 --- a/scripts/main.ps1 +++ b/scripts/main.ps1 @@ -102,6 +102,7 @@ LogGroup 'Eval - Set outputs' { Set-GitHubOutput -Name 'TestResultOutputPath' -Value $testResultOutputFolderPath Set-GitHubOutput -Name 'CodeCoverageEnabled' -Value $testResults.Configuration.CodeCoverage.Enabled.Value Set-GitHubOutput -Name 'CodeCoverageOutputPath' -Value $codeCoverageOutputFolderPath + Set-GitHubOutput -Name 'Executed' -Value $testResults.Executed if ($env:PSMODULE_INVOKE_PESTER_INPUT_ReportAsJson -eq 'true' -and $testResults.Configuration.TestResult.Enabled.Value) { $jsonOutputPath = $testResults.Configuration.TestResult.OutputPath.Value -Replace '\.xml$', '.json' From 34d47cfe6cd4a35cd62751256488831a74e5e3fa Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 12:03:35 +0100 Subject: [PATCH 05/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Refactor=20test?= =?UTF-8?q?=20execution=20workflow=20to=20improve=20output=20handling=20an?= =?UTF-8?q?d=20streamline=20script=20execution?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/Auto-Release.yml | 2 -- action.yml | 19 ++++++++----------- scripts/main.ps1 | 2 +- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/.github/workflows/Auto-Release.yml b/.github/workflows/Auto-Release.yml index 1a580b87..db872f59 100644 --- a/.github/workflows/Auto-Release.yml +++ b/.github/workflows/Auto-Release.yml @@ -30,5 +30,3 @@ jobs: - name: Auto-Release uses: PSModule/Auto-Release@v1 - env: - GITHUB_TOKEN: ${{ github.token }} diff --git a/action.yml b/action.yml index 542137a6..2df9095e 100644 --- a/action.yml +++ b/action.yml @@ -268,14 +268,16 @@ runs: # Invoke-Pester (init) ${{ github.action_path }}/scripts/init.ps1 - - name: Invoke-Pester + - name: Invoke-Pester (exec) shell: pwsh continue-on-error: true working-directory: ${{ inputs.WorkingDirectory }} env: PSMODULE_INVOKE_PESTER_INPUT_ReportAsJson: ${{ inputs.ReportAsJson }} id: test - run: ${{ github.action_path }}/scripts/main.ps1 + run: | + # Invoke-Pester (exec) + ${{ github.action_path }}/scripts/exec.ps1 - name: Upload test results - [${{ steps.test.outputs.TestSuiteName }}-TestResults] uses: actions/upload-artifact@v4 @@ -299,11 +301,12 @@ runs: shell: pwsh working-directory: ${{ inputs.WorkingDirectory }} env: - PSMODULE_INVOKE_PESTER_INTERNAL_Executed: ${{ steps.test.outputs.Executed }} + PSMODULE_INVOKE_PESTER_INTERNAL_TestResults: ${{ steps.test.outputs.TestResults }} PSMODULE_INVOKE_PESTER_INTERNAL_Outcome: ${{ steps.test.outcome }} PSMODULE_INVOKE_PESTER_INTERNAL_Conclusion: ${{ steps.test.conclusion }} run: | - $executed = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Executed + $testResults = $env:PSMODULE_INVOKE_PESTER_INTERNAL_TestResults | ConvertFrom-Json + $testResults | Format-List | Out-String $outcome = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Outcome $conclusion = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Conclusion @@ -311,7 +314,7 @@ runs: Executed = $executed Outcome = $outcome Conclusion = $conclusion - } | Format-Table -AutoSize + } | Format-List | Out-String # If the tests did not execute, exit with a failure code if ($executed -ne 'true') { @@ -328,9 +331,3 @@ runs: Write-Error "Tests did not pass." exit 1 } - - - if ($outcome -ne 'success') { - - exit 1 - } diff --git a/scripts/main.ps1 b/scripts/main.ps1 index ef68eb2e..db5e8375 100644 --- a/scripts/main.ps1 +++ b/scripts/main.ps1 @@ -102,7 +102,7 @@ LogGroup 'Eval - Set outputs' { Set-GitHubOutput -Name 'TestResultOutputPath' -Value $testResultOutputFolderPath Set-GitHubOutput -Name 'CodeCoverageEnabled' -Value $testResults.Configuration.CodeCoverage.Enabled.Value Set-GitHubOutput -Name 'CodeCoverageOutputPath' -Value $codeCoverageOutputFolderPath - Set-GitHubOutput -Name 'Executed' -Value $testResults.Executed + Set-GitHubOutput -Name 'TestResults' -Value ($testResults | ConvertTo-Json -Depth 0 -Compress) if ($env:PSMODULE_INVOKE_PESTER_INPUT_ReportAsJson -eq 'true' -and $testResults.Configuration.TestResult.Enabled.Value) { $jsonOutputPath = $testResults.Configuration.TestResult.OutputPath.Value -Replace '\.xml$', '.json' From 04d1e60bb5f166fb29a6014b74c0fc929b7d5412 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 12:05:03 +0100 Subject: [PATCH 06/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Replace=20main.?= =?UTF-8?q?ps1=20with=20exec.ps1=20to=20consolidate=20test=20execution=20l?= =?UTF-8?q?ogic=20and=20improve=20maintainability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/{main.ps1 => exec.ps1} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/{main.ps1 => exec.ps1} (100%) diff --git a/scripts/main.ps1 b/scripts/exec.ps1 similarity index 100% rename from scripts/main.ps1 rename to scripts/exec.ps1 From 7b0d20dad7aea80c951e8bcee01fc88d3c18bc58 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 12:07:56 +0100 Subject: [PATCH 07/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Improve=20test?= =?UTF-8?q?=20result=20handling=20in=20action.yml=20by=20consolidating=20o?= =?UTF-8?q?utcome=20properties=20and=20enhancing=20error=20checks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- action.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/action.yml b/action.yml index 2df9095e..d002d568 100644 --- a/action.yml +++ b/action.yml @@ -305,29 +305,27 @@ runs: PSMODULE_INVOKE_PESTER_INTERNAL_Outcome: ${{ steps.test.outcome }} PSMODULE_INVOKE_PESTER_INTERNAL_Conclusion: ${{ steps.test.conclusion }} run: | + $PSStyle.OutputRendering = 'Ansi' $testResults = $env:PSMODULE_INVOKE_PESTER_INTERNAL_TestResults | ConvertFrom-Json - $testResults | Format-List | Out-String $outcome = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Outcome $conclusion = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Conclusion - [pscustomobject]@{ - Executed = $executed - Outcome = $outcome - Conclusion = $conclusion - } | Format-List | Out-String + $testResults | Add-Member -MemberType NoteProperty -Name Outcome -Value $outcome -Force + $testResults | Add-Member -MemberType NoteProperty -Name Conclusion -Value $conclusion -Force + $testResults | Format-List | Out-String # If the tests did not execute, exit with a failure code - if ($executed -ne 'true') { + if ($testResults.Executed -ne 'true') { Write-Error "Tests did not execute." exit 1 } # If the outcome is not success, exit with a failure code - if ($outcome -ne 'success') { + if ($testResults.Outcome -ne 'success') { Write-Error "Tests did not pass." exit 1 } # If the conclusion is not success - if ($conclusion -ne 'success') { + if ($testResults.Conclusion -ne 'success') { Write-Error "Tests did not pass." exit 1 } From 86bfa45144d9415f8f54b727633840da397726cf Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 12:17:13 +0100 Subject: [PATCH 08/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Add=20outputs?= =?UTF-8?q?=20for=20test=20results,=20outcome,=20and=20conclusion=20in=20a?= =?UTF-8?q?ction.yml=20and=20update=20README.md=20with=20usage=20examples?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++--- action.yml | 15 ++++++++++ 2 files changed, 95 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 02cc5303..fae34013 100644 --- a/README.md +++ b/README.md @@ -306,8 +306,84 @@ jobs: ### Outputs -No outputs are provided directly by this action. Instead, use the step's **outcome** and **conclusion** properties along with the published outputs -listed above to control the subsequent flow of your workflow. +The action provides the following outputs: -The provided example workflows demonstrate how you can use these outputs to control the flow. For instance, the **Status** steps in the test -workflows print the `outcome` and `conclusion` values, and a later job aggregates these values to decide whether to continue or abort the workflow. +| Output | Description | +| ------ | ----------- | +| `TestResults` | The test results in JSON format. This output can be used in subsequent workflow steps to process or display test results. | +| `Outcome` | The outcome of the test run (`success` or `failure`). This can be used to conditionally execute steps based on test results. | +| `Conclusion` | The conclusion of the test run (`success` or `failure`). Similar to Outcome but can be used for workflow control. | + +## Examples + +### Basic Usage + +```yaml +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Run Pester tests + uses: PSModule/Invoke-Pester@v1 + with: + Path: './tests' +``` + +### Using Test Results in Subsequent Steps + +```yaml +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Run Pester tests + id: pester + uses: PSModule/Invoke-Pester@v1 + with: + Path: './tests' + TestResult_Enabled: 'true' + TestResult_OutputPath: './test-results.xml' + + - name: Process test results + if: always() + run: | + $testResults = '${{ steps.pester.outputs.TestResults }}' | ConvertFrom-Json + Write-Output "Total tests: $($testResults.TotalCount)" + Write-Output "Passed tests: $($testResults.PassedCount)" + Write-Output "Failed tests: $($testResults.FailedCount)" + Write-Output "Test outcome: ${{ steps.pester.outputs.Outcome }}" + shell: pwsh + + - name: Take action based on test outcome + if: steps.pester.outputs.Outcome == 'success' + run: echo "All tests passed! Ready to proceed with deployment." +``` + +### With Code Coverage + +```yaml +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Run Pester tests with code coverage + id: pester + uses: PSModule/Invoke-Pester@v1 + with: + Path: './tests' + CodeCoverage_Enabled: 'true' + CodeCoverage_Path: './src' + CodeCoverage_OutputPath: './coverage.xml' + CodeCoverage_OutputFormat: 'JaCoCo' +``` + +## See Also + +- [Pester Documentation](https://pester.dev/) +- [PowerShell Documentation](https://docs.microsoft.com/en-us/powershell/) diff --git a/action.yml b/action.yml index d002d568..a8196a91 100644 --- a/action.yml +++ b/action.yml @@ -207,6 +207,20 @@ inputs: required: false default: '.' +outputs: + TestResults: + description: | + The test results in JSON format. + value: ${{ steps.test.outputs.TestResults }} + Outcome: + description: | + The outcome of the test run. + value: ${{ steps.test.outcome }} + Conclusion: + description: | + The conclusion of the test run. + value: ${{ steps.test.conclusion }} + runs: using: composite steps: @@ -305,6 +319,7 @@ runs: PSMODULE_INVOKE_PESTER_INTERNAL_Outcome: ${{ steps.test.outcome }} PSMODULE_INVOKE_PESTER_INTERNAL_Conclusion: ${{ steps.test.conclusion }} run: | + # Status $PSStyle.OutputRendering = 'Ansi' $testResults = $env:PSMODULE_INVOKE_PESTER_INTERNAL_TestResults | ConvertFrom-Json $outcome = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Outcome From b9a84ec0215cb5ab73f67409944b7b885fcb9907 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 12:27:39 +0100 Subject: [PATCH 09/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Add=20new=20tes?= =?UTF-8?q?t=20job=20for=20simple=20execution=20failure=20in=20Action-Test?= =?UTF-8?q?.yml=20and=20create=20corresponding=20test=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/Action-Test.yml | 44 +++++++++++++++++++ .../ExecutionFailure.Tests.ps1 | 15 +++++++ 2 files changed, 59 insertions(+) create mode 100644 tests/1-Simple-ExecutionFailure/ExecutionFailure.Tests.ps1 diff --git a/.github/workflows/Action-Test.yml b/.github/workflows/Action-Test.yml index 66a407e8..c92ec539 100644 --- a/.github/workflows/Action-Test.yml +++ b/.github/workflows/Action-Test.yml @@ -64,6 +64,30 @@ jobs: Write-Host "Outcome: ${{ steps.action-test.outcome }}" Write-Host "Conclusion: ${{ steps.action-test.conclusion }}" + ActionTest1SimpleExecutionFailure: + name: Action-Test - [1-Simple-ExecutionFailure] + runs-on: ubuntu-latest + outputs: + outcome: ${{ steps.action-test.outcome }} + conclusion: ${{ steps.action-test.conclusion }} + steps: + # Need to check out as part of the test, as its a local action + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Action-Test [1-Simple-ExecutionFailure] + uses: ./ + id: action-test + continue-on-error: true + with: + WorkingDirectory: tests/1-Simple-ExecutionFailure + + - name: Status + shell: pwsh + run: | + Write-Host "Outcome: ${{ steps.action-test.outcome }}" + Write-Host "Conclusion: ${{ steps.action-test.conclusion }}" + ActionTest2Standard: name: Action-Test - [2-Standard] runs-on: ubuntu-latest @@ -117,6 +141,7 @@ jobs: needs: - ActionTest1Simple - ActionTest1SimpleFailure + - ActionTest1SimpleExecutionFailure - ActionTest2Standard - ActionTest3Advanced if: always() @@ -135,18 +160,28 @@ jobs: $ActionTest1SimpleConclusion = "${{ needs.ActionTest1Simple.outputs.conclusion }}" $ActionTest1SimpleExpectedConclusion = "success" $ActionTest1SimpleConclusionResult = $ActionTest1SimpleConclusion -eq $ActionTest1SimpleExpectedConclusion + $ActionTest1SimpleFailureOutcome = "${{ needs.ActionTest1SimpleFailure.outputs.outcome }}" $ActionTest1SimpleFailureExpectedOutcome = "failure" $ActionTest1SimpleFailureOutcomeResult = $ActionTest1SimpleFailureOutcome -eq $ActionTest1SimpleFailureExpectedOutcome $ActionTest1SimpleFailureConclusion = "${{ needs.ActionTest1SimpleFailure.outputs.conclusion }}" $ActionTest1SimpleFailureExpectedConclusion = "success" $ActionTest1SimpleFailureConclusionResult = $ActionTest1SimpleFailureConclusion -eq $ActionTest1SimpleFailureExpectedConclusion + + $ActionTest1SimpleExecutionFailureOutcome = "${{ needs.ActionTest1SimpleExecutionFailure.outputs.outcome }}" + $ActionTest1SimpleExecutionFailureExpectedOutcome = "failure" + $ActionTest1SimpleExecutionFailureOutcomeResult = $ActionTest1SimpleExecutionFailureOutcome -eq $ActionTest1SimpleExecutionFailureExpectedOutcome + $ActionTest1SimpleExecutionFailureConclusion = "${{ needs.ActionTest1SimpleExecutionFailure.outputs.conclusion }}" + $ActionTest1SimpleExecutionFailureExpectedConclusion = "success" + $ActionTest1SimpleExecutionFailureConclusionResult = $ActionTest1SimpleExecutionFailureConclusion -eq $ActionTest1SimpleExecutionFailureExpectedConclusion + $ActionTest2StandardOutcome = "${{ needs.ActionTest2Standard.outputs.outcome }}" $ActionTest2StandardExpectedOutcome = "success" $ActionTest2StandardOutcomeResult = $ActionTest2StandardOutcome -eq $ActionTest2StandardExpectedOutcome $ActionTest2StandardConclusion = "${{ needs.ActionTest2Standard.outputs.conclusion }}" $ActionTest2StandardExpectedConclusion = "success" $ActionTest2StandardConclusionResult = $ActionTest2StandardConclusion -eq $ActionTest2StandardExpectedConclusion + $ActionTest3AdvancedOutcome = "${{ needs.ActionTest3Advanced.outputs.outcome }}" $ActionTest3AdvancedExpectedOutcome = "success" $ActionTest3AdvancedOutcomeResult = $ActionTest3AdvancedOutcome -eq $ActionTest3AdvancedExpectedOutcome @@ -173,6 +208,15 @@ jobs: ExpectedConclusion = $ActionTest1SimpleFailureExpectedConclusion PassedConclusion = $ActionTest1SimpleFailureConclusionResult }, + [PSCustomObject]@{ + Name = "Action-Test - [1-Simple-ExecutionFailure]" + Outcome = $ActionTest1SimpleExecutionFailureOutcome + ExpectedOutcome = $ActionTest1SimpleExecutionFailureExpectedOutcome + PassedOutcome = $ActionTest1SimpleExecutionFailureOutcomeResult + Conclusion = $ActionTest1SimpleExecutionFailureConclusion + ExpectedConclusion = $ActionTest1SimpleExecutionFailureExpectedConclusion + PassedConclusion = $ActionTest1SimpleExecutionFailureConclusionResult + }, [PSCustomObject]@{ Name = "Action-Test - [2-Standard]" Outcome = $ActionTest2StandardOutcome diff --git a/tests/1-Simple-ExecutionFailure/ExecutionFailure.Tests.ps1 b/tests/1-Simple-ExecutionFailure/ExecutionFailure.Tests.ps1 new file mode 100644 index 00000000..5952d3dc --- /dev/null +++ b/tests/1-Simple-ExecutionFailure/ExecutionFailure.Tests.ps1 @@ -0,0 +1,15 @@ +[Diagnostics.CodeAnalysis.SuppressMessageAttribute( + 'PSReviewUnusedParameter', '', + Justification = 'Required for Pester tests' +)] +[Diagnostics.CodeAnalysis.SuppressMessageAttribute( + 'PSUseDeclaredVarsMoreThanAssignments', '', + Justification = 'Required for Pester tests' +)] +[CmdletBinding()] +param( + [Parameter(Mandatory)] + [string] $Path +) + +Describe 'Failure' {} From 2d95d198382cd0fdd19e3e8c09287f5015d97d99 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 12:30:22 +0100 Subject: [PATCH 10/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Remove=20obsole?= =?UTF-8?q?te=20ExecutionFailure.Tests.ps1=20and=20replace=20with=20placeh?= =?UTF-8?q?older=20ExecutionFailure.ps1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExecutionFailure.Tests.ps1 | 15 --------------- .../ExecutionFailure.ps1 | 1 + 2 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 tests/1-Simple-ExecutionFailure/ExecutionFailure.Tests.ps1 create mode 100644 tests/1-Simple-ExecutionFailure/ExecutionFailure.ps1 diff --git a/tests/1-Simple-ExecutionFailure/ExecutionFailure.Tests.ps1 b/tests/1-Simple-ExecutionFailure/ExecutionFailure.Tests.ps1 deleted file mode 100644 index 5952d3dc..00000000 --- a/tests/1-Simple-ExecutionFailure/ExecutionFailure.Tests.ps1 +++ /dev/null @@ -1,15 +0,0 @@ -[Diagnostics.CodeAnalysis.SuppressMessageAttribute( - 'PSReviewUnusedParameter', '', - Justification = 'Required for Pester tests' -)] -[Diagnostics.CodeAnalysis.SuppressMessageAttribute( - 'PSUseDeclaredVarsMoreThanAssignments', '', - Justification = 'Required for Pester tests' -)] -[CmdletBinding()] -param( - [Parameter(Mandatory)] - [string] $Path -) - -Describe 'Failure' {} diff --git a/tests/1-Simple-ExecutionFailure/ExecutionFailure.ps1 b/tests/1-Simple-ExecutionFailure/ExecutionFailure.ps1 new file mode 100644 index 00000000..f6c246b2 --- /dev/null +++ b/tests/1-Simple-ExecutionFailure/ExecutionFailure.ps1 @@ -0,0 +1 @@ +"Not a testfile" From 9ca1e6ab26d51f63c402a9ba22a963fe0858fa5c Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 12:34:43 +0100 Subject: [PATCH 11/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Refactor=20test?= =?UTF-8?q?=20result=20handling=20in=20action.yml=20to=20use=20a=20custom?= =?UTF-8?q?=20object=20for=20outcome=20and=20conclusion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- action.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/action.yml b/action.yml index a8196a91..387cf997 100644 --- a/action.yml +++ b/action.yml @@ -324,11 +324,13 @@ runs: $testResults = $env:PSMODULE_INVOKE_PESTER_INTERNAL_TestResults | ConvertFrom-Json $outcome = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Outcome $conclusion = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Conclusion - - $testResults | Add-Member -MemberType NoteProperty -Name Outcome -Value $outcome -Force - $testResults | Add-Member -MemberType NoteProperty -Name Conclusion -Value $conclusion -Force $testResults | Format-List | Out-String + [PSCustomObject]@{ + Outcome = $outcome + Conclusion = $conclusion + } | Format-List | Out-String + # If the tests did not execute, exit with a failure code if ($testResults.Executed -ne 'true') { Write-Error "Tests did not execute." From 84c71d502c3bf7aa070b3ea86254aad714fa28fb Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 12:37:40 +0100 Subject: [PATCH 12/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Disable=20conti?= =?UTF-8?q?nue-on-error=20for=20test=20jobs=20in=20Action-Test.yml=20and?= =?UTF-8?q?=20remove=20redundant=20outcome=20checks=20in=20action.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/Action-Test.yml | 4 ++-- action.yml | 10 ---------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/.github/workflows/Action-Test.yml b/.github/workflows/Action-Test.yml index c92ec539..8aa398a2 100644 --- a/.github/workflows/Action-Test.yml +++ b/.github/workflows/Action-Test.yml @@ -54,7 +54,7 @@ jobs: - name: Action-Test [1-Simple-Failure] uses: ./ id: action-test - continue-on-error: true + # continue-on-error: true with: WorkingDirectory: tests/1-Simple-Failure @@ -78,7 +78,7 @@ jobs: - name: Action-Test [1-Simple-ExecutionFailure] uses: ./ id: action-test - continue-on-error: true + # continue-on-error: true with: WorkingDirectory: tests/1-Simple-ExecutionFailure diff --git a/action.yml b/action.yml index 387cf997..a1b235ea 100644 --- a/action.yml +++ b/action.yml @@ -336,13 +336,3 @@ runs: Write-Error "Tests did not execute." exit 1 } - # If the outcome is not success, exit with a failure code - if ($testResults.Outcome -ne 'success') { - Write-Error "Tests did not pass." - exit 1 - } - # If the conclusion is not success - if ($testResults.Conclusion -ne 'success') { - Write-Error "Tests did not pass." - exit 1 - } From ec33c4c7ddbb31f66c248070ed41258a4da9703c Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 12:39:52 +0100 Subject: [PATCH 13/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Enable=20contin?= =?UTF-8?q?ue-on-error=20for=20test=20jobs=20in=20Action-Test.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/Action-Test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Action-Test.yml b/.github/workflows/Action-Test.yml index 8aa398a2..c92ec539 100644 --- a/.github/workflows/Action-Test.yml +++ b/.github/workflows/Action-Test.yml @@ -54,7 +54,7 @@ jobs: - name: Action-Test [1-Simple-Failure] uses: ./ id: action-test - # continue-on-error: true + continue-on-error: true with: WorkingDirectory: tests/1-Simple-Failure @@ -78,7 +78,7 @@ jobs: - name: Action-Test [1-Simple-ExecutionFailure] uses: ./ id: action-test - # continue-on-error: true + continue-on-error: true with: WorkingDirectory: tests/1-Simple-ExecutionFailure From 0f985cf05c3316d27de2ce768ae647059bde09bc Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 12:40:51 +0100 Subject: [PATCH 14/28] =?UTF-8?q?=F0=9F=A9=B9=20[Patch]:=20Enhance=20error?= =?UTF-8?q?=20handling=20in=20action.yml=20to=20check=20for=20test=20outco?= =?UTF-8?q?me=20and=20conclusion=20success?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- action.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/action.yml b/action.yml index a1b235ea..387cf997 100644 --- a/action.yml +++ b/action.yml @@ -336,3 +336,13 @@ runs: Write-Error "Tests did not execute." exit 1 } + # If the outcome is not success, exit with a failure code + if ($testResults.Outcome -ne 'success') { + Write-Error "Tests did not pass." + exit 1 + } + # If the conclusion is not success + if ($testResults.Conclusion -ne 'success') { + Write-Error "Tests did not pass." + exit 1 + } From ed3e57861844ebbf87dc7b103c717842ead318ba Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 12:42:14 +0100 Subject: [PATCH 15/28] Refactor outcome and conclusion checks in action.yml for improved clarity --- action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index 387cf997..0ff95118 100644 --- a/action.yml +++ b/action.yml @@ -337,12 +337,12 @@ runs: exit 1 } # If the outcome is not success, exit with a failure code - if ($testResults.Outcome -ne 'success') { + if ($outcome -ne 'success') { Write-Error "Tests did not pass." exit 1 } # If the conclusion is not success - if ($testResults.Conclusion -ne 'success') { + if ($conclusion -ne 'success') { Write-Error "Tests did not pass." exit 1 } From b8f4a9c65ea60b0b403cd3bd951ceca5f5481c0b Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 13:02:05 +0100 Subject: [PATCH 16/28] Refactor error handling in action.yml for better clarity and maintainability --- .github/workflows/Action-Test.yml | 147 +++++++++++++++++++++++++++--- 1 file changed, 136 insertions(+), 11 deletions(-) diff --git a/.github/workflows/Action-Test.yml b/.github/workflows/Action-Test.yml index c92ec539..b327f757 100644 --- a/.github/workflows/Action-Test.yml +++ b/.github/workflows/Action-Test.yml @@ -21,8 +21,10 @@ jobs: name: Action-Test - [1-Simple] runs-on: ubuntu-latest outputs: - outcome: ${{ steps.action-test.outcome }} - conclusion: ${{ steps.action-test.conclusion }} + Outcome: ${{ steps.action-test.outcome }} + Conclusion: ${{ steps.action-test.conclusion }} + TestResults: ${{ steps.action-test.outputs.TestResults }} + steps: # Need to check out as part of the test, as its a local action - name: Checkout repo @@ -44,8 +46,9 @@ jobs: name: Action-Test - [1-Simple-Failure] runs-on: ubuntu-latest outputs: - outcome: ${{ steps.action-test.outcome }} - conclusion: ${{ steps.action-test.conclusion }} + Outcome: ${{ steps.action-test.outcome }} + Conclusion: ${{ steps.action-test.conclusion }} + TestResults: ${{ steps.action-test.outputs.TestResults }} steps: # Need to check out as part of the test, as its a local action - name: Checkout repo @@ -68,8 +71,9 @@ jobs: name: Action-Test - [1-Simple-ExecutionFailure] runs-on: ubuntu-latest outputs: - outcome: ${{ steps.action-test.outcome }} - conclusion: ${{ steps.action-test.conclusion }} + Outcome: ${{ steps.action-test.outcome }} + Conclusion: ${{ steps.action-test.conclusion }} + TestResults: ${{ steps.action-test.outputs.TestResults }} steps: # Need to check out as part of the test, as its a local action - name: Checkout repo @@ -92,8 +96,9 @@ jobs: name: Action-Test - [2-Standard] runs-on: ubuntu-latest outputs: - outcome: ${{ steps.action-test.outcome }} - conclusion: ${{ steps.action-test.conclusion }} + Outcome: ${{ steps.action-test.outcome }} + Conclusion: ${{ steps.action-test.conclusion }} + TestResults: ${{ steps.action-test.outputs.TestResults }} steps: # Need to check out as part of the test, as its a local action - name: Checkout repo @@ -116,8 +121,9 @@ jobs: name: Action-Test - [3-Advanced] runs-on: ubuntu-latest outputs: - outcome: ${{ steps.action-test.outcome }} - conclusion: ${{ steps.action-test.conclusion }} + Outcome: ${{ steps.action-test.outcome }} + Conclusion: ${{ steps.action-test.conclusion }} + TestResults: ${{ steps.action-test.outputs.TestResults }} steps: # Need to check out as part of the test, as its a local action - name: Checkout repo @@ -161,6 +167,23 @@ jobs: $ActionTest1SimpleExpectedConclusion = "success" $ActionTest1SimpleConclusionResult = $ActionTest1SimpleConclusion -eq $ActionTest1SimpleExpectedConclusion + $ActionTest1SimpleTestResults = "${{ needs.ActionTest1Simple.outputs.TestResults }}" + $ActionTest1SimpleExecuted = -not [string]::IsNullOrEmpty($ActionTest1SimpleTestResults) + $ActionTest1SimpleTestsPassed = $false + if ($ActionTest1SimpleExecuted) { + try { + $testData = $ActionTest1SimpleTestResults | ConvertFrom-Json + $ActionTest1SimpleTestsPassed = $testData.FailedCount -eq 0 + } catch { + Write-Warning "Failed to parse ActionTest1Simple test results: $_" + } + } + + $ActionTest1SimpleExpectedExecuted = $true + $ActionTest1SimplePassedExecuted = $ActionTest1SimpleExecuted -eq $ActionTest1SimpleExpectedExecuted + $ActionTest1SimpleExpectedPassed = $true + $ActionTest1SimplePassedPassed = $ActionTest1SimpleTestsPassed -eq $ActionTest1SimpleExpectedPassed + $ActionTest1SimpleFailureOutcome = "${{ needs.ActionTest1SimpleFailure.outputs.outcome }}" $ActionTest1SimpleFailureExpectedOutcome = "failure" $ActionTest1SimpleFailureOutcomeResult = $ActionTest1SimpleFailureOutcome -eq $ActionTest1SimpleFailureExpectedOutcome @@ -168,6 +191,24 @@ jobs: $ActionTest1SimpleFailureExpectedConclusion = "success" $ActionTest1SimpleFailureConclusionResult = $ActionTest1SimpleFailureConclusion -eq $ActionTest1SimpleFailureExpectedConclusion + $ActionTest1SimpleFailureTestResults = "${{ needs.ActionTest1SimpleFailure.outputs.TestResults }}" + $ActionTest1SimpleFailureExecuted = -not [string]::IsNullOrEmpty($ActionTest1SimpleFailureTestResults) + $ActionTest1SimpleFailureTestsPassed = $false + if ($ActionTest1SimpleFailureExecuted) { + try { + $testData = $ActionTest1SimpleFailureTestResults | ConvertFrom-Json + # This one is expected to fail, so invert the logic + $ActionTest1SimpleFailureTestsPassed = $testData.FailedCount -gt 0 + } catch { + Write-Warning "Failed to parse ActionTest1SimpleFailure test results: $_" + } + } + + $ActionTest1SimpleFailureExpectedExecuted = $true + $ActionTest1SimpleFailurePassedExecuted = $ActionTest1SimpleFailureExecuted -eq $ActionTest1SimpleFailureExpectedExecuted + $ActionTest1SimpleFailureExpectedPassed = $true + $ActionTest1SimpleFailurePassedPassed = $ActionTest1SimpleFailureTestsPassed -eq $ActionTest1SimpleFailureExpectedPassed + $ActionTest1SimpleExecutionFailureOutcome = "${{ needs.ActionTest1SimpleExecutionFailure.outputs.outcome }}" $ActionTest1SimpleExecutionFailureExpectedOutcome = "failure" $ActionTest1SimpleExecutionFailureOutcomeResult = $ActionTest1SimpleExecutionFailureOutcome -eq $ActionTest1SimpleExecutionFailureExpectedOutcome @@ -175,6 +216,16 @@ jobs: $ActionTest1SimpleExecutionFailureExpectedConclusion = "success" $ActionTest1SimpleExecutionFailureConclusionResult = $ActionTest1SimpleExecutionFailureConclusion -eq $ActionTest1SimpleExecutionFailureExpectedConclusion + $ActionTest1SimpleExecutionFailureTestResults = "${{ needs.ActionTest1SimpleExecutionFailure.outputs.TestResults }}" + $ActionTest1SimpleExecutionFailureExecuted = -not [string]::IsNullOrEmpty($ActionTest1SimpleExecutionFailureTestResults) + # For execution failure, we don't expect valid test results + $ActionTest1SimpleExecutionFailureTestsPassed = $true + + $ActionTest1SimpleExecutionFailureExpectedExecuted = $true + $ActionTest1SimpleExecutionFailurePassedExecuted = $ActionTest1SimpleExecutionFailureExecuted -eq $ActionTest1SimpleExecutionFailureExpectedExecuted + $ActionTest1SimpleExecutionFailureExpectedPassed = $true + $ActionTest1SimpleExecutionFailurePassedPassed = $ActionTest1SimpleExecutionFailureTestsPassed -eq $ActionTest1SimpleExecutionFailureExpectedPassed + $ActionTest2StandardOutcome = "${{ needs.ActionTest2Standard.outputs.outcome }}" $ActionTest2StandardExpectedOutcome = "success" $ActionTest2StandardOutcomeResult = $ActionTest2StandardOutcome -eq $ActionTest2StandardExpectedOutcome @@ -182,6 +233,23 @@ jobs: $ActionTest2StandardExpectedConclusion = "success" $ActionTest2StandardConclusionResult = $ActionTest2StandardConclusion -eq $ActionTest2StandardExpectedConclusion + $ActionTest2StandardTestResults = "${{ needs.ActionTest2Standard.outputs.TestResults }}" + $ActionTest2StandardExecuted = -not [string]::IsNullOrEmpty($ActionTest2StandardTestResults) + $ActionTest2StandardTestsPassed = $false + if ($ActionTest2StandardExecuted) { + try { + $testData = $ActionTest2StandardTestResults | ConvertFrom-Json + $ActionTest2StandardTestsPassed = $testData.FailedCount -eq 0 + } catch { + Write-Warning "Failed to parse ActionTest2Standard test results: $_" + } + } + + $ActionTest2StandardExpectedExecuted = $true + $ActionTest2StandardPassedExecuted = $ActionTest2StandardExecuted -eq $ActionTest2StandardExpectedExecuted + $ActionTest2StandardExpectedPassed = $true + $ActionTest2StandardPassedPassed = $ActionTest2StandardTestsPassed -eq $ActionTest2StandardExpectedPassed + $ActionTest3AdvancedOutcome = "${{ needs.ActionTest3Advanced.outputs.outcome }}" $ActionTest3AdvancedExpectedOutcome = "success" $ActionTest3AdvancedOutcomeResult = $ActionTest3AdvancedOutcome -eq $ActionTest3AdvancedExpectedOutcome @@ -189,6 +257,23 @@ jobs: $ActionTest3AdvancedExpectedConclusion = "success" $ActionTest3AdvancedConclusionResult = $ActionTest3AdvancedConclusion -eq $ActionTest3AdvancedExpectedConclusion + $ActionTest3AdvancedTestResults = "${{ needs.ActionTest3Advanced.outputs.TestResults }}" + $ActionTest3AdvancedExecuted = -not [string]::IsNullOrEmpty($ActionTest3AdvancedTestResults) + $ActionTest3AdvancedTestsPassed = $false + if ($ActionTest3AdvancedExecuted) { + try { + $testData = $ActionTest3AdvancedTestResults | ConvertFrom-Json + $ActionTest3AdvancedTestsPassed = $testData.FailedCount -eq 0 + } catch { + Write-Warning "Failed to parse ActionTest3Advanced test results: $_" + } + } + + $ActionTest3AdvancedExpectedExecuted = $true + $ActionTest3AdvancedPassedExecuted = $ActionTest3AdvancedExecuted -eq $ActionTest3AdvancedExpectedExecuted + $ActionTest3AdvancedExpectedPassed = $true + $ActionTest3AdvancedPassedPassed = $ActionTest3AdvancedTestsPassed -eq $ActionTest3AdvancedExpectedPassed + $jobs = @( [PSCustomObject]@{ Name = "Action-Test - [1-Simple]" @@ -198,6 +283,12 @@ jobs: Conclusion = $ActionTest1SimpleConclusion ExpectedConclusion = $ActionTest1SimpleExpectedConclusion PassedConclusion = $ActionTest1SimpleConclusionResult + Executed = $ActionTest1SimpleExecuted + ExpectedExecuted = $ActionTest1SimpleExpectedExecuted + PassedExecuted = $ActionTest1SimplePassedExecuted + Passed = $ActionTest1SimpleTestsPassed + ExpectedPassed = $ActionTest1SimpleExpectedPassed + PassedPassed = $ActionTest1SimplePassedPassed }, [PSCustomObject]@{ Name = "Action-Test - [1-Simple-Failure]" @@ -207,6 +298,12 @@ jobs: Conclusion = $ActionTest1SimpleFailureConclusion ExpectedConclusion = $ActionTest1SimpleFailureExpectedConclusion PassedConclusion = $ActionTest1SimpleFailureConclusionResult + Executed = $ActionTest1SimpleFailureExecuted + ExpectedExecuted = $ActionTest1SimpleFailureExpectedExecuted + PassedExecuted = $ActionTest1SimpleFailurePassedExecuted + Passed = $ActionTest1SimpleFailureTestsPassed + ExpectedPassed = $ActionTest1SimpleFailureExpectedPassed + PassedPassed = $ActionTest1SimpleFailurePassedPassed }, [PSCustomObject]@{ Name = "Action-Test - [1-Simple-ExecutionFailure]" @@ -216,6 +313,12 @@ jobs: Conclusion = $ActionTest1SimpleExecutionFailureConclusion ExpectedConclusion = $ActionTest1SimpleExecutionFailureExpectedConclusion PassedConclusion = $ActionTest1SimpleExecutionFailureConclusionResult + Executed = $ActionTest1SimpleExecutionFailureExecuted + ExpectedExecuted = $ActionTest1SimpleExecutionFailureExpectedExecuted + PassedExecuted = $ActionTest1SimpleExecutionFailurePassedExecuted + Passed = $ActionTest1SimpleExecutionFailureTestsPassed + ExpectedPassed = $ActionTest1SimpleExecutionFailureExpectedPassed + PassedPassed = $ActionTest1SimpleExecutionFailurePassedPassed }, [PSCustomObject]@{ Name = "Action-Test - [2-Standard]" @@ -225,6 +328,12 @@ jobs: Conclusion = $ActionTest2StandardConclusion ExpectedConclusion = $ActionTest2StandardExpectedConclusion PassedConclusion = $ActionTest2StandardConclusionResult + Executed = $ActionTest2StandardExecuted + ExpectedExecuted = $ActionTest2StandardExpectedExecuted + PassedExecuted = $ActionTest2StandardPassedExecuted + Passed = $ActionTest2StandardTestsPassed + ExpectedPassed = $ActionTest2StandardExpectedPassed + PassedPassed = $ActionTest2StandardPassedPassed }, [PSCustomObject]@{ Name = "Action-Test - [3-Advanced]" @@ -234,11 +343,17 @@ jobs: Conclusion = $ActionTest3AdvancedConclusion ExpectedConclusion = $ActionTest3AdvancedExpectedConclusion PassedConclusion = $ActionTest3AdvancedConclusionResult + Executed = $ActionTest3AdvancedExecuted + ExpectedExecuted = $ActionTest3AdvancedExpectedExecuted + PassedExecuted = $ActionTest3AdvancedPassedExecuted + Passed = $ActionTest3AdvancedTestsPassed + ExpectedPassed = $ActionTest3AdvancedExpectedPassed + PassedPassed = $ActionTest3AdvancedPassedPassed } ) # Display the table in the workflow logs - $jobs | Format-List + $jobs | Format-Table -AutoSize | Out-String $passed = $true $jobs | ForEach-Object { @@ -251,6 +366,16 @@ jobs: Write-Error "Job $($_.Name) failed with Conclusion $($_.Conclusion) and Expected Conclusion $($_.ExpectedConclusion)" $passed = $false } + + if (-not $_.PassedExecuted) { + Write-Error "Job $($_.Name) not executed as expected. (Actual: $($_.Executed), Expected: $($_.ExpectedExecuted))" + $passed = $false + } + + if (-not $_.PassedPassed) { + Write-Error "Job $($_.Name) tests did not pass as expected. (Actual: $($_.Passed), Expected: $($_.ExpectedPassed))" + $passed = $false + } } $icon = if ($passed) { '✅' } else { '❌' } From e18fcac77e79ecf8b4c3f699adbdd8f17e29e9f7 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 13:06:22 +0100 Subject: [PATCH 17/28] Refactor string interpolation in Action-Test.yml for consistency and clarity --- .github/workflows/Action-Test.yml | 50 +++++++++++++++---------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/workflows/Action-Test.yml b/.github/workflows/Action-Test.yml index b327f757..27310684 100644 --- a/.github/workflows/Action-Test.yml +++ b/.github/workflows/Action-Test.yml @@ -160,14 +160,14 @@ jobs: Install-PSResource -Name Markdown -Repository PSGallery -TrustRepository # Build an array of objects for each job - $ActionTest1SimpleOutcome = "${{ needs.ActionTest1Simple.outputs.outcome }}" - $ActionTest1SimpleExpectedOutcome = "success" + $ActionTest1SimpleOutcome = '${{ needs.ActionTest1Simple.outputs.outcome }}' + $ActionTest1SimpleExpectedOutcome = 'success' $ActionTest1SimpleOutcomeResult = $ActionTest1SimpleOutcome -eq $ActionTest1SimpleExpectedOutcome - $ActionTest1SimpleConclusion = "${{ needs.ActionTest1Simple.outputs.conclusion }}" - $ActionTest1SimpleExpectedConclusion = "success" + $ActionTest1SimpleConclusion = '${{ needs.ActionTest1Simple.outputs.conclusion }}' + $ActionTest1SimpleExpectedConclusion = 'success' $ActionTest1SimpleConclusionResult = $ActionTest1SimpleConclusion -eq $ActionTest1SimpleExpectedConclusion - $ActionTest1SimpleTestResults = "${{ needs.ActionTest1Simple.outputs.TestResults }}" + $ActionTest1SimpleTestResults = '${{ needs.ActionTest1Simple.outputs.TestResults }}' $ActionTest1SimpleExecuted = -not [string]::IsNullOrEmpty($ActionTest1SimpleTestResults) $ActionTest1SimpleTestsPassed = $false if ($ActionTest1SimpleExecuted) { @@ -184,14 +184,14 @@ jobs: $ActionTest1SimpleExpectedPassed = $true $ActionTest1SimplePassedPassed = $ActionTest1SimpleTestsPassed -eq $ActionTest1SimpleExpectedPassed - $ActionTest1SimpleFailureOutcome = "${{ needs.ActionTest1SimpleFailure.outputs.outcome }}" - $ActionTest1SimpleFailureExpectedOutcome = "failure" + $ActionTest1SimpleFailureOutcome = '${{ needs.ActionTest1SimpleFailure.outputs.outcome }}' + $ActionTest1SimpleFailureExpectedOutcome = 'failure' $ActionTest1SimpleFailureOutcomeResult = $ActionTest1SimpleFailureOutcome -eq $ActionTest1SimpleFailureExpectedOutcome - $ActionTest1SimpleFailureConclusion = "${{ needs.ActionTest1SimpleFailure.outputs.conclusion }}" - $ActionTest1SimpleFailureExpectedConclusion = "success" + $ActionTest1SimpleFailureConclusion = '${{ needs.ActionTest1SimpleFailure.outputs.conclusion }}' + $ActionTest1SimpleFailureExpectedConclusion = 'success' $ActionTest1SimpleFailureConclusionResult = $ActionTest1SimpleFailureConclusion -eq $ActionTest1SimpleFailureExpectedConclusion - $ActionTest1SimpleFailureTestResults = "${{ needs.ActionTest1SimpleFailure.outputs.TestResults }}" + $ActionTest1SimpleFailureTestResults = '${{ needs.ActionTest1SimpleFailure.outputs.TestResults }}' $ActionTest1SimpleFailureExecuted = -not [string]::IsNullOrEmpty($ActionTest1SimpleFailureTestResults) $ActionTest1SimpleFailureTestsPassed = $false if ($ActionTest1SimpleFailureExecuted) { @@ -209,14 +209,14 @@ jobs: $ActionTest1SimpleFailureExpectedPassed = $true $ActionTest1SimpleFailurePassedPassed = $ActionTest1SimpleFailureTestsPassed -eq $ActionTest1SimpleFailureExpectedPassed - $ActionTest1SimpleExecutionFailureOutcome = "${{ needs.ActionTest1SimpleExecutionFailure.outputs.outcome }}" - $ActionTest1SimpleExecutionFailureExpectedOutcome = "failure" + $ActionTest1SimpleExecutionFailureOutcome = '${{ needs.ActionTest1SimpleExecutionFailure.outputs.outcome }}' + $ActionTest1SimpleExecutionFailureExpectedOutcome = 'failure' $ActionTest1SimpleExecutionFailureOutcomeResult = $ActionTest1SimpleExecutionFailureOutcome -eq $ActionTest1SimpleExecutionFailureExpectedOutcome - $ActionTest1SimpleExecutionFailureConclusion = "${{ needs.ActionTest1SimpleExecutionFailure.outputs.conclusion }}" - $ActionTest1SimpleExecutionFailureExpectedConclusion = "success" + $ActionTest1SimpleExecutionFailureConclusion = '${{ needs.ActionTest1SimpleExecutionFailure.outputs.conclusion }}' + $ActionTest1SimpleExecutionFailureExpectedConclusion = 'success' $ActionTest1SimpleExecutionFailureConclusionResult = $ActionTest1SimpleExecutionFailureConclusion -eq $ActionTest1SimpleExecutionFailureExpectedConclusion - $ActionTest1SimpleExecutionFailureTestResults = "${{ needs.ActionTest1SimpleExecutionFailure.outputs.TestResults }}" + $ActionTest1SimpleExecutionFailureTestResults = '${{ needs.ActionTest1SimpleExecutionFailure.outputs.TestResults }}' $ActionTest1SimpleExecutionFailureExecuted = -not [string]::IsNullOrEmpty($ActionTest1SimpleExecutionFailureTestResults) # For execution failure, we don't expect valid test results $ActionTest1SimpleExecutionFailureTestsPassed = $true @@ -226,14 +226,14 @@ jobs: $ActionTest1SimpleExecutionFailureExpectedPassed = $true $ActionTest1SimpleExecutionFailurePassedPassed = $ActionTest1SimpleExecutionFailureTestsPassed -eq $ActionTest1SimpleExecutionFailureExpectedPassed - $ActionTest2StandardOutcome = "${{ needs.ActionTest2Standard.outputs.outcome }}" - $ActionTest2StandardExpectedOutcome = "success" + $ActionTest2StandardOutcome = '${{ needs.ActionTest2Standard.outputs.outcome }}' + $ActionTest2StandardExpectedOutcome = 'success' $ActionTest2StandardOutcomeResult = $ActionTest2StandardOutcome -eq $ActionTest2StandardExpectedOutcome - $ActionTest2StandardConclusion = "${{ needs.ActionTest2Standard.outputs.conclusion }}" - $ActionTest2StandardExpectedConclusion = "success" + $ActionTest2StandardConclusion = '${{ needs.ActionTest2Standard.outputs.conclusion }}' + $ActionTest2StandardExpectedConclusion = 'success' $ActionTest2StandardConclusionResult = $ActionTest2StandardConclusion -eq $ActionTest2StandardExpectedConclusion - $ActionTest2StandardTestResults = "${{ needs.ActionTest2Standard.outputs.TestResults }}" + $ActionTest2StandardTestResults = '${{ needs.ActionTest2Standard.outputs.TestResults }}' $ActionTest2StandardExecuted = -not [string]::IsNullOrEmpty($ActionTest2StandardTestResults) $ActionTest2StandardTestsPassed = $false if ($ActionTest2StandardExecuted) { @@ -250,14 +250,14 @@ jobs: $ActionTest2StandardExpectedPassed = $true $ActionTest2StandardPassedPassed = $ActionTest2StandardTestsPassed -eq $ActionTest2StandardExpectedPassed - $ActionTest3AdvancedOutcome = "${{ needs.ActionTest3Advanced.outputs.outcome }}" - $ActionTest3AdvancedExpectedOutcome = "success" + $ActionTest3AdvancedOutcome = '${{ needs.ActionTest3Advanced.outputs.outcome }}' + $ActionTest3AdvancedExpectedOutcome = 'success' $ActionTest3AdvancedOutcomeResult = $ActionTest3AdvancedOutcome -eq $ActionTest3AdvancedExpectedOutcome - $ActionTest3AdvancedConclusion = "${{ needs.ActionTest3Advanced.outputs.conclusion }}" - $ActionTest3AdvancedExpectedConclusion = "success" + $ActionTest3AdvancedConclusion = '${{ needs.ActionTest3Advanced.outputs.conclusion }}' + $ActionTest3AdvancedExpectedConclusion = 'success' $ActionTest3AdvancedConclusionResult = $ActionTest3AdvancedConclusion -eq $ActionTest3AdvancedExpectedConclusion - $ActionTest3AdvancedTestResults = "${{ needs.ActionTest3Advanced.outputs.TestResults }}" + $ActionTest3AdvancedTestResults = '${{ needs.ActionTest3Advanced.outputs.TestResults }}' $ActionTest3AdvancedExecuted = -not [string]::IsNullOrEmpty($ActionTest3AdvancedTestResults) $ActionTest3AdvancedTestsPassed = $false if ($ActionTest3AdvancedExecuted) { From 8f20398f88d90f37560e4e245019f96df6519619 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 14:37:15 +0100 Subject: [PATCH 18/28] Enhance README and action.yml to include additional test output metrics and improve clarity --- .github/workflows/Action-Test.yml | 231 ++++++++++++------------------ README.md | 17 ++- action.yml | 52 +++++-- scripts/exec.ps1 | 11 +- 4 files changed, 158 insertions(+), 153 deletions(-) diff --git a/.github/workflows/Action-Test.yml b/.github/workflows/Action-Test.yml index 27310684..cf75808e 100644 --- a/.github/workflows/Action-Test.yml +++ b/.github/workflows/Action-Test.yml @@ -161,194 +161,145 @@ jobs: # Build an array of objects for each job $ActionTest1SimpleOutcome = '${{ needs.ActionTest1Simple.outputs.outcome }}' - $ActionTest1SimpleExpectedOutcome = 'success' - $ActionTest1SimpleOutcomeResult = $ActionTest1SimpleOutcome -eq $ActionTest1SimpleExpectedOutcome + $ActionTest1SimpleOutcomeExpected = 'success' + $ActionTest1SimpleOutcomeResult = $ActionTest1SimpleOutcome -eq $ActionTest1SimpleOutcomeExpected $ActionTest1SimpleConclusion = '${{ needs.ActionTest1Simple.outputs.conclusion }}' - $ActionTest1SimpleExpectedConclusion = 'success' - $ActionTest1SimpleConclusionResult = $ActionTest1SimpleConclusion -eq $ActionTest1SimpleExpectedConclusion - - $ActionTest1SimpleTestResults = '${{ needs.ActionTest1Simple.outputs.TestResults }}' - $ActionTest1SimpleExecuted = -not [string]::IsNullOrEmpty($ActionTest1SimpleTestResults) - $ActionTest1SimpleTestsPassed = $false - if ($ActionTest1SimpleExecuted) { - try { - $testData = $ActionTest1SimpleTestResults | ConvertFrom-Json - $ActionTest1SimpleTestsPassed = $testData.FailedCount -eq 0 - } catch { - Write-Warning "Failed to parse ActionTest1Simple test results: $_" - } - } - - $ActionTest1SimpleExpectedExecuted = $true - $ActionTest1SimplePassedExecuted = $ActionTest1SimpleExecuted -eq $ActionTest1SimpleExpectedExecuted - $ActionTest1SimpleExpectedPassed = $true - $ActionTest1SimplePassedPassed = $ActionTest1SimpleTestsPassed -eq $ActionTest1SimpleExpectedPassed + $ActionTest1SimpleConclusionExpected = 'success' + $ActionTest1SimpleConclusionResult = $ActionTest1SimpleConclusion -eq $ActionTest1SimpleConclusionExpected + $ActionTest1SimpleExecuted = '${{ needs.ActionTest1Simple.outputs.Executed }}' + $ActionTest1SimpleExecutedExpected = 'True' + $ActionTest1SimpleExecutedResult = $ActionTest1SimpleExecuted -eq $ActionTest1SimpleExecutedExpected + $ActionTest1SimpleResult = '${{ needs.ActionTest1Simple.outputs.Result }}' + $ActionTest1SimpleResultExpected = 'Passed' + $ActionTest1SimplePassedResult = $ActionTest1SimpleResult -eq $ActionTest1SimpleResultExpected $ActionTest1SimpleFailureOutcome = '${{ needs.ActionTest1SimpleFailure.outputs.outcome }}' - $ActionTest1SimpleFailureExpectedOutcome = 'failure' - $ActionTest1SimpleFailureOutcomeResult = $ActionTest1SimpleFailureOutcome -eq $ActionTest1SimpleFailureExpectedOutcome + $ActionTest1SimpleFailureOutcomeExpected = 'failure' + $ActionTest1SimpleFailureOutcomeResult = $ActionTest1SimpleFailureOutcome -eq $ActionTest1SimpleFailureOutcomeExpected $ActionTest1SimpleFailureConclusion = '${{ needs.ActionTest1SimpleFailure.outputs.conclusion }}' - $ActionTest1SimpleFailureExpectedConclusion = 'success' - $ActionTest1SimpleFailureConclusionResult = $ActionTest1SimpleFailureConclusion -eq $ActionTest1SimpleFailureExpectedConclusion - - $ActionTest1SimpleFailureTestResults = '${{ needs.ActionTest1SimpleFailure.outputs.TestResults }}' - $ActionTest1SimpleFailureExecuted = -not [string]::IsNullOrEmpty($ActionTest1SimpleFailureTestResults) - $ActionTest1SimpleFailureTestsPassed = $false - if ($ActionTest1SimpleFailureExecuted) { - try { - $testData = $ActionTest1SimpleFailureTestResults | ConvertFrom-Json - # This one is expected to fail, so invert the logic - $ActionTest1SimpleFailureTestsPassed = $testData.FailedCount -gt 0 - } catch { - Write-Warning "Failed to parse ActionTest1SimpleFailure test results: $_" - } - } - - $ActionTest1SimpleFailureExpectedExecuted = $true - $ActionTest1SimpleFailurePassedExecuted = $ActionTest1SimpleFailureExecuted -eq $ActionTest1SimpleFailureExpectedExecuted - $ActionTest1SimpleFailureExpectedPassed = $true - $ActionTest1SimpleFailurePassedPassed = $ActionTest1SimpleFailureTestsPassed -eq $ActionTest1SimpleFailureExpectedPassed + $ActionTest1SimpleFailureConclusionExpected = 'success' + $ActionTest1SimpleFailureConclusionResult = $ActionTest1SimpleFailureConclusion -eq $ActionTest1SimpleFailureConclusionExpected + $ActionTest1SimpleFailureExecuted = '${{ needs.ActionTest1SimpleFailure.outputs.Executed }}' + $ActionTest1SimpleFailureExecutedExpected = 'True' + $ActionTest1SimpleFailureExecutedResult = $ActionTest1SimpleFailureExecuted -eq $ActionTest1SimpleFailureExecutedExpected + $ActionTest1SimpleFailureResult = '${{ needs.ActionTest1SimpleFailure.outputs.Result }}' + $ActionTest1SimpleFailureResultExpected = 'Failed' + $ActionTest1SimpleFailurePassedResult = $ActionTest1SimpleFailureResult -eq $ActionTest1SimpleFailureResultExpected $ActionTest1SimpleExecutionFailureOutcome = '${{ needs.ActionTest1SimpleExecutionFailure.outputs.outcome }}' - $ActionTest1SimpleExecutionFailureExpectedOutcome = 'failure' - $ActionTest1SimpleExecutionFailureOutcomeResult = $ActionTest1SimpleExecutionFailureOutcome -eq $ActionTest1SimpleExecutionFailureExpectedOutcome + $ActionTest1SimpleExecutionFailureOutcomeExpected = 'failure' + $ActionTest1SimpleExecutionFailureOutcomeResult = $ActionTest1SimpleExecutionFailureOutcome -eq $ActionTest1SimpleExecutionFailureOutcomeExpected $ActionTest1SimpleExecutionFailureConclusion = '${{ needs.ActionTest1SimpleExecutionFailure.outputs.conclusion }}' - $ActionTest1SimpleExecutionFailureExpectedConclusion = 'success' - $ActionTest1SimpleExecutionFailureConclusionResult = $ActionTest1SimpleExecutionFailureConclusion -eq $ActionTest1SimpleExecutionFailureExpectedConclusion - - $ActionTest1SimpleExecutionFailureTestResults = '${{ needs.ActionTest1SimpleExecutionFailure.outputs.TestResults }}' - $ActionTest1SimpleExecutionFailureExecuted = -not [string]::IsNullOrEmpty($ActionTest1SimpleExecutionFailureTestResults) - # For execution failure, we don't expect valid test results - $ActionTest1SimpleExecutionFailureTestsPassed = $true - - $ActionTest1SimpleExecutionFailureExpectedExecuted = $true - $ActionTest1SimpleExecutionFailurePassedExecuted = $ActionTest1SimpleExecutionFailureExecuted -eq $ActionTest1SimpleExecutionFailureExpectedExecuted - $ActionTest1SimpleExecutionFailureExpectedPassed = $true - $ActionTest1SimpleExecutionFailurePassedPassed = $ActionTest1SimpleExecutionFailureTestsPassed -eq $ActionTest1SimpleExecutionFailureExpectedPassed + $ActionTest1SimpleExecutionFailureConclusionExpected = 'success' + $ActionTest1SimpleExecutionFailureConclusionResult = $ActionTest1SimpleExecutionFailureConclusion -eq $ActionTest1SimpleExecutionFailureConclusionExpected + $ActionTest1SimpleExecutionFailureExecuted = '${{ needs.ActionTest1SimpleExecutionFailure.outputs.Executed }}' + $ActionTest1SimpleExecutionFailureExecutedExpected = 'True' + $ActionTest1SimpleExecutionFailureExecutedResult = $ActionTest1SimpleExecutionFailureExecuted -eq $ActionTest1SimpleExecutionFailureExecutedExpected + $ActionTest1SimpleExecutionFailureResult = '${{ needs.ActionTest1SimpleExecutionFailure.outputs.Result }}' + $ActionTest1SimpleExecutionFailureResultExpected = 'Passed' + $ActionTest1SimpleExecutionFailurePassedResult = $ActionTest1SimpleExecutionFailureResult -eq $ActionTest1SimpleExecutionFailureResultExpected $ActionTest2StandardOutcome = '${{ needs.ActionTest2Standard.outputs.outcome }}' - $ActionTest2StandardExpectedOutcome = 'success' - $ActionTest2StandardOutcomeResult = $ActionTest2StandardOutcome -eq $ActionTest2StandardExpectedOutcome + $ActionTest2StandardOutcomeExpected = 'success' + $ActionTest2StandardOutcomeResult = $ActionTest2StandardOutcome -eq $ActionTest2StandardOutcomeExpected $ActionTest2StandardConclusion = '${{ needs.ActionTest2Standard.outputs.conclusion }}' - $ActionTest2StandardExpectedConclusion = 'success' - $ActionTest2StandardConclusionResult = $ActionTest2StandardConclusion -eq $ActionTest2StandardExpectedConclusion - - $ActionTest2StandardTestResults = '${{ needs.ActionTest2Standard.outputs.TestResults }}' - $ActionTest2StandardExecuted = -not [string]::IsNullOrEmpty($ActionTest2StandardTestResults) - $ActionTest2StandardTestsPassed = $false - if ($ActionTest2StandardExecuted) { - try { - $testData = $ActionTest2StandardTestResults | ConvertFrom-Json - $ActionTest2StandardTestsPassed = $testData.FailedCount -eq 0 - } catch { - Write-Warning "Failed to parse ActionTest2Standard test results: $_" - } - } - - $ActionTest2StandardExpectedExecuted = $true - $ActionTest2StandardPassedExecuted = $ActionTest2StandardExecuted -eq $ActionTest2StandardExpectedExecuted - $ActionTest2StandardExpectedPassed = $true - $ActionTest2StandardPassedPassed = $ActionTest2StandardTestsPassed -eq $ActionTest2StandardExpectedPassed + $ActionTest2StandardConclusionExpected = 'success' + $ActionTest2StandardConclusionResult = $ActionTest2StandardConclusion -eq $ActionTest2StandardConclusionExpected + $ActionTest2StandardExecuted = '${{ needs.ActionTest2Standard.outputs.Executed }}' + $ActionTest2StandardExecutedExpected = 'True' + $ActionTest2StandardExecutedResult = $ActionTest2StandardExecuted -eq $ActionTest2StandardExecutedExpected + $ActionTest2StandardResult = '${{ needs.ActionTest2Standard.outputs.Result }}' + $ActionTest2StandardResultExpected = 'Passed' + $ActionTest2StandardPassedResult = $ActionTest2StandardResult -eq $ActionTest2StandardResultExpected $ActionTest3AdvancedOutcome = '${{ needs.ActionTest3Advanced.outputs.outcome }}' - $ActionTest3AdvancedExpectedOutcome = 'success' - $ActionTest3AdvancedOutcomeResult = $ActionTest3AdvancedOutcome -eq $ActionTest3AdvancedExpectedOutcome + $ActionTest3AdvancedOutcomeExpected = 'success' + $ActionTest3AdvancedOutcomeResult = $ActionTest3AdvancedOutcome -eq $ActionTest3AdvancedOutcomeExpected $ActionTest3AdvancedConclusion = '${{ needs.ActionTest3Advanced.outputs.conclusion }}' - $ActionTest3AdvancedExpectedConclusion = 'success' - $ActionTest3AdvancedConclusionResult = $ActionTest3AdvancedConclusion -eq $ActionTest3AdvancedExpectedConclusion - - $ActionTest3AdvancedTestResults = '${{ needs.ActionTest3Advanced.outputs.TestResults }}' - $ActionTest3AdvancedExecuted = -not [string]::IsNullOrEmpty($ActionTest3AdvancedTestResults) - $ActionTest3AdvancedTestsPassed = $false - if ($ActionTest3AdvancedExecuted) { - try { - $testData = $ActionTest3AdvancedTestResults | ConvertFrom-Json - $ActionTest3AdvancedTestsPassed = $testData.FailedCount -eq 0 - } catch { - Write-Warning "Failed to parse ActionTest3Advanced test results: $_" - } - } - - $ActionTest3AdvancedExpectedExecuted = $true - $ActionTest3AdvancedPassedExecuted = $ActionTest3AdvancedExecuted -eq $ActionTest3AdvancedExpectedExecuted - $ActionTest3AdvancedExpectedPassed = $true - $ActionTest3AdvancedPassedPassed = $ActionTest3AdvancedTestsPassed -eq $ActionTest3AdvancedExpectedPassed + $ActionTest3AdvancedConclusionExpected = 'success' + $ActionTest3AdvancedConclusionResult = $ActionTest3AdvancedConclusion -eq $ActionTest3AdvancedConclusionExpected + $ActionTest3AdvancedExecuted = '${{ needs.ActionTest3Advanced.outputs.Executed }}' + $ActionTest3AdvancedExecutedExpected = 'True' + $ActionTest3AdvancedExecutedResult = $ActionTest3AdvancedExecuted -eq $ActionTest3AdvancedExecutedExpected + $ActionTest3AdvancedResult = '${{ needs.ActionTest3Advanced.outputs.Result }}' + $ActionTest3AdvancedResultExpected = 'Passed' + $ActionTest3AdvancedPassedResult = $ActionTest3AdvancedResult -eq $ActionTest3AdvancedResultExpected $jobs = @( [PSCustomObject]@{ Name = "Action-Test - [1-Simple]" Outcome = $ActionTest1SimpleOutcome - ExpectedOutcome = $ActionTest1SimpleExpectedOutcome + OutcomeExpected = $ActionTest1SimpleOutcomeExpected PassedOutcome = $ActionTest1SimpleOutcomeResult Conclusion = $ActionTest1SimpleConclusion - ExpectedConclusion = $ActionTest1SimpleExpectedConclusion + ConclusionExpected = $ActionTest1SimpleConclusionExpected PassedConclusion = $ActionTest1SimpleConclusionResult Executed = $ActionTest1SimpleExecuted - ExpectedExecuted = $ActionTest1SimpleExpectedExecuted - PassedExecuted = $ActionTest1SimplePassedExecuted - Passed = $ActionTest1SimpleTestsPassed - ExpectedPassed = $ActionTest1SimpleExpectedPassed - PassedPassed = $ActionTest1SimplePassedPassed + ExecutedExpected = $ActionTest1SimpleExecutedExpected + ExecutedResult = $ActionTest1SimpleExecutedResult + Result = $ActionTest1SimpleResult + ResultExpected = $ActionTest1SimpleResultExpected + PassedResult = $ActionTest1SimplePassedResult }, [PSCustomObject]@{ Name = "Action-Test - [1-Simple-Failure]" Outcome = $ActionTest1SimpleFailureOutcome - ExpectedOutcome = $ActionTest1SimpleFailureExpectedOutcome + OutcomeExpected = $ActionTest1SimpleFailureOutcomeExpected PassedOutcome = $ActionTest1SimpleFailureOutcomeResult Conclusion = $ActionTest1SimpleFailureConclusion - ExpectedConclusion = $ActionTest1SimpleFailureExpectedConclusion + ConclusionExpected = $ActionTest1SimpleFailureConclusionExpected PassedConclusion = $ActionTest1SimpleFailureConclusionResult Executed = $ActionTest1SimpleFailureExecuted - ExpectedExecuted = $ActionTest1SimpleFailureExpectedExecuted - PassedExecuted = $ActionTest1SimpleFailurePassedExecuted - Passed = $ActionTest1SimpleFailureTestsPassed - ExpectedPassed = $ActionTest1SimpleFailureExpectedPassed - PassedPassed = $ActionTest1SimpleFailurePassedPassed + ExecutedExpected = $ActionTest1SimpleFailureExecutedExpected + ExecutedResult = $ActionTest1SimpleFailureExecutedResult + Result = $ActionTest1SimpleFailureResult + ResultExpected = $ActionTest1SimpleFailureResultExpected + PassedResult = $ActionTest1SimpleFailurePassedResult }, [PSCustomObject]@{ Name = "Action-Test - [1-Simple-ExecutionFailure]" Outcome = $ActionTest1SimpleExecutionFailureOutcome - ExpectedOutcome = $ActionTest1SimpleExecutionFailureExpectedOutcome + OutcomeExpected = $ActionTest1SimpleExecutionFailureOutcomeExpected PassedOutcome = $ActionTest1SimpleExecutionFailureOutcomeResult Conclusion = $ActionTest1SimpleExecutionFailureConclusion - ExpectedConclusion = $ActionTest1SimpleExecutionFailureExpectedConclusion + ConclusionExpected = $ActionTest1SimpleExecutionFailureConclusionExpected PassedConclusion = $ActionTest1SimpleExecutionFailureConclusionResult Executed = $ActionTest1SimpleExecutionFailureExecuted - ExpectedExecuted = $ActionTest1SimpleExecutionFailureExpectedExecuted - PassedExecuted = $ActionTest1SimpleExecutionFailurePassedExecuted - Passed = $ActionTest1SimpleExecutionFailureTestsPassed - ExpectedPassed = $ActionTest1SimpleExecutionFailureExpectedPassed - PassedPassed = $ActionTest1SimpleExecutionFailurePassedPassed + ExecutedExpected = $ActionTest1SimpleExecutionFailureExecutedExpected + ExecutedResult = $ActionTest1SimpleExecutionFailureExecutedResult + Result = $ActionTest1SimpleExecutionFailureResult + ResultExpected = $ActionTest1SimpleExecutionFailureResultExpected + PassedResult = $ActionTest1SimpleExecutionFailurePassedResult }, [PSCustomObject]@{ Name = "Action-Test - [2-Standard]" Outcome = $ActionTest2StandardOutcome - ExpectedOutcome = $ActionTest2StandardExpectedOutcome + OutcomeExpected = $ActionTest2StandardOutcomeExpected PassedOutcome = $ActionTest2StandardOutcomeResult Conclusion = $ActionTest2StandardConclusion - ExpectedConclusion = $ActionTest2StandardExpectedConclusion + ConclusionExpected = $ActionTest2StandardConclusionExpected PassedConclusion = $ActionTest2StandardConclusionResult Executed = $ActionTest2StandardExecuted - ExpectedExecuted = $ActionTest2StandardExpectedExecuted - PassedExecuted = $ActionTest2StandardPassedExecuted - Passed = $ActionTest2StandardTestsPassed - ExpectedPassed = $ActionTest2StandardExpectedPassed - PassedPassed = $ActionTest2StandardPassedPassed + ExecutedExpected = $ActionTest2StandardExecutedExpected + ExecutedResult = $ActionTest2StandardExecutedResult + Result = $ActionTest2StandardResult + ResultExpected = $ActionTest2StandardResultExpected + PassedResult = $ActionTest2StandardPassedResult }, [PSCustomObject]@{ Name = "Action-Test - [3-Advanced]" Outcome = $ActionTest3AdvancedOutcome - ExpectedOutcome = $ActionTest3AdvancedExpectedOutcome + OutcomeExpected = $ActionTest3AdvancedOutcomeExpected PassedOutcome = $ActionTest3AdvancedOutcomeResult Conclusion = $ActionTest3AdvancedConclusion - ExpectedConclusion = $ActionTest3AdvancedExpectedConclusion + ConclusionExpected = $ActionTest3AdvancedConclusionExpected PassedConclusion = $ActionTest3AdvancedConclusionResult Executed = $ActionTest3AdvancedExecuted - ExpectedExecuted = $ActionTest3AdvancedExpectedExecuted - PassedExecuted = $ActionTest3AdvancedPassedExecuted - Passed = $ActionTest3AdvancedTestsPassed - ExpectedPassed = $ActionTest3AdvancedExpectedPassed - PassedPassed = $ActionTest3AdvancedPassedPassed + ExecutedExpected = $ActionTest3AdvancedExecutedExpected + ExecutedResult = $ActionTest3AdvancedExecutedResult + Result = $ActionTest3AdvancedResult + ResultExpected = $ActionTest3AdvancedResultExpected + PassedResult = $ActionTest3AdvancedPassedResult } ) @@ -358,22 +309,22 @@ jobs: $passed = $true $jobs | ForEach-Object { if (-not $_.PassedOutcome) { - Write-Error "Job $($_.Name) failed with Outcome $($_.Outcome) and Expected Outcome $($_.ExpectedOutcome)" + Write-Error "Job $($_.Name) failed with Outcome $($_.Outcome) and Expected Outcome $($_.OutcomeExpected)" $passed = $false } if (-not $_.PassedConclusion) { - Write-Error "Job $($_.Name) failed with Conclusion $($_.Conclusion) and Expected Conclusion $($_.ExpectedConclusion)" + Write-Error "Job $($_.Name) failed with Conclusion $($_.Conclusion) and Expected Conclusion $($_.ConclusionExpected)" $passed = $false } - if (-not $_.PassedExecuted) { - Write-Error "Job $($_.Name) not executed as expected. (Actual: $($_.Executed), Expected: $($_.ExpectedExecuted))" + if (-not $_.ExecutedResult) { + Write-Error "Job $($_.Name) not executed as expected. (Actual: $($_.Executed), Expected: $($_.ExecutedExpected))" $passed = $false } - if (-not $_.PassedPassed) { - Write-Error "Job $($_.Name) tests did not pass as expected. (Actual: $($_.Passed), Expected: $($_.ExpectedPassed))" + if (-not $_.PassedResult) { + Write-Error "Job $($_.Name) tests did not pass as expected. (Actual: $($_.Passed), Expected: $($_.PassedExpected))" $passed = $false } } diff --git a/README.md b/README.md index fae34013..f0221a3c 100644 --- a/README.md +++ b/README.md @@ -309,10 +309,19 @@ jobs: The action provides the following outputs: | Output | Description | -| ------ | ----------- | -| `TestResults` | The test results in JSON format. This output can be used in subsequent workflow steps to process or display test results. | -| `Outcome` | The outcome of the test run (`success` or `failure`). This can be used to conditionally execute steps based on test results. | -| `Conclusion` | The conclusion of the test run (`success` or `failure`). Similar to Outcome but can be used for workflow control. | +|--------|-------------| +| `Outcome` | The outcome of the test run (success/failure) | +| `Conclusion` | The conclusion of the test run (success/failure) | +| `Executed` | Whether tests were executed (True/False) | +| `Result` | Overall result of the Pester test run (Passed/Failed) | +| `FailedCount` | Number of failed tests | +| `FailedBlocksCount` | Number of failed blocks | +| `FailedContainersCount` | Number of failed containers | +| `PassedCount` | Number of passed tests | +| `SkippedCount` | Number of skipped tests | +| `InconclusiveCount` | Number of inconclusive tests | +| `NotRunCount` | Number of tests not run | +| `TotalCount` | Total count of tests | ## Examples diff --git a/action.yml b/action.yml index 0ff95118..1a6cc4a6 100644 --- a/action.yml +++ b/action.yml @@ -208,10 +208,6 @@ inputs: default: '.' outputs: - TestResults: - description: | - The test results in JSON format. - value: ${{ steps.test.outputs.TestResults }} Outcome: description: | The outcome of the test run. @@ -220,6 +216,46 @@ outputs: description: | The conclusion of the test run. value: ${{ steps.test.conclusion }} + Executed: + description: | + Whether tests were executed. + value: ${{ steps.test.outputs.Executed }} + Result: + description: | + Overall result of the Pester test run (e.g., Passed, Failed). + value: ${{ steps.test.outputs.Result }} + FailedCount: + description: | + Number of failed tests. + value: ${{ steps.test.outputs.FailedCount }} + FailedBlocksCount: + description: | + Number of failed blocks. + value: ${{ steps.test.outputs.FailedBlocksCount }} + FailedContainersCount: + description: | + Number of failed containers. + value: ${{ steps.test.outputs.FailedContainersCount }} + PassedCount: + description: | + Number of passed tests. + value: ${{ steps.test.outputs.PassedCount }} + SkippedCount: + description: | + Number of skipped tests. + value: ${{ steps.test.outputs.SkippedCount }} + InconclusiveCount: + description: | + Number of inconclusive tests. + value: ${{ steps.test.outputs.InconclusiveCount }} + NotRunCount: + description: | + Number of tests not run. + value: ${{ steps.test.outputs.NotRunCount }} + TotalCount: + description: | + Total count of tests. + value: ${{ steps.test.outputs.TotalCount }} runs: using: composite @@ -315,24 +351,24 @@ runs: shell: pwsh working-directory: ${{ inputs.WorkingDirectory }} env: - PSMODULE_INVOKE_PESTER_INTERNAL_TestResults: ${{ steps.test.outputs.TestResults }} + PSMODULE_INVOKE_PESTER_INTERNAL_Executed: ${{ steps.test.outputs.Executed }} PSMODULE_INVOKE_PESTER_INTERNAL_Outcome: ${{ steps.test.outcome }} PSMODULE_INVOKE_PESTER_INTERNAL_Conclusion: ${{ steps.test.conclusion }} run: | # Status $PSStyle.OutputRendering = 'Ansi' - $testResults = $env:PSMODULE_INVOKE_PESTER_INTERNAL_TestResults | ConvertFrom-Json + $executed = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Executed $outcome = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Outcome $conclusion = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Conclusion - $testResults | Format-List | Out-String [PSCustomObject]@{ + Executed = $executed Outcome = $outcome Conclusion = $conclusion } | Format-List | Out-String # If the tests did not execute, exit with a failure code - if ($testResults.Executed -ne 'true') { + if ($executed -ne 'true') { Write-Error "Tests did not execute." exit 1 } diff --git a/scripts/exec.ps1 b/scripts/exec.ps1 index db5e8375..bfc03052 100644 --- a/scripts/exec.ps1 +++ b/scripts/exec.ps1 @@ -102,7 +102,16 @@ LogGroup 'Eval - Set outputs' { Set-GitHubOutput -Name 'TestResultOutputPath' -Value $testResultOutputFolderPath Set-GitHubOutput -Name 'CodeCoverageEnabled' -Value $testResults.Configuration.CodeCoverage.Enabled.Value Set-GitHubOutput -Name 'CodeCoverageOutputPath' -Value $codeCoverageOutputFolderPath - Set-GitHubOutput -Name 'TestResults' -Value ($testResults | ConvertTo-Json -Depth 0 -Compress) + Set-GitHubOutput -Name 'Executed' -Value $testResults.Executed + Set-GitHubOutput -Name 'Result' -Value $testResults.Result + Set-GitHubOutput -Name 'FailedCount' -Value $testResults.FailedCount + Set-GitHubOutput -Name 'FailedBlocksCount' -Value $testResults.FailedBlocksCount + Set-GitHubOutput -Name 'FailedContainersCount' -Value $testResults.FailedContainersCount + Set-GitHubOutput -Name 'PassedCount' -Value $testResults.PassedCount + Set-GitHubOutput -Name 'SkippedCount' -Value $testResults.SkippedCount + Set-GitHubOutput -Name 'InconclusiveCount' -Value $testResults.InconclusiveCount + Set-GitHubOutput -Name 'NotRunCount' -Value $testResults.NotRunCount + Set-GitHubOutput -Name 'TotalCount' -Value $testResults.TotalCount if ($env:PSMODULE_INVOKE_PESTER_INPUT_ReportAsJson -eq 'true' -and $testResults.Configuration.TestResult.Enabled.Value) { $jsonOutputPath = $testResults.Configuration.TestResult.OutputPath.Value -Replace '\.xml$', '.json' From d1e60840de781b7b87cd9e6b69810119703252bd Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 14:40:02 +0100 Subject: [PATCH 19/28] Refactor output formatting in Action-Test.yml to use Format-List for improved readability --- .github/workflows/Action-Test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Action-Test.yml b/.github/workflows/Action-Test.yml index cf75808e..30fdaa19 100644 --- a/.github/workflows/Action-Test.yml +++ b/.github/workflows/Action-Test.yml @@ -304,7 +304,7 @@ jobs: ) # Display the table in the workflow logs - $jobs | Format-Table -AutoSize | Out-String + $jobs | Format-List | Out-String $passed = $true $jobs | ForEach-Object { From 5d0d8ea62f278ea2be9821dd67ae3cbdf6cb24e9 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 14:43:51 +0100 Subject: [PATCH 20/28] Refactor output variables in Action-Test.yml for improved clarity and consistency --- .github/workflows/Action-Test.yml | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/.github/workflows/Action-Test.yml b/.github/workflows/Action-Test.yml index 30fdaa19..965128a9 100644 --- a/.github/workflows/Action-Test.yml +++ b/.github/workflows/Action-Test.yml @@ -23,7 +23,8 @@ jobs: outputs: Outcome: ${{ steps.action-test.outcome }} Conclusion: ${{ steps.action-test.conclusion }} - TestResults: ${{ steps.action-test.outputs.TestResults }} + Executed: ${{ steps.action-test.outputs.Executed }} + Result: ${{ steps.action-test.outputs.Result }} steps: # Need to check out as part of the test, as its a local action @@ -48,7 +49,9 @@ jobs: outputs: Outcome: ${{ steps.action-test.outcome }} Conclusion: ${{ steps.action-test.conclusion }} - TestResults: ${{ steps.action-test.outputs.TestResults }} + Executed: ${{ steps.action-test.outputs.Executed }} + Result: ${{ steps.action-test.outputs.Result }} + steps: # Need to check out as part of the test, as its a local action - name: Checkout repo @@ -73,7 +76,9 @@ jobs: outputs: Outcome: ${{ steps.action-test.outcome }} Conclusion: ${{ steps.action-test.conclusion }} - TestResults: ${{ steps.action-test.outputs.TestResults }} + Executed: ${{ steps.action-test.outputs.Executed }} + Result: ${{ steps.action-test.outputs.Result }} + steps: # Need to check out as part of the test, as its a local action - name: Checkout repo @@ -98,7 +103,9 @@ jobs: outputs: Outcome: ${{ steps.action-test.outcome }} Conclusion: ${{ steps.action-test.conclusion }} - TestResults: ${{ steps.action-test.outputs.TestResults }} + Executed: ${{ steps.action-test.outputs.Executed }} + Result: ${{ steps.action-test.outputs.Result }} + steps: # Need to check out as part of the test, as its a local action - name: Checkout repo @@ -123,7 +130,9 @@ jobs: outputs: Outcome: ${{ steps.action-test.outcome }} Conclusion: ${{ steps.action-test.conclusion }} - TestResults: ${{ steps.action-test.outputs.TestResults }} + Executed: ${{ steps.action-test.outputs.Executed }} + Result: ${{ steps.action-test.outputs.Result }} + steps: # Need to check out as part of the test, as its a local action - name: Checkout repo From 576e44e91762d788362319c5adaab9e1ebc38ba0 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 14:53:14 +0100 Subject: [PATCH 21/28] Refactor output handling in action.yml to use status step for test execution status --- action.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index 1a6cc4a6..e6fe3e26 100644 --- a/action.yml +++ b/action.yml @@ -219,7 +219,7 @@ outputs: Executed: description: | Whether tests were executed. - value: ${{ steps.test.outputs.Executed }} + value: ${{ steps.status.outputs.Executed }} Result: description: | Overall result of the Pester test run (e.g., Passed, Failed). @@ -349,6 +349,7 @@ runs: - name: Status shell: pwsh + id: status working-directory: ${{ inputs.WorkingDirectory }} env: PSMODULE_INVOKE_PESTER_INTERNAL_Executed: ${{ steps.test.outputs.Executed }} @@ -357,10 +358,12 @@ runs: run: | # Status $PSStyle.OutputRendering = 'Ansi' - $executed = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Executed + $executed = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Executed -eq 'true' $outcome = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Outcome $conclusion = $env:PSMODULE_INVOKE_PESTER_INTERNAL_Conclusion + "Executed=$executed" >> $env:GITHUB_OUTPUT + [PSCustomObject]@{ Executed = $executed Outcome = $outcome From 51fdff6e33958c5815e364384e65024bef7ffcc7 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 15:01:15 +0100 Subject: [PATCH 22/28] Update expected outcomes in Action-Test.yml for failure test cases --- .github/workflows/Action-Test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Action-Test.yml b/.github/workflows/Action-Test.yml index 965128a9..33ba7ea0 100644 --- a/.github/workflows/Action-Test.yml +++ b/.github/workflows/Action-Test.yml @@ -202,10 +202,10 @@ jobs: $ActionTest1SimpleExecutionFailureConclusionExpected = 'success' $ActionTest1SimpleExecutionFailureConclusionResult = $ActionTest1SimpleExecutionFailureConclusion -eq $ActionTest1SimpleExecutionFailureConclusionExpected $ActionTest1SimpleExecutionFailureExecuted = '${{ needs.ActionTest1SimpleExecutionFailure.outputs.Executed }}' - $ActionTest1SimpleExecutionFailureExecutedExpected = 'True' + $ActionTest1SimpleExecutionFailureExecutedExpected = 'False' $ActionTest1SimpleExecutionFailureExecutedResult = $ActionTest1SimpleExecutionFailureExecuted -eq $ActionTest1SimpleExecutionFailureExecutedExpected $ActionTest1SimpleExecutionFailureResult = '${{ needs.ActionTest1SimpleExecutionFailure.outputs.Result }}' - $ActionTest1SimpleExecutionFailureResultExpected = 'Passed' + $ActionTest1SimpleExecutionFailureResultExpected = '' $ActionTest1SimpleExecutionFailurePassedResult = $ActionTest1SimpleExecutionFailureResult -eq $ActionTest1SimpleExecutionFailureResultExpected $ActionTest2StandardOutcome = '${{ needs.ActionTest2Standard.outputs.outcome }}' From d94107cf2bbae807182cfacb44477875baf3b684 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 15:29:33 +0100 Subject: [PATCH 23/28] Enhance README to provide detailed test outcome metrics and update action usage to reflect new output structure --- README.md | 52 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index f0221a3c..2d2aebf0 100644 --- a/README.md +++ b/README.md @@ -158,26 +158,33 @@ If you specify `CodeCoverage_Enabled: true` here, it will enable coverage even i ## How to Determine a Test's Outcome -After running your tests, you can assess the overall result by checking: - -- **Outcome:** - The step's outcome will be `success` if all tests passed or `failure` if one or more tests failed. - -- **Conclusion:** - This value provides an overall summary (typically `success` or `failure`) of the test run. - Use this with the `continue-on-error` flag to run a separate step to gather results of parallel tests. +After running your tests, you can assess the overall result by checking the following outputs provided by the action: + +- **Outcome**: Indicates the GitHub Action step outcome (`success` or `failure`). +- **Conclusion**: Provides an overall summary (`success` or `failure`) of the test run. +- **Executed**: Indicates whether tests were executed (`True` or `False`). +- **Result**: Overall result of the Pester test run (`Passed` or `Failed`). +- **PassedCount**: Number of passed tests. +- **FailedCount**: Number of failed tests. +- **SkippedCount**: Number of skipped tests. +- **InconclusiveCount**: Number of inconclusive tests. +- **NotRunCount**: Number of tests not run. +- **TotalCount**: Total number of tests executed. These values are accessible in your workflow using the step's outputs, for example: ```yaml - name: Status shell: pwsh - env: - OUTCOME: ${{ steps.action-test.outcome }} - CONCLUSION: ${{ steps.action-test.conclusion }} run: | - Write-Host "Outcome: [$env:OUTCOME]" - Write-Host "Conclusion: [$env:CONCLUSION]" + Write-Host "Outcome: [${{ steps.action-test.outputs.Outcome }}]" + Write-Host "Conclusion: [${{ steps.action-test.outputs.Conclusion }}]" + Write-Host "Executed: [${{ steps.action-test.outputs.Executed }}]" + Write-Host "Result: [${{ steps.action-test.outputs.Result }}]" + Write-Host "Passed tests: [${{ steps.action-test.outputs.PassedCount }}]" + Write-Host "Failed tests: [${{ steps.action-test.outputs.FailedCount }}]" + Write-Host "Skipped tests: [${{ steps.action-test.outputs.SkippedCount }}]" + Write-Host "Total tests: [${{ steps.action-test.outputs.TotalCount }}]" ``` ## Controlling Workflow Execution Based on Test Outcome/Conclusion @@ -229,7 +236,7 @@ jobs: uses: actions/checkout@v4 - name: Run Pester Tests - uses: PSModule/Invoke-Pester@v2 + uses: PSModule/Invoke-Pester@v3 id: action-test continue-on-error: true with: @@ -350,8 +357,8 @@ jobs: - uses: actions/checkout@v3 - name: Run Pester tests - id: pester - uses: PSModule/Invoke-Pester@v1 + uses: PSModule/Invoke-Pester@v3 + id: action-test with: Path: './tests' TestResult_Enabled: 'true' @@ -360,15 +367,16 @@ jobs: - name: Process test results if: always() run: | - $testResults = '${{ steps.pester.outputs.TestResults }}' | ConvertFrom-Json - Write-Output "Total tests: $($testResults.TotalCount)" - Write-Output "Passed tests: $($testResults.PassedCount)" - Write-Output "Failed tests: $($testResults.FailedCount)" - Write-Output "Test outcome: ${{ steps.pester.outputs.Outcome }}" + Write-Output "Total tests: ${{ steps.action-test.outputs.TotalCount }}" + Write-Output "Passed tests: ${{ steps.action-test.outputs.PassedCount }}" + Write-Output "Failed tests: ${{ steps.action-test.outputs.FailedCount }}" + Write-Output "Failed blocks: ${{ steps.action-test.outputs.FailedBlocksCount }}" + Write-Output "Failed containers: ${{ steps.action-test.outputs.FailedContainersCount }}" + Write-Output "Test outcome: ${{ steps.action-test.outputs.Result }}" shell: pwsh - name: Take action based on test outcome - if: steps.pester.outputs.Outcome == 'success' + if: steps.action-test.outputs.Result == 'Passed' run: echo "All tests passed! Ready to proceed with deployment." ``` From 274dfe380c4d3b6a292daf16335a0098f5b2b9a3 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 15:48:03 +0100 Subject: [PATCH 24/28] Fix variable names in Action-Test.yml for clarity in error reporting --- .github/workflows/Action-Test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Action-Test.yml b/.github/workflows/Action-Test.yml index 33ba7ea0..b03c4806 100644 --- a/.github/workflows/Action-Test.yml +++ b/.github/workflows/Action-Test.yml @@ -327,13 +327,13 @@ jobs: $passed = $false } - if (-not $_.ExecutedResult) { + if (-not $_.PassedExecuted) { Write-Error "Job $($_.Name) not executed as expected. (Actual: $($_.Executed), Expected: $($_.ExecutedExpected))" $passed = $false } if (-not $_.PassedResult) { - Write-Error "Job $($_.Name) tests did not pass as expected. (Actual: $($_.Passed), Expected: $($_.PassedExpected))" + Write-Error "Job $($_.Name) tests did not pass as expected. (Actual: $($_.Result), Expected: $($_.ResultExpected))" $passed = $false } } From 00fec1c62384d97cd0911f034d1f86c681a4a3e4 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 16:01:11 +0100 Subject: [PATCH 25/28] Refactor Action-Test.yml to improve variable naming for clarity in test outcomes --- .github/workflows/Action-Test.yml | 38 +++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/Action-Test.yml b/.github/workflows/Action-Test.yml index b03c4806..d03afb0e 100644 --- a/.github/workflows/Action-Test.yml +++ b/.github/workflows/Action-Test.yml @@ -239,76 +239,76 @@ jobs: Name = "Action-Test - [1-Simple]" Outcome = $ActionTest1SimpleOutcome OutcomeExpected = $ActionTest1SimpleOutcomeExpected - PassedOutcome = $ActionTest1SimpleOutcomeResult + OutcomeResult = $ActionTest1SimpleOutcomeResult Conclusion = $ActionTest1SimpleConclusion ConclusionExpected = $ActionTest1SimpleConclusionExpected - PassedConclusion = $ActionTest1SimpleConclusionResult + ConclusionResult = $ActionTest1SimpleConclusionResult Executed = $ActionTest1SimpleExecuted ExecutedExpected = $ActionTest1SimpleExecutedExpected ExecutedResult = $ActionTest1SimpleExecutedResult Result = $ActionTest1SimpleResult ResultExpected = $ActionTest1SimpleResultExpected - PassedResult = $ActionTest1SimplePassedResult + ResultResult = $ActionTest1SimpleResultResult }, [PSCustomObject]@{ Name = "Action-Test - [1-Simple-Failure]" Outcome = $ActionTest1SimpleFailureOutcome OutcomeExpected = $ActionTest1SimpleFailureOutcomeExpected - PassedOutcome = $ActionTest1SimpleFailureOutcomeResult + OutcomeResult = $ActionTest1SimpleFailureOutcomeResult Conclusion = $ActionTest1SimpleFailureConclusion ConclusionExpected = $ActionTest1SimpleFailureConclusionExpected - PassedConclusion = $ActionTest1SimpleFailureConclusionResult + ConclusionResult = $ActionTest1SimpleFailureConclusionResult Executed = $ActionTest1SimpleFailureExecuted ExecutedExpected = $ActionTest1SimpleFailureExecutedExpected ExecutedResult = $ActionTest1SimpleFailureExecutedResult Result = $ActionTest1SimpleFailureResult ResultExpected = $ActionTest1SimpleFailureResultExpected - PassedResult = $ActionTest1SimpleFailurePassedResult + ResultResult = $ActionTest1SimpleFailureResultResult }, [PSCustomObject]@{ Name = "Action-Test - [1-Simple-ExecutionFailure]" Outcome = $ActionTest1SimpleExecutionFailureOutcome OutcomeExpected = $ActionTest1SimpleExecutionFailureOutcomeExpected - PassedOutcome = $ActionTest1SimpleExecutionFailureOutcomeResult + OutcomeResult = $ActionTest1SimpleExecutionFailureOutcomeResult Conclusion = $ActionTest1SimpleExecutionFailureConclusion ConclusionExpected = $ActionTest1SimpleExecutionFailureConclusionExpected - PassedConclusion = $ActionTest1SimpleExecutionFailureConclusionResult + ConclusionResult = $ActionTest1SimpleExecutionFailureConclusionResult Executed = $ActionTest1SimpleExecutionFailureExecuted ExecutedExpected = $ActionTest1SimpleExecutionFailureExecutedExpected ExecutedResult = $ActionTest1SimpleExecutionFailureExecutedResult Result = $ActionTest1SimpleExecutionFailureResult ResultExpected = $ActionTest1SimpleExecutionFailureResultExpected - PassedResult = $ActionTest1SimpleExecutionFailurePassedResult + ResultResult = $ActionTest1SimpleExecutionFailureResultResult }, [PSCustomObject]@{ Name = "Action-Test - [2-Standard]" Outcome = $ActionTest2StandardOutcome OutcomeExpected = $ActionTest2StandardOutcomeExpected - PassedOutcome = $ActionTest2StandardOutcomeResult + OutcomeResult = $ActionTest2StandardOutcomeResult Conclusion = $ActionTest2StandardConclusion ConclusionExpected = $ActionTest2StandardConclusionExpected - PassedConclusion = $ActionTest2StandardConclusionResult + ConclusionResult = $ActionTest2StandardConclusionResult Executed = $ActionTest2StandardExecuted ExecutedExpected = $ActionTest2StandardExecutedExpected ExecutedResult = $ActionTest2StandardExecutedResult Result = $ActionTest2StandardResult ResultExpected = $ActionTest2StandardResultExpected - PassedResult = $ActionTest2StandardPassedResult + ResultResult = $ActionTest2StandardResultResult }, [PSCustomObject]@{ Name = "Action-Test - [3-Advanced]" Outcome = $ActionTest3AdvancedOutcome OutcomeExpected = $ActionTest3AdvancedOutcomeExpected - PassedOutcome = $ActionTest3AdvancedOutcomeResult + OutcomeResult = $ActionTest3AdvancedOutcomeResult Conclusion = $ActionTest3AdvancedConclusion ConclusionExpected = $ActionTest3AdvancedConclusionExpected - PassedConclusion = $ActionTest3AdvancedConclusionResult + ConclusionResult = $ActionTest3AdvancedConclusionResult Executed = $ActionTest3AdvancedExecuted ExecutedExpected = $ActionTest3AdvancedExecutedExpected ExecutedResult = $ActionTest3AdvancedExecutedResult Result = $ActionTest3AdvancedResult ResultExpected = $ActionTest3AdvancedResultExpected - PassedResult = $ActionTest3AdvancedPassedResult + ResultResult = $ActionTest3AdvancedResultResult } ) @@ -317,22 +317,22 @@ jobs: $passed = $true $jobs | ForEach-Object { - if (-not $_.PassedOutcome) { + if (-not $_.OutcomeResult) { Write-Error "Job $($_.Name) failed with Outcome $($_.Outcome) and Expected Outcome $($_.OutcomeExpected)" $passed = $false } - if (-not $_.PassedConclusion) { + if (-not $_.ConclusionResult) { Write-Error "Job $($_.Name) failed with Conclusion $($_.Conclusion) and Expected Conclusion $($_.ConclusionExpected)" $passed = $false } - if (-not $_.PassedExecuted) { + if (-not $_.ExecutedResult) { Write-Error "Job $($_.Name) not executed as expected. (Actual: $($_.Executed), Expected: $($_.ExecutedExpected))" $passed = $false } - if (-not $_.PassedResult) { + if (-not $_.ResultResult) { Write-Error "Job $($_.Name) tests did not pass as expected. (Actual: $($_.Result), Expected: $($_.ResultExpected))" $passed = $false } From 7b6da25de87aa10d285a4da5cfb290eebef1d250 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 16:05:52 +0100 Subject: [PATCH 26/28] Fix variable naming in Action-Test.yml for consistency in result evaluations --- .github/workflows/Action-Test.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/Action-Test.yml b/.github/workflows/Action-Test.yml index d03afb0e..f352202b 100644 --- a/.github/workflows/Action-Test.yml +++ b/.github/workflows/Action-Test.yml @@ -180,7 +180,7 @@ jobs: $ActionTest1SimpleExecutedResult = $ActionTest1SimpleExecuted -eq $ActionTest1SimpleExecutedExpected $ActionTest1SimpleResult = '${{ needs.ActionTest1Simple.outputs.Result }}' $ActionTest1SimpleResultExpected = 'Passed' - $ActionTest1SimplePassedResult = $ActionTest1SimpleResult -eq $ActionTest1SimpleResultExpected + $ActionTest1SimpleResultResult = $ActionTest1SimpleResult -eq $ActionTest1SimpleResultExpected $ActionTest1SimpleFailureOutcome = '${{ needs.ActionTest1SimpleFailure.outputs.outcome }}' $ActionTest1SimpleFailureOutcomeExpected = 'failure' @@ -193,7 +193,7 @@ jobs: $ActionTest1SimpleFailureExecutedResult = $ActionTest1SimpleFailureExecuted -eq $ActionTest1SimpleFailureExecutedExpected $ActionTest1SimpleFailureResult = '${{ needs.ActionTest1SimpleFailure.outputs.Result }}' $ActionTest1SimpleFailureResultExpected = 'Failed' - $ActionTest1SimpleFailurePassedResult = $ActionTest1SimpleFailureResult -eq $ActionTest1SimpleFailureResultExpected + $ActionTest1SimpleFailureResultResult = $ActionTest1SimpleFailureResult -eq $ActionTest1SimpleFailureResultExpected $ActionTest1SimpleExecutionFailureOutcome = '${{ needs.ActionTest1SimpleExecutionFailure.outputs.outcome }}' $ActionTest1SimpleExecutionFailureOutcomeExpected = 'failure' @@ -206,7 +206,7 @@ jobs: $ActionTest1SimpleExecutionFailureExecutedResult = $ActionTest1SimpleExecutionFailureExecuted -eq $ActionTest1SimpleExecutionFailureExecutedExpected $ActionTest1SimpleExecutionFailureResult = '${{ needs.ActionTest1SimpleExecutionFailure.outputs.Result }}' $ActionTest1SimpleExecutionFailureResultExpected = '' - $ActionTest1SimpleExecutionFailurePassedResult = $ActionTest1SimpleExecutionFailureResult -eq $ActionTest1SimpleExecutionFailureResultExpected + $ActionTest1SimpleExecutionFailureResultResult = $ActionTest1SimpleExecutionFailureResult -eq $ActionTest1SimpleExecutionFailureResultExpected $ActionTest2StandardOutcome = '${{ needs.ActionTest2Standard.outputs.outcome }}' $ActionTest2StandardOutcomeExpected = 'success' @@ -219,7 +219,7 @@ jobs: $ActionTest2StandardExecutedResult = $ActionTest2StandardExecuted -eq $ActionTest2StandardExecutedExpected $ActionTest2StandardResult = '${{ needs.ActionTest2Standard.outputs.Result }}' $ActionTest2StandardResultExpected = 'Passed' - $ActionTest2StandardPassedResult = $ActionTest2StandardResult -eq $ActionTest2StandardResultExpected + $ActionTest2StandardResultResult = $ActionTest2StandardResult -eq $ActionTest2StandardResultExpected $ActionTest3AdvancedOutcome = '${{ needs.ActionTest3Advanced.outputs.outcome }}' $ActionTest3AdvancedOutcomeExpected = 'success' @@ -232,7 +232,7 @@ jobs: $ActionTest3AdvancedExecutedResult = $ActionTest3AdvancedExecuted -eq $ActionTest3AdvancedExecutedExpected $ActionTest3AdvancedResult = '${{ needs.ActionTest3Advanced.outputs.Result }}' $ActionTest3AdvancedResultExpected = 'Passed' - $ActionTest3AdvancedPassedResult = $ActionTest3AdvancedResult -eq $ActionTest3AdvancedResultExpected + $ActionTest3AdvancedResultResult = $ActionTest3AdvancedResult -eq $ActionTest3AdvancedResultExpected $jobs = @( [PSCustomObject]@{ From 23491463612a8779eba7c56ed3e35689b087715f Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 16:13:40 +0100 Subject: [PATCH 27/28] Update jscpd configuration to ignore Action-Test workflow files --- .github/linters/.jscpd.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/linters/.jscpd.json b/.github/linters/.jscpd.json index 23970e85..22fd7de8 100644 --- a/.github/linters/.jscpd.json +++ b/.github/linters/.jscpd.json @@ -4,7 +4,8 @@ "consoleFull" ], "ignore": [ - "**/tests/**" + "**/tests/**", + "**.github/workflows/Action-Test**" ], "absolute": true } From 9d5b2e27ca906701fb7c80c9bfec0ce5e42ca114 Mon Sep 17 00:00:00 2001 From: Marius Storhaug Date: Sat, 8 Mar 2025 16:16:53 +0100 Subject: [PATCH 28/28] Fix jscpd configuration to correctly ignore Action-Test workflow files --- .github/linters/.jscpd.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/linters/.jscpd.json b/.github/linters/.jscpd.json index 22fd7de8..3bbc16c5 100644 --- a/.github/linters/.jscpd.json +++ b/.github/linters/.jscpd.json @@ -5,7 +5,7 @@ ], "ignore": [ "**/tests/**", - "**.github/workflows/Action-Test**" + "**/.github/workflows/Action-Test**" ], "absolute": true }