Action-Test - [🚀 [Feature]: Support installing prerelease PowerShell versions #16] by @MariusStorhaug #400
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Action-Test | |
| run-name: "Action-Test - [${{ github.event.pull_request.title }} #${{ github.event.pull_request.number }}] by @${{ github.actor }}" | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| schedule: | |
| - cron: '0 0 * * *' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| pull-requests: read | |
| jobs: | |
| ActionTestBasic: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macOS-latest] | |
| version: ['latest', 'prerelease', '7.4.7', '7.5.0', '7.4.0-preview.5'] | |
| runs-on: ${{ matrix.os }} | |
| name: '${{ matrix.os }} - [${{ matrix.version }}]' | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| persist-credentials: false | |
| - name: Action-Test | |
| uses: ./ | |
| with: | |
| Version: ${{ matrix.version == 'prerelease' && 'latest' || matrix.version }} | |
| Prerelease: ${{ matrix.version == 'prerelease' && 'true' || 'false' }} | |
| - name: Verify installed version | |
| shell: pwsh | |
| env: | |
| GITHUB_TOKEN: ${{ github.token }} | |
| run: | | |
| # Requested version that came from the matrix | |
| $requested = '${{ matrix.version }}' | |
| # When 'prerelease' → resolve to latest prerelease | |
| if ($requested.Trim().ToLower() -eq 'prerelease') { | |
| $releases = Invoke-RestMethod -Uri 'https://api.github.com/repos/PowerShell/PowerShell/releases' ` | |
| -Headers @{ | |
| 'Accept' = 'application/vnd.github+json' | |
| 'Authorization' = "Bearer $($env:GITHUB_TOKEN)" | |
| 'X-GitHub-Api-Version' = '2022-11-28' | |
| } | |
| $latestPrerelease = $releases | Where-Object { $_.prerelease -eq $true } | Select-Object -First 1 | |
| if (-not $latestPrerelease) { | |
| throw "No prerelease releases found for PowerShell/PowerShell." | |
| } | |
| $requested = $latestPrerelease.tag_name.TrimStart('v') | |
| Write-Host "Resolved 'prerelease' → $requested" | |
| } | |
| # When empty / 'null' / 'latest' → resolve to latest stable release | |
| elseif ([string]::IsNullOrWhiteSpace($requested) -or | |
| $requested.Trim().ToLower() -in @('latest','null')) { | |
| $requested = ( | |
| Invoke-RestMethod -Uri 'https://api.github.com/repos/PowerShell/PowerShell/releases/latest' ` | |
| -Headers @{ | |
| 'Accept' = 'application/vnd.github+json' | |
| 'Authorization' = "Bearer $($env:GITHUB_TOKEN)" | |
| 'X-GitHub-Api-Version' = '2022-11-28' | |
| } | |
| ).tag_name.TrimStart('v') | |
| Write-Host "Resolved 'latest' → $requested" | |
| } | |
| # On Windows, always verify by launching pwsh from the known install directory. | |
| # This avoids relying on PATH resolution, which may still point to the pre-installed | |
| # version if the runner's environment hasn't refreshed after the MSI install. | |
| if ($IsWindows) { | |
| $isPrerelease = $requested -match '-' | |
| $majorVersion = ($requested -split '[\.-]')[0] | |
| $installDir = if ($isPrerelease) { "$majorVersion-preview" } else { $majorVersion } | |
| $pwshPath = "$env:ProgramFiles\PowerShell\$installDir\pwsh.exe" | |
| Write-Host "Windows: verifying via subprocess at $pwshPath" | |
| if (Test-Path $pwshPath) { | |
| $installed = (& $pwshPath -NoLogo -NoProfile -Command '$PSVersionTable.PSVersion.ToString()') | |
| } else { | |
| Write-Host "Warning: Expected pwsh not found at $pwshPath, falling back to `$PSVersionTable" | |
| $installed = ($PSVersionTable.PSVersion).ToString() | |
| } | |
| } else { | |
| $installed = ($PSVersionTable.PSVersion).ToString() | |
| } | |
| Write-Host "Installed PowerShell version: $installed" | |
| Write-Host "Expected PowerShell version: $requested" | |
| if ($installed -ne $requested) { | |
| throw "Failed: expected $requested but got $installed" | |
| } |