|
1 | 1 | name: Install PowerShell |
2 | | -description: | |
3 | | - Install a specific version of PowerShell Core on any GitHub runner (Linux, macOS, Windows). |
4 | | - Handles install, downgrade, or forced reinstall. |
| 2 | +description: Install a specific version of PowerShell Core on any GitHub runner (Linux, macOS, Windows). Handles install, downgrade, or forced reinstall. |
5 | 3 | author: PSModule |
6 | 4 | branding: |
7 | 5 | icon: terminal |
|
66 | 64 | shell: bash |
67 | 65 | run: | |
68 | 66 | set -e |
| 67 | +
|
69 | 68 | echo "Detecting existing PowerShell on macOS…" |
70 | 69 | DETECTED_VERSION=$(pwsh -NoLogo -NoProfile -Command '$PSVersionTable.PSVersion.ToString()' 2>/dev/null || true) |
71 | 70 | echo "Detected version: ${DETECTED_VERSION:-<none>}" |
@@ -105,29 +104,42 @@ runs: |
105 | 104 | shell: powershell |
106 | 105 | run: | |
107 | 106 | Write-Host "Detecting existing PowerShell on Windows…" |
108 | | - try { $detected = (pwsh -NoLogo -NoProfile -Command "$PSVersionTable.PSVersion.ToString()") } catch { $detected = $null } |
109 | | - Write-Host "Detected version: $($detected ?? '<none>')" |
| 107 | + try { |
| 108 | + $detected = (pwsh -NoLogo -NoProfile -Command "$PSVersionTable.PSVersion.ToString()") |
| 109 | + } catch { |
| 110 | + $detected = $null |
| 111 | + } |
| 112 | +
|
| 113 | + if ($null -eq $detected -or $detected -eq '') { |
| 114 | + $detectedDisplay = '<none>' |
| 115 | + } else { |
| 116 | + $detectedDisplay = $detected |
| 117 | + } |
| 118 | + Write-Host "Detected version: $detectedDisplay" |
110 | 119 | Write-Host "Requested version: $env:REQUESTED_VERSION" |
111 | 120 | Write-Host "Reinstall flag: $env:REINSTALL" |
112 | 121 |
|
113 | 122 | if (-not $detected) { |
114 | 123 | $decision = 'install' |
115 | 124 | } elseif ($detected -eq $env:REQUESTED_VERSION) { |
116 | | - $decision = ($env:REINSTALL -eq 'true') ? 'reinstall' : 'skip' |
| 125 | + if ($env:REINSTALL -eq 'true') { |
| 126 | + $decision = 'reinstall' |
| 127 | + } else { |
| 128 | + $decision = 'skip' |
| 129 | + } |
117 | 130 | } else { |
118 | 131 | $decision = 'uninstall-install' |
119 | 132 | } |
120 | 133 | Write-Host "Decision: $decision" |
121 | 134 |
|
122 | 135 | if ($decision -eq 'skip') { |
123 | 136 | Write-Host 'Skipping installation on Windows (exact version present).' |
124 | | - } |
125 | | - else { |
| 137 | + } else { |
126 | 138 | Write-Host 'Uninstalling any existing PowerShell…' |
127 | 139 | winget uninstall --id Microsoft.PowerShell -e --silent | Out-Null |
128 | 140 | Write-Host "Installing PowerShell $env:REQUESTED_VERSION…" |
129 | 141 | $msi = "PowerShell-$($env:REQUESTED_VERSION)-win-x64.msi" |
130 | 142 | $url = "https://github.com/PowerShell/PowerShell/releases/download/v$($env:REQUESTED_VERSION)/$msi" |
131 | 143 | Invoke-WebRequest $url -OutFile $msi |
132 | | - Start-Process msiexec.exe -ArgumentList "/i", $msi, "/quiet", "/norestart" -Wait |
| 144 | + Start-Process msiexec.exe -ArgumentList '/i', $msi, '/quiet', '/norestart' -Wait |
133 | 145 | } |
0 commit comments