diff --git a/Actions/ReadSettings/README.md b/Actions/ReadSettings/README.md index b129c0463..5e69ef63f 100644 --- a/Actions/ReadSettings/README.md +++ b/Actions/ReadSettings/README.md @@ -35,3 +35,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 301f53e7a..4f6912ab9 100644 --- a/Actions/ReadSettings/ReadSettings.ps1 +++ b/Actions/ReadSettings/ReadSettings.ps1 @@ -57,6 +57,7 @@ if ($settings.versioningstrategy -ne -1) { } $outSettings = @{} +$selectedSettings = @{} $settings.Keys | ForEach-Object { $setting = $_ $settingValue = $settings."$setting" @@ -71,6 +72,7 @@ $settings.Keys | ForEach-Object { else { Add-Content -Encoding UTF8 -Path $env:GITHUB_ENV -Value "$setting=$settingValue" } + $selectedSettings[$setting] = $settingValue } } @@ -85,3 +87,7 @@ Write-Host "GitHubRunnerJson=$githubRunner" $gitHubRunnerShell = $settings.githubRunnerShell Add-Content -Encoding UTF8 -Path $env:GITHUB_OUTPUT -Value "GitHubRunnerShell=$githubRunnerShell" Write-Host "GitHubRunnerShell=$githubRunnerShell" + +$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 3709208eb..271ef73b3 100644 --- a/Actions/ReadSettings/action.yaml +++ b/Actions/ReadSettings/action.yaml @@ -28,6 +28,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: diff --git a/Templates/AppSource App/.github/workflows/CICD.yaml b/Templates/AppSource App/.github/workflows/CICD.yaml index 8e5b1f395..f9a078896 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 33a144275..0d3a6090a 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 diff --git a/Templates/Per Tenant Extension/.github/workflows/CICD.yaml b/Templates/Per Tenant Extension/.github/workflows/CICD.yaml index b6d83d4ea..cb46925f6 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 diff --git a/Templates/Per Tenant Extension/.github/workflows/PullRequestHandler.yaml b/Templates/Per Tenant Extension/.github/workflows/PullRequestHandler.yaml index 33a144275..0d3a6090a 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 diff --git a/Tests/ReadSettings.Action.Test.ps1 b/Tests/ReadSettings.Action.Test.ps1 index 0077bac4e..a03bfbe33 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,6 +12,22 @@ 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 + 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 + 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 +38,39 @@ 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 ` + -project '' ` + -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" + } + } }