Skip to content

Commit 6ecc668

Browse files
Discover and install DSC dynamically for CI tests (#2007)
1 parent 1c84d34 commit 6ecc668

2 files changed

Lines changed: 48 additions & 29 deletions

File tree

.ci/ci.yml

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,6 @@ pr:
1010
include:
1111
- master
1212

13-
parameters:
14-
- name: DSCVersion
15-
default: '3.2.0-rc.1'
16-
type: string
17-
1813
resources:
1914
repositories:
2015
- repository: ComplianceRepo
@@ -24,6 +19,7 @@ resources:
2419

2520
variables:
2621
- group: GithubTestingFeedCreds
22+
- group: InstallDSC
2723

2824
stages:
2925
- stage: Build
@@ -127,34 +123,29 @@ stages:
127123
jobName: TestPkgWin
128124
displayName: PowerShell Core on Windows
129125
imageName: windows-latest
130-
DSCVersion: ${{ parameters.DSCVersion }}
131126

132127
- template: test.yml
133128
parameters:
134129
jobName: TestPkgWinPS
135130
displayName: Windows PowerShell on Windows
136131
imageName: windows-latest
137132
powershellExecutable: powershell
138-
DSCVersion: ${{ parameters.DSCVersion }}
139133

140134
- template: test.yml
141135
parameters:
142136
jobName: TestPkgUbuntu
143137
displayName: PowerShell Core on Ubuntu
144138
imageName: ubuntu-latest
145-
DSCVersion: ${{ parameters.DSCVersion }}
146139

147140
- template: test.yml
148141
parameters:
149142
jobName: TestPkgWinMacOS
150143
displayName: PowerShell Core on macOS
151144
imageName: macOS-latest
152-
DSCVersion: ${{ parameters.DSCVersion }}
153145

154146
- template: test.yml
155147
parameters:
156148
jobName: TestPkgWinAzAuth
157149
displayName: AzAuth PowerShell Core on Windows
158150
imageName: windows-latest
159151
useAzAuth: true
160-
DSCVersion: ${{ parameters.DSCVersion }}

.ci/test.yml

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@ parameters:
55
powershellExecutable: pwsh
66
buildDirectory: '.'
77
useAzAuth: false
8-
DSCVersion: '3.2.0-rc.1'
98

109
jobs:
1110
- job: ${{ parameters.jobName }}
1211
pool:
1312
vmImage: ${{ parameters.imageName }}
1413
displayName: ${{ parameters.displayName }}
14+
variables:
15+
- group: InstallDSC
1516
steps:
1617
- ${{ parameters.powershellExecutable }}: |
1718
Install-Module -Name 'Microsoft.PowerShell.SecretManagement' -force -SkipPublisherCheck -AllowClobber
@@ -97,39 +98,64 @@ jobs:
9798
condition: eq(${{ parameters.useAzAuth }}, false)
9899

99100
- pwsh: |
100-
$version = '${{ parameters.DSCVersion }}'
101-
$packageName = "DSC-$version"
102-
$ext = 'tar.gz'
103-
$executableName = 'dsc'
104-
$executableExt = if ($IsWindows) { '.exe' } else { '' }
101+
$repo = "PowerShell/DSC"
102+
$api = "https://api.github.com/repos/$repo/releases"
105103
106-
$uri = if ($IsWindows) {
107-
$ext = 'zip'
108-
"https://github.com/PowerShell/DSC/releases/download/v$version/DSC-$version-x86_64-pc-windows-msvc.zip"
109-
} elseif ($IsLinux) {
110-
"https://github.com/PowerShell/DSC/releases/download/v$version/DSC-$version-x86_64-linux.tar.gz"
104+
$headers = @{
105+
"User-Agent" = "pwsh"
106+
"Accept" = "application/vnd.github+json"
107+
"Authorization" = "Bearer $env:GITHUB_TOKEN"
111108
}
112-
elseif ($IsMacOS) {
113-
"https://github.com/PowerShell/DSC/releases/download/v$version/DSC-$version-x86_64-apple-darwin.tar.gz"
114109
110+
# Get releases
111+
$releases = Invoke-RestMethod -Uri $api -Headers $headers -RetryIntervalSec 30 -MaximumRetryCount 10
112+
113+
# Pick latest by publish date (handles prerelease vs stable automatically)
114+
$latest = $releases |
115+
Sort-Object published_at -Descending |
116+
Select-Object -First 1
117+
118+
Write-Host "Latest version: $($latest.tag_name) (prerelease=$($latest.prerelease))"
119+
120+
if ($IsWindows) {
121+
$assetFilter = "x86_64-pc-windows-msvc"
122+
}
123+
elseif ($IsMacOs) {
124+
$assetFilter = "x86_64-apple-darwin"
115125
}
116126
else {
117-
throw "Unsupported OS platform"
127+
$assetFilter = "x86_64-linux"
118128
}
119129
120-
$destPath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath "$packageName.$ext"
130+
$assets = $latest.assets |
131+
Where-Object { $_.name -match $assetFilter }
132+
133+
Write-Host "Filtered assets: $($assets.Count)"
121134
122-
Write-Verbose -Verbose "Downloading DSC v3 from $uri to $destPath"
135+
$selectedAsset = $assets | Select-Object -First 1
136+
137+
Write-Host "Selected asset: $($selectedAsset.name)"
138+
139+
$outFile = Join-Path $PWD $selectedAsset.name
140+
141+
Write-Host "Downloading $($selectedAsset.name)"
142+
143+
Invoke-WebRequest `
144+
-Uri $selectedAsset.browser_download_url `
145+
-Headers @{ "User-Agent"="pwsh" } `
146+
-OutFile $outFile
123147
124-
Invoke-WebRequest -Uri $uri -OutFile $destPath
125148
126149
if ($IsWindows) {
127-
Expand-Archive -Path $destPath -DestinationPath $env:AGENT_TEMPDIRECTORY -Force -Verbose
150+
Expand-Archive -Path $outFile -DestinationPath $env:AGENT_TEMPDIRECTORY -Force -Verbose
128151
}
129152
else {
130-
tar -xzf $destPath -C $env:AGENT_TEMPDIRECTORY
153+
tar -xzf $outFile -C $env:AGENT_TEMPDIRECTORY
131154
}
132155
156+
$executableName = 'dsc'
157+
$executableExt = if ($IsWindows) { '.exe' } else { '' }
158+
133159
$executableFileName = $executableName + $executableExt
134160
135161
$executable = Get-ChildItem -Path $env:AGENT_TEMPDIRECTORY -File -Recurse -Verbose | Where-Object { $_.Name -eq $executableFileName } | Select-Object -First 1
@@ -145,6 +171,8 @@ jobs:
145171
Write-Host "##$vstsCommandString"
146172
147173
displayName: 'Install latest DSC v3'
174+
env:
175+
GITHUB_TOKEN: $(GITHUB_TOKEN)
148176
149177
- pwsh: |
150178
Get-ChildItem -Path env: | Out-String -width 9999 -Stream | Write-Verbose -Verbose

0 commit comments

Comments
 (0)