From 775ff405cfe507d94c54d3afa38b783c010eceb0 Mon Sep 17 00:00:00 2001 From: Sebastian Petersen Date: Mon, 25 Aug 2025 11:17:19 +0200 Subject: [PATCH 01/10] New SelectedSettingsJson output which holds all settings selected using the get param. --- Actions/ReadSettings/README.md | 1 + Actions/ReadSettings/ReadSettings.ps1 | 8 ++++++++ Actions/ReadSettings/action.yaml | 3 +++ 3 files changed, 12 insertions(+) diff --git a/Actions/ReadSettings/README.md b/Actions/ReadSettings/README.md index 16e85f19c7..62b6756677 100644 --- a/Actions/ReadSettings/README.md +++ b/Actions/ReadSettings/README.md @@ -34,3 +34,4 @@ none | :-- | :-- | | GitHubRunnerJson | GitHubRunner in compressed Json format | | GitHubRunnerShell | Shell for GitHubRunner jobs | +| SelectedSettingsJson | Selected settings from the get parameter in compressed JSON format | diff --git a/Actions/ReadSettings/ReadSettings.ps1 b/Actions/ReadSettings/ReadSettings.ps1 index c7b83103ad..0ebd5fe5a8 100644 --- a/Actions/ReadSettings/ReadSettings.ps1 +++ b/Actions/ReadSettings/ReadSettings.ps1 @@ -55,6 +55,7 @@ if ($settings.versioningstrategy -ne -1) { } $outSettings = @{} +$selectedSettings = @{} $settings.Keys | ForEach-Object { $setting = $_ $settingValue = $settings."$setting" @@ -69,6 +70,8 @@ $settings.Keys | ForEach-Object { else { Add-Content -Encoding UTF8 -Path $env:GITHUB_ENV -Value "$setting=$settingValue" } + # Add to selected settings for JSON output + $selectedSettings[$setting] = $settingValue } } @@ -83,3 +86,8 @@ Write-Host "GitHubRunnerJson=$githubRunner" $gitHubRunnerShell = $settings.githubRunnerShell Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "GitHubRunnerShell=$githubRunnerShell" Write-Host "GitHubRunnerShell=$githubRunnerShell" + +# Create JSON output for selected settings +$selectedSettingsJson = $selectedSettings | ConvertTo-Json -Depth 99 -Compress +Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "SelectedSettingsJson=$selectedSettingsJson" +Write-Host "SelectedSettingsJson=$selectedSettingsJson" diff --git a/Actions/ReadSettings/action.yaml b/Actions/ReadSettings/action.yaml index d978510e0e..d19162cdd7 100644 --- a/Actions/ReadSettings/action.yaml +++ b/Actions/ReadSettings/action.yaml @@ -24,6 +24,9 @@ outputs: GitHubRunnerShell: description: Shell for GitHubRunner jobs value: ${{ steps.readsettings.outputs.GitHubRunnerShell }} + SelectedSettingsJson: + description: Selected settings from the get parameter in compressed JSON format + value: ${{ steps.readsettings.outputs.SelectedSettingsJson }} runs: using: composite steps: From 6c65905bd0cc2705cb4e04eab9eba728abbecf74 Mon Sep 17 00:00:00 2001 From: Sebastian Petersen Date: Mon, 25 Aug 2025 11:17:34 +0200 Subject: [PATCH 02/10] Testing new output in PTE PR workflow. --- .../.github/workflows/PullRequestHandler.yaml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/Templates/Per Tenant Extension/.github/workflows/PullRequestHandler.yaml b/Templates/Per Tenant Extension/.github/workflows/PullRequestHandler.yaml index 33a144275e..0d3a6090a7 100644 --- a/Templates/Per Tenant Extension/.github/workflows/PullRequestHandler.yaml +++ b/Templates/Per Tenant Extension/.github/workflows/PullRequestHandler.yaml @@ -40,8 +40,8 @@ jobs: buildOrderJson: ${{ steps.determineProjectsToBuild.outputs.BuildOrderJson }} baselineWorkflowRunId: ${{ steps.determineProjectsToBuild.outputs.BaselineWorkflowRunId }} baselineWorkflowSHA: ${{ steps.determineProjectsToBuild.outputs.BaselineWorkflowSHA }} - workflowDepth: ${{ steps.DetermineWorkflowDepth.outputs.WorkflowDepth }} - artifactsRetentionDays: ${{ steps.DetermineWorkflowDepth.outputs.ArtifactsRetentionDays }} + workflowDepth: ${{ env.workflowDepth }} + artifactsRetentionDays: ${{ fromJson(steps.ReadSettings.outputs.SelectedSettingsJson).shortLivedArtifactsRetentionDays }} telemetryScopeJson: ${{ steps.init.outputs.telemetryScopeJson }} steps: - name: Dump Workflow Information @@ -68,12 +68,6 @@ jobs: shell: powershell get: shortLivedArtifactsRetentionDays - - name: Determine Workflow Depth - id: DetermineWorkflowDepth - run: | - Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "WorkflowDepth=$($env:workflowDepth)" - Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "ArtifactsRetentionDays=$($env:shortLivedArtifactsRetentionDays)" - - name: Determine Projects To Build id: determineProjectsToBuild uses: microsoft/AL-Go-Actions/DetermineProjectsToBuild@main From 398ea25ddc4f744cf894c8630165a96e15cb746f Mon Sep 17 00:00:00 2001 From: Sebastian Petersen Date: Mon, 25 Aug 2025 16:22:25 +0200 Subject: [PATCH 03/10] Using new readsettings output in CICD. --- .../.github/workflows/CICD.yaml | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/Templates/Per Tenant Extension/.github/workflows/CICD.yaml b/Templates/Per Tenant Extension/.github/workflows/CICD.yaml index b6d83d4ea9..cb46925f65 100644 --- a/Templates/Per Tenant Extension/.github/workflows/CICD.yaml +++ b/Templates/Per Tenant Extension/.github/workflows/CICD.yaml @@ -44,8 +44,8 @@ jobs: buildOrderJson: ${{ steps.determineProjectsToBuild.outputs.BuildOrderJson }} baselineWorkflowRunId: ${{ steps.determineProjectsToBuild.outputs.BaselineWorkflowRunId }} baselineWorkflowSHA: ${{ steps.determineProjectsToBuild.outputs.BaselineWorkflowSHA }} - workflowDepth: ${{ steps.DetermineWorkflowDepth.outputs.WorkflowDepth }} - powerPlatformSolutionFolder: ${{ steps.DeterminePowerPlatformSolutionFolder.outputs.powerPlatformSolutionFolder }} + workflowDepth: ${{ env.workflowDepth }} + powerPlatformSolutionFolder: ${{ fromJson(steps.ReadSettings.outputs.SelectedSettingsJson).powerPlatformSolutionFolder }} steps: - name: Dump Workflow Information uses: microsoft/AL-Go-Actions/DumpWorkflowInfo@main @@ -87,11 +87,6 @@ jobs: submodules: ${{ env.useGitSubmodules }} token: '${{ fromJson(steps.ReadSubmodulesToken.outputs.Secrets).gitSubmodulesToken }}' - - name: Determine Workflow Depth - id: DetermineWorkflowDepth - run: | - Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "WorkflowDepth=$($env:workflowDepth)" - - name: Determine Projects To Build id: determineProjectsToBuild uses: microsoft/AL-Go-Actions/DetermineProjectsToBuild@main @@ -99,12 +94,6 @@ jobs: shell: powershell maxBuildDepth: ${{ env.workflowDepth }} - - name: Determine PowerPlatform Solution Folder - id: DeterminePowerPlatformSolutionFolder - if: env.type == 'PTE' - run: | - Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "powerPlatformSolutionFolder=$($env:powerPlatformSolutionFolder)" - - name: Determine Delivery Target Secrets id: DetermineDeliveryTargetSecrets uses: microsoft/AL-Go-Actions/DetermineDeliveryTargets@main From e7015d3a43d3dbb1cc889d98a277958fb7856cb4 Mon Sep 17 00:00:00 2001 From: Sebastian Petersen Date: Mon, 25 Aug 2025 16:47:03 +0200 Subject: [PATCH 04/10] Replicating changes in AppSource workflows. --- .../AppSource App/.github/workflows/CICD.yaml | 15 ++------------- .../.github/workflows/PullRequestHandler.yaml | 10 ++-------- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/Templates/AppSource App/.github/workflows/CICD.yaml b/Templates/AppSource App/.github/workflows/CICD.yaml index 8e5b1f395f..f9a0788965 100644 --- a/Templates/AppSource App/.github/workflows/CICD.yaml +++ b/Templates/AppSource App/.github/workflows/CICD.yaml @@ -44,8 +44,8 @@ jobs: buildOrderJson: ${{ steps.determineProjectsToBuild.outputs.BuildOrderJson }} baselineWorkflowRunId: ${{ steps.determineProjectsToBuild.outputs.BaselineWorkflowRunId }} baselineWorkflowSHA: ${{ steps.determineProjectsToBuild.outputs.BaselineWorkflowSHA }} - workflowDepth: ${{ steps.DetermineWorkflowDepth.outputs.WorkflowDepth }} - powerPlatformSolutionFolder: ${{ steps.DeterminePowerPlatformSolutionFolder.outputs.powerPlatformSolutionFolder }} + workflowDepth: ${{ env.workflowDepth }} + powerPlatformSolutionFolder: ${{ fromJson(steps.ReadSettings.outputs.SelectedSettingsJson).powerPlatformSolutionFolder }} steps: - name: Dump Workflow Information uses: microsoft/AL-Go-Actions/DumpWorkflowInfo@main @@ -87,11 +87,6 @@ jobs: submodules: ${{ env.useGitSubmodules }} token: '${{ fromJson(steps.ReadSubmodulesToken.outputs.Secrets).gitSubmodulesToken }}' - - name: Determine Workflow Depth - id: DetermineWorkflowDepth - run: | - Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "WorkflowDepth=$($env:workflowDepth)" - - name: Determine Projects To Build id: determineProjectsToBuild uses: microsoft/AL-Go-Actions/DetermineProjectsToBuild@main @@ -99,12 +94,6 @@ jobs: shell: powershell maxBuildDepth: ${{ env.workflowDepth }} - - name: Determine PowerPlatform Solution Folder - id: DeterminePowerPlatformSolutionFolder - if: env.type == 'PTE' - run: | - Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "powerPlatformSolutionFolder=$($env:powerPlatformSolutionFolder)" - - name: Determine Delivery Target Secrets id: DetermineDeliveryTargetSecrets uses: microsoft/AL-Go-Actions/DetermineDeliveryTargets@main diff --git a/Templates/AppSource App/.github/workflows/PullRequestHandler.yaml b/Templates/AppSource App/.github/workflows/PullRequestHandler.yaml index 33a144275e..0d3a6090a7 100644 --- a/Templates/AppSource App/.github/workflows/PullRequestHandler.yaml +++ b/Templates/AppSource App/.github/workflows/PullRequestHandler.yaml @@ -40,8 +40,8 @@ jobs: buildOrderJson: ${{ steps.determineProjectsToBuild.outputs.BuildOrderJson }} baselineWorkflowRunId: ${{ steps.determineProjectsToBuild.outputs.BaselineWorkflowRunId }} baselineWorkflowSHA: ${{ steps.determineProjectsToBuild.outputs.BaselineWorkflowSHA }} - workflowDepth: ${{ steps.DetermineWorkflowDepth.outputs.WorkflowDepth }} - artifactsRetentionDays: ${{ steps.DetermineWorkflowDepth.outputs.ArtifactsRetentionDays }} + workflowDepth: ${{ env.workflowDepth }} + artifactsRetentionDays: ${{ fromJson(steps.ReadSettings.outputs.SelectedSettingsJson).shortLivedArtifactsRetentionDays }} telemetryScopeJson: ${{ steps.init.outputs.telemetryScopeJson }} steps: - name: Dump Workflow Information @@ -68,12 +68,6 @@ jobs: shell: powershell get: shortLivedArtifactsRetentionDays - - name: Determine Workflow Depth - id: DetermineWorkflowDepth - run: | - Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "WorkflowDepth=$($env:workflowDepth)" - Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "ArtifactsRetentionDays=$($env:shortLivedArtifactsRetentionDays)" - - name: Determine Projects To Build id: determineProjectsToBuild uses: microsoft/AL-Go-Actions/DetermineProjectsToBuild@main From 99a7b06a6b5ca55bfece7056079d866f8c421d40 Mon Sep 17 00:00:00 2001 From: Sebastian Petersen Date: Tue, 26 Aug 2025 12:38:35 +0200 Subject: [PATCH 05/10] Added test for new output. --- Tests/ReadSettings.Action.Test.ps1 | 46 ++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/Tests/ReadSettings.Action.Test.ps1 b/Tests/ReadSettings.Action.Test.ps1 index 0077bac4ee..80ee84c60d 100644 --- a/Tests/ReadSettings.Action.Test.ps1 +++ b/Tests/ReadSettings.Action.Test.ps1 @@ -11,6 +11,21 @@ Describe "ReadSettings Action Tests" { $scriptPath = Join-Path $scriptRoot $scriptName [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'actionScript', Justification = 'False positive.')] $actionScript = GetActionScript -scriptRoot $scriptRoot -scriptName $scriptName + # Mock Write-Host { } + Mock Out-Host { } + } + + BeforeEach { + $testFolder = (Join-Path ([System.IO.Path]::GetTempPath()) "readSettingsActionTest") + New-Item -Path $testFolder -ItemType Directory -Force | Out-Null + $env:GITHUB_ENV = (Join-Path $testFolder "githubEnv") + $env:GITHUB_OUTPUT = (Join-Path $testFolder "githubOutput") + New-Item -Path $env:GITHUB_ENV -ItemType file -Force | Out-Null + New-Item -Path $env:GITHUB_OUTPUT -ItemType file -Force | Out-Null + } + + AfterEach { + Remove-Item -Path $testFolder -Recurse -Force -ErrorAction SilentlyContinue } It 'Compile Action' { @@ -21,7 +36,38 @@ Describe "ReadSettings Action Tests" { $outputs = [ordered]@{ "GitHubRunnerJson" = "GitHubRunner in compressed Json format" "GitHubRunnerShell" = "Shell for GitHubRunner jobs" + "SelectedSettingsJson" = "Selected settings from the get parameter in compressed JSON format" } YamlTest -scriptRoot $scriptRoot -actionName $actionName -actionScript $actionScript -outputs $outputs } + + It 'Settings in get param are correctly added to SelectedSettingsJson output' { + & $scriptPath ` + -get 'shortLivedArtifactsRetentionDays,powerPlatformSolutionFolder' + + # Read the output file content + $outputContent = Get-Content $env:GITHUB_OUTPUT + + # Find the SelectedSettingsJson line and extract its value + $selectedSettingsLine = $outputContent | Where-Object { $_ -match '^SelectedSettingsJson=(.*)$' } + $selectedSettingsLine | Should -Not -BeNullOrEmpty + + # Extract the JSON value from the line + if ($selectedSettingsLine -match '^SelectedSettingsJson=(.*)$') { + $jsonValue = $Matches[1] + + # Parse the JSON to verify it's valid + $settingsObject = $jsonValue | ConvertFrom-Json + + # Verify the expected properties are present + $settingsObject.PSObject.Properties.Name | Should -Contain 'shortLivedArtifactsRetentionDays' + $settingsObject.PSObject.Properties.Name | Should -Contain 'powerPlatformSolutionFolder' + + # Verify the values are correct (assuming default values) + $settingsObject.shortLivedArtifactsRetentionDays | Should -Be 1 + $settingsObject.powerPlatformSolutionFolder | Should -Be '' + } else { + throw "Could not extract JSON value from SelectedSettingsJson output" + } + } } From d9e405ed6df01b60f28a9e33ceda816d96625520 Mon Sep 17 00:00:00 2001 From: Sebastian Petersen Date: Tue, 26 Aug 2025 12:43:08 +0200 Subject: [PATCH 06/10] pre-commit --- Tests/ReadSettings.Action.Test.ps1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Tests/ReadSettings.Action.Test.ps1 b/Tests/ReadSettings.Action.Test.ps1 index 80ee84c60d..107ec23724 100644 --- a/Tests/ReadSettings.Action.Test.ps1 +++ b/Tests/ReadSettings.Action.Test.ps1 @@ -55,14 +55,14 @@ Describe "ReadSettings Action Tests" { # Extract the JSON value from the line if ($selectedSettingsLine -match '^SelectedSettingsJson=(.*)$') { $jsonValue = $Matches[1] - + # Parse the JSON to verify it's valid $settingsObject = $jsonValue | ConvertFrom-Json - + # Verify the expected properties are present $settingsObject.PSObject.Properties.Name | Should -Contain 'shortLivedArtifactsRetentionDays' $settingsObject.PSObject.Properties.Name | Should -Contain 'powerPlatformSolutionFolder' - + # Verify the values are correct (assuming default values) $settingsObject.shortLivedArtifactsRetentionDays | Should -Be 1 $settingsObject.powerPlatformSolutionFolder | Should -Be '' From 9902f9533c058bf1103f04da318e76acfe443d9a Mon Sep 17 00:00:00 2001 From: Sebastian Petersen Date: Tue, 26 Aug 2025 12:48:30 +0200 Subject: [PATCH 07/10] Call action in test with no project. --- Tests/ReadSettings.Action.Test.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/Tests/ReadSettings.Action.Test.ps1 b/Tests/ReadSettings.Action.Test.ps1 index 107ec23724..27b61a2dc3 100644 --- a/Tests/ReadSettings.Action.Test.ps1 +++ b/Tests/ReadSettings.Action.Test.ps1 @@ -43,6 +43,7 @@ Describe "ReadSettings Action Tests" { It 'Settings in get param are correctly added to SelectedSettingsJson output' { & $scriptPath ` + -project '' ` -get 'shortLivedArtifactsRetentionDays,powerPlatformSolutionFolder' # Read the output file content From 2e9ca93d2890f8fbf982d7389076a702e3c89736 Mon Sep 17 00:00:00 2001 From: Sebastian Petersen Date: Tue, 26 Aug 2025 14:51:10 +0200 Subject: [PATCH 08/10] Setting GITHuB_WORKSPACE var. --- Tests/ReadSettings.Action.Test.ps1 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Tests/ReadSettings.Action.Test.ps1 b/Tests/ReadSettings.Action.Test.ps1 index 27b61a2dc3..1c8159c7bf 100644 --- a/Tests/ReadSettings.Action.Test.ps1 +++ b/Tests/ReadSettings.Action.Test.ps1 @@ -1,4 +1,5 @@ Get-Module TestActionsHelper | Remove-Module -Force +Get-Module ReadSettings | Remove-Module -Force Import-Module (Join-Path $PSScriptRoot 'TestActionsHelper.psm1') $errorActionPreference = "Stop"; $ProgressPreference = "SilentlyContinue"; Set-StrictMode -Version 2.0 @@ -11,13 +12,14 @@ Describe "ReadSettings Action Tests" { $scriptPath = Join-Path $scriptRoot $scriptName [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'actionScript', Justification = 'False positive.')] $actionScript = GetActionScript -scriptRoot $scriptRoot -scriptName $scriptName + $testFolder = (Join-Path ([System.IO.Path]::GetTempPath()) "readSettingsActionTest") + $ENV:GITHUB_WORKSPACE = $testFolder + New-Item -Path $testFolder -ItemType Directory -Force | Out-Null # Mock Write-Host { } Mock Out-Host { } } BeforeEach { - $testFolder = (Join-Path ([System.IO.Path]::GetTempPath()) "readSettingsActionTest") - New-Item -Path $testFolder -ItemType Directory -Force | Out-Null $env:GITHUB_ENV = (Join-Path $testFolder "githubEnv") $env:GITHUB_OUTPUT = (Join-Path $testFolder "githubOutput") New-Item -Path $env:GITHUB_ENV -ItemType file -Force | Out-Null From 9ea8bfa63abac7445ddd18ad750bd0faabfe56ce Mon Sep 17 00:00:00 2001 From: Sebastian Petersen Date: Tue, 26 Aug 2025 14:57:54 +0200 Subject: [PATCH 09/10] Removed unneeded comment. --- Actions/ReadSettings/ReadSettings.ps1 | 2 -- 1 file changed, 2 deletions(-) diff --git a/Actions/ReadSettings/ReadSettings.ps1 b/Actions/ReadSettings/ReadSettings.ps1 index 0ebd5fe5a8..b42e8fd5cc 100644 --- a/Actions/ReadSettings/ReadSettings.ps1 +++ b/Actions/ReadSettings/ReadSettings.ps1 @@ -70,7 +70,6 @@ $settings.Keys | ForEach-Object { else { Add-Content -Encoding UTF8 -Path $env:GITHUB_ENV -Value "$setting=$settingValue" } - # Add to selected settings for JSON output $selectedSettings[$setting] = $settingValue } } @@ -87,7 +86,6 @@ $gitHubRunnerShell = $settings.githubRunnerShell Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "GitHubRunnerShell=$githubRunnerShell" Write-Host "GitHubRunnerShell=$githubRunnerShell" -# Create JSON output for selected settings $selectedSettingsJson = $selectedSettings | ConvertTo-Json -Depth 99 -Compress Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "SelectedSettingsJson=$selectedSettingsJson" Write-Host "SelectedSettingsJson=$selectedSettingsJson" From b181a64d52c1d89c5b4737d60ee9bb3a9dc6294b Mon Sep 17 00:00:00 2001 From: Sebastian Petersen Date: Wed, 27 Aug 2025 10:26:03 +0200 Subject: [PATCH 10/10] Cleanup --- Tests/ReadSettings.Action.Test.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/ReadSettings.Action.Test.ps1 b/Tests/ReadSettings.Action.Test.ps1 index 1c8159c7bf..a03bfbe338 100644 --- a/Tests/ReadSettings.Action.Test.ps1 +++ b/Tests/ReadSettings.Action.Test.ps1 @@ -14,12 +14,12 @@ Describe "ReadSettings Action Tests" { $actionScript = GetActionScript -scriptRoot $scriptRoot -scriptName $scriptName $testFolder = (Join-Path ([System.IO.Path]::GetTempPath()) "readSettingsActionTest") $ENV:GITHUB_WORKSPACE = $testFolder - New-Item -Path $testFolder -ItemType Directory -Force | Out-Null - # Mock Write-Host { } + Mock Write-Host { } Mock Out-Host { } } BeforeEach { + New-Item -Path $testFolder -ItemType Directory -Force | Out-Null $env:GITHUB_ENV = (Join-Path $testFolder "githubEnv") $env:GITHUB_OUTPUT = (Join-Path $testFolder "githubOutput") New-Item -Path $env:GITHUB_ENV -ItemType file -Force | Out-Null