From cbf09833c34fe99df400a49a9c771a24f28b0a7e Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Thu, 28 May 2026 15:44:31 -0700 Subject: [PATCH 1/7] Discover and install DSC dynamically for CI tests --- .ci/ci.yml | 10 ------ .ci/test.yml | 89 ++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 69 insertions(+), 30 deletions(-) diff --git a/.ci/ci.yml b/.ci/ci.yml index c80297d55..7add12474 100644 --- a/.ci/ci.yml +++ b/.ci/ci.yml @@ -10,11 +10,6 @@ pr: include: - master -parameters: - - name: DSCVersion - default: '3.2.0-rc.1' - type: string - resources: repositories: - repository: ComplianceRepo @@ -127,7 +122,6 @@ stages: jobName: TestPkgWin displayName: PowerShell Core on Windows imageName: windows-latest - DSCVersion: ${{ parameters.DSCVersion }} - template: test.yml parameters: @@ -135,21 +129,18 @@ stages: displayName: Windows PowerShell on Windows imageName: windows-latest powershellExecutable: powershell - DSCVersion: ${{ parameters.DSCVersion }} - template: test.yml parameters: jobName: TestPkgUbuntu displayName: PowerShell Core on Ubuntu imageName: ubuntu-latest - DSCVersion: ${{ parameters.DSCVersion }} - template: test.yml parameters: jobName: TestPkgWinMacOS displayName: PowerShell Core on macOS imageName: macOS-latest - DSCVersion: ${{ parameters.DSCVersion }} - template: test.yml parameters: @@ -157,4 +148,3 @@ stages: displayName: AzAuth PowerShell Core on Windows imageName: windows-latest useAzAuth: true - DSCVersion: ${{ parameters.DSCVersion }} diff --git a/.ci/test.yml b/.ci/test.yml index 7ef59763b..ce296e7e4 100644 --- a/.ci/test.yml +++ b/.ci/test.yml @@ -5,7 +5,6 @@ parameters: powershellExecutable: pwsh buildDirectory: '.' useAzAuth: false - DSCVersion: '3.2.0-rc.1' jobs: - job: ${{ parameters.jobName }} @@ -97,39 +96,89 @@ jobs: condition: eq(${{ parameters.useAzAuth }}, false) - pwsh: | - $version = '${{ parameters.DSCVersion }}' - $packageName = "DSC-$version" - $ext = 'tar.gz' - $executableName = 'dsc' - $executableExt = if ($IsWindows) { '.exe' } else { '' } - - $uri = if ($IsWindows) { - $ext = 'zip' - "https://github.com/PowerShell/DSC/releases/download/v$version/DSC-$version-x86_64-pc-windows-msvc.zip" - } elseif ($IsLinux) { - "https://github.com/PowerShell/DSC/releases/download/v$version/DSC-$version-x86_64-linux.tar.gz" + # $version = '${{ parameters.DSCVersion }}' + # $packageName = "DSC-$version" + # $ext = 'tar.gz' + # $executableName = 'dsc' + # $executableExt = if ($IsWindows) { '.exe' } else { '' } + + # $uri = if ($IsWindows) { + # $ext = 'zip' + # "https://github.com/PowerShell/DSC/releases/download/v$version/DSC-$version-x86_64-pc-windows-msvc.zip" + # } elseif ($IsLinux) { + # "https://github.com/PowerShell/DSC/releases/download/v$version/DSC-$version-x86_64-linux.tar.gz" + # } + # elseif ($IsMacOS) { + # "https://github.com/PowerShell/DSC/releases/download/v$version/DSC-$version-x86_64-apple-darwin.tar.gz" + + # } + # else { + # throw "Unsupported OS platform" + # } + + # $destPath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath "$packageName.$ext" + + # Write-Verbose -Verbose "Downloading DSC v3 from $uri to $destPath" + + # Invoke-WebRequest -Uri $uri -OutFile $destPath + + $repo = "PowerShell/DSC" + $api = "https://api.github.com/repos/$repo/releases" + + $headers = @{ + "User-Agent" = "pwsh" + "Accept" = "application/vnd.github+json" } - elseif ($IsMacOS) { - "https://github.com/PowerShell/DSC/releases/download/v$version/DSC-$version-x86_64-apple-darwin.tar.gz" + # Get releases + $releases = Invoke-RestMethod -Uri $api -Headers $headers + + # Pick latest by publish date (handles prerelease vs stable automatically) + $latest = $releases | + Sort-Object published_at -Descending | + Select-Object -First 1 + + Write-Host "Latest version: $($latest.tag_name) (prerelease=$($latest.prerelease))" + + if ($IsWindows) { + $assetFilter = "windows-msvc" # adjust as needed + } + elseif ($IsMacOs) { + $assetFilter = "apple-darwin" # adjust as needed } else { - throw "Unsupported OS platform" + $assetFilter = "linux" # adjust as needed } - $destPath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath "$packageName.$ext" + $assets = $latest.assets | + Where-Object { $_.name -match $assetFilter } - Write-Verbose -Verbose "Downloading DSC v3 from $uri to $destPath" + Write-Host "Filtered assets: $($assets.Count)" + + $selectedAsset = $assets | Select-Object -First 1 + + Write-Host "Selected asset: $($selectedAsset.name)" + + $outFile = Join-Path $PWD $selectedAsset.name + + Write-Host "Downloading $($selectedAsset.name)" + + Invoke-WebRequest ` + -Uri $selectedAsset.browser_download_url ` + -Headers @{ "User-Agent"="pwsh" } ` + -OutFile $outFile - Invoke-WebRequest -Uri $uri -OutFile $destPath if ($IsWindows) { - Expand-Archive -Path $destPath -DestinationPath $env:AGENT_TEMPDIRECTORY -Force -Verbose + Expand-Archive -Path $outFile -DestinationPath $env:AGENT_TEMPDIRECTORY -Force -Verbose } else { - tar -xzf $destPath -C $env:AGENT_TEMPDIRECTORY + tar -xzf $outFile -C $env:AGENT_TEMPDIRECTORY } + $executableName = 'dsc' + $executableExt = if ($IsWindows) { '.exe' } else { '' } + $executableFileName = $executableName + $executableExt $executable = Get-ChildItem -Path $env:AGENT_TEMPDIRECTORY -File -Recurse -Verbose | Where-Object { $_.Name -eq $executableFileName } | Select-Object -First 1 From 21652f952672aec8d2f56528bf42c307c579b9a2 Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Thu, 28 May 2026 15:57:00 -0700 Subject: [PATCH 2/7] Add retry to circumvent API rate limit --- .ci/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/test.yml b/.ci/test.yml index ce296e7e4..8fbe0fa61 100644 --- a/.ci/test.yml +++ b/.ci/test.yml @@ -131,7 +131,7 @@ jobs: } # Get releases - $releases = Invoke-RestMethod -Uri $api -Headers $headers + $releases = Invoke-RestMethod -Uri $api -Headers $headers -RetryIntervalSec 10 -MaximumRetryCount 3 # Pick latest by publish date (handles prerelease vs stable automatically) $latest = $releases | From 364ba103916af0f356db840d89939da7ad352926 Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Thu, 28 May 2026 15:59:08 -0700 Subject: [PATCH 3/7] Fix package name filter --- .ci/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.ci/test.yml b/.ci/test.yml index 8fbe0fa61..c673b2a18 100644 --- a/.ci/test.yml +++ b/.ci/test.yml @@ -141,13 +141,13 @@ jobs: Write-Host "Latest version: $($latest.tag_name) (prerelease=$($latest.prerelease))" if ($IsWindows) { - $assetFilter = "windows-msvc" # adjust as needed + $assetFilter = "x86_64-pc-windows-msvc" } elseif ($IsMacOs) { - $assetFilter = "apple-darwin" # adjust as needed + $assetFilter = "x86_64-apple-darwin" } else { - $assetFilter = "linux" # adjust as needed + $assetFilter = "x86_64-linux" } $assets = $latest.assets | From e87cb26a716f22ebfe7cec251b631e25301b9d27 Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Thu, 28 May 2026 16:10:26 -0700 Subject: [PATCH 4/7] Increase retry timeout --- .ci/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/test.yml b/.ci/test.yml index c673b2a18..4e204af6a 100644 --- a/.ci/test.yml +++ b/.ci/test.yml @@ -131,7 +131,7 @@ jobs: } # Get releases - $releases = Invoke-RestMethod -Uri $api -Headers $headers -RetryIntervalSec 10 -MaximumRetryCount 3 + $releases = Invoke-RestMethod -Uri $api -Headers $headers -RetryIntervalSec 30 -MaximumRetryCount 10 # Pick latest by publish date (handles prerelease vs stable automatically) $latest = $releases | From 9847d65d3a9832fa5afef54c609c8f12fd8b8a0c Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Thu, 28 May 2026 16:43:20 -0700 Subject: [PATCH 5/7] Add GITHUB_TOKEN --- .ci/ci.yml | 1 + .ci/test.yml | 31 +++++-------------------------- 2 files changed, 6 insertions(+), 26 deletions(-) diff --git a/.ci/ci.yml b/.ci/ci.yml index 7add12474..9c75987a0 100644 --- a/.ci/ci.yml +++ b/.ci/ci.yml @@ -19,6 +19,7 @@ resources: variables: - group: GithubTestingFeedCreds + - group: InstallDSC stages: - stage: Build diff --git a/.ci/test.yml b/.ci/test.yml index 4e204af6a..3f50370ce 100644 --- a/.ci/test.yml +++ b/.ci/test.yml @@ -11,6 +11,8 @@ jobs: pool: vmImage: ${{ parameters.imageName }} displayName: ${{ parameters.displayName }} + variables: + - GITHUB_TOKEN: $(GITHUB_TOKEN) steps: - ${{ parameters.powershellExecutable }}: | Install-Module -Name 'Microsoft.PowerShell.SecretManagement' -force -SkipPublisherCheck -AllowClobber @@ -96,38 +98,13 @@ jobs: condition: eq(${{ parameters.useAzAuth }}, false) - pwsh: | - # $version = '${{ parameters.DSCVersion }}' - # $packageName = "DSC-$version" - # $ext = 'tar.gz' - # $executableName = 'dsc' - # $executableExt = if ($IsWindows) { '.exe' } else { '' } - - # $uri = if ($IsWindows) { - # $ext = 'zip' - # "https://github.com/PowerShell/DSC/releases/download/v$version/DSC-$version-x86_64-pc-windows-msvc.zip" - # } elseif ($IsLinux) { - # "https://github.com/PowerShell/DSC/releases/download/v$version/DSC-$version-x86_64-linux.tar.gz" - # } - # elseif ($IsMacOS) { - # "https://github.com/PowerShell/DSC/releases/download/v$version/DSC-$version-x86_64-apple-darwin.tar.gz" - - # } - # else { - # throw "Unsupported OS platform" - # } - - # $destPath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath "$packageName.$ext" - - # Write-Verbose -Verbose "Downloading DSC v3 from $uri to $destPath" - - # Invoke-WebRequest -Uri $uri -OutFile $destPath - $repo = "PowerShell/DSC" $api = "https://api.github.com/repos/$repo/releases" $headers = @{ "User-Agent" = "pwsh" "Accept" = "application/vnd.github+json" + "Authorization" = "Bearer $env:GITHUB_TOKEN" } # Get releases @@ -194,6 +171,8 @@ jobs: Write-Host "##$vstsCommandString" displayName: 'Install latest DSC v3' + env: + GITHUB_TOKEN: $(GITHUB_TOKEN) - pwsh: | Get-ChildItem -Path env: | Out-String -width 9999 -Stream | Write-Verbose -Verbose From 853cd5164ecd6f015786ed0f9bb9a7e9bc7f56da Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Thu, 28 May 2026 16:47:12 -0700 Subject: [PATCH 6/7] fix yaml --- .ci/test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.ci/test.yml b/.ci/test.yml index 3f50370ce..8bf6f0f84 100644 --- a/.ci/test.yml +++ b/.ci/test.yml @@ -12,7 +12,8 @@ jobs: vmImage: ${{ parameters.imageName }} displayName: ${{ parameters.displayName }} variables: - - GITHUB_TOKEN: $(GITHUB_TOKEN) + - name: GITHUB_TOKEN + value: $(GITHUB_TOKEN) steps: - ${{ parameters.powershellExecutable }}: | Install-Module -Name 'Microsoft.PowerShell.SecretManagement' -force -SkipPublisherCheck -AllowClobber From 74ed5528ad2fd06636c467d69b81ec6ad862405e Mon Sep 17 00:00:00 2001 From: Aditya Patwardhan Date: Fri, 29 May 2026 11:23:30 -0700 Subject: [PATCH 7/7] Add variable group to job --- .ci/test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.ci/test.yml b/.ci/test.yml index 8bf6f0f84..39f3c7ed8 100644 --- a/.ci/test.yml +++ b/.ci/test.yml @@ -12,8 +12,7 @@ jobs: vmImage: ${{ parameters.imageName }} displayName: ${{ parameters.displayName }} variables: - - name: GITHUB_TOKEN - value: $(GITHUB_TOKEN) + - group: InstallDSC steps: - ${{ parameters.powershellExecutable }}: | Install-Module -Name 'Microsoft.PowerShell.SecretManagement' -force -SkipPublisherCheck -AllowClobber