diff --git a/.ci/ci.yml b/.ci/ci.yml index c80297d55..9c75987a0 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 @@ -24,6 +19,7 @@ resources: variables: - group: GithubTestingFeedCreds + - group: InstallDSC stages: - stage: Build @@ -127,7 +123,6 @@ stages: jobName: TestPkgWin displayName: PowerShell Core on Windows imageName: windows-latest - DSCVersion: ${{ parameters.DSCVersion }} - template: test.yml parameters: @@ -135,21 +130,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 +149,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..39f3c7ed8 100644 --- a/.ci/test.yml +++ b/.ci/test.yml @@ -5,13 +5,14 @@ parameters: powershellExecutable: pwsh buildDirectory: '.' useAzAuth: false - DSCVersion: '3.2.0-rc.1' jobs: - job: ${{ parameters.jobName }} pool: vmImage: ${{ parameters.imageName }} displayName: ${{ parameters.displayName }} + variables: + - group: InstallDSC steps: - ${{ parameters.powershellExecutable }}: | Install-Module -Name 'Microsoft.PowerShell.SecretManagement' -force -SkipPublisherCheck -AllowClobber @@ -97,39 +98,64 @@ jobs: condition: eq(${{ parameters.useAzAuth }}, false) - pwsh: | - $version = '${{ parameters.DSCVersion }}' - $packageName = "DSC-$version" - $ext = 'tar.gz' - $executableName = 'dsc' - $executableExt = if ($IsWindows) { '.exe' } else { '' } + $repo = "PowerShell/DSC" + $api = "https://api.github.com/repos/$repo/releases" - $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" + $headers = @{ + "User-Agent" = "pwsh" + "Accept" = "application/vnd.github+json" + "Authorization" = "Bearer $env:GITHUB_TOKEN" } - 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 -RetryIntervalSec 30 -MaximumRetryCount 10 + + # 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 = "x86_64-pc-windows-msvc" + } + elseif ($IsMacOs) { + $assetFilter = "x86_64-apple-darwin" } else { - throw "Unsupported OS platform" + $assetFilter = "x86_64-linux" } - $destPath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath "$packageName.$ext" + $assets = $latest.assets | + Where-Object { $_.name -match $assetFilter } + + Write-Host "Filtered assets: $($assets.Count)" - Write-Verbose -Verbose "Downloading DSC v3 from $uri to $destPath" + $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 @@ -145,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