Skip to content

Commit eb32a65

Browse files
Add Prerelease input for latest prerelease resolution
- Add 'Prerelease' boolean input (default: false), similar to Install-PSResource's -Prerelease switch - When Prerelease is true and Version is 'latest', resolve to the latest prerelease from the PowerShell/PowerShell GitHub releases API - Explicit prerelease version strings (e.g. 7.6.0-preview.6) continue to work directly without the Prerelease flag - Add prerelease resolution to all 3 platform steps (Linux bash, macOS bash, Windows PowerShell 5.1) - Update test workflow with 'prerelease' matrix entry - Update README with Prerelease input docs and latest prerelease example
1 parent 4a23a7e commit eb32a65

File tree

3 files changed

+95
-32
lines changed

3 files changed

+95
-32
lines changed

.github/workflows/Action-Test.yml

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
fail-fast: false
2323
matrix:
2424
os: [ubuntu-latest, windows-latest, macOS-latest]
25-
version: ['latest', '7.4.7', '7.5.0', '7.6.0-preview.6']
25+
version: ['latest', 'prerelease', '7.4.7', '7.5.0', '7.6.0-preview.6']
2626
runs-on: ${{ matrix.os }}
2727
name: '${{ matrix.os }} - [${{ matrix.version }}]'
2828
steps:
@@ -34,7 +34,8 @@ jobs:
3434
- name: Action-Test
3535
uses: ./
3636
with:
37-
Version: ${{ matrix.version }}
37+
Version: ${{ matrix.version == 'prerelease' && 'latest' || matrix.version }}
38+
Prerelease: ${{ matrix.version == 'prerelease' && 'true' || 'false' }}
3839

3940
- name: Verify installed version
4041
shell: pwsh
@@ -44,8 +45,19 @@ jobs:
4445
# Requested version that came from the matrix
4546
$requested = '${{ matrix.version }}'
4647
48+
# When 'prerelease' → resolve to latest prerelease
49+
if ($requested.Trim().ToLower() -eq 'prerelease') {
50+
$releases = Invoke-RestMethod -Uri 'https://api.github.com/repos/PowerShell/PowerShell/releases' `
51+
-Headers @{
52+
'Accept' = 'application/vnd.github+json'
53+
'Authorization' = "Bearer $($env:GITHUB_TOKEN)"
54+
'X-GitHub-Api-Version' = '2022-11-28'
55+
}
56+
$requested = ($releases | Where-Object { $_.prerelease -eq $true } | Select-Object -First 1).tag_name.TrimStart('v')
57+
Write-Host "Resolved 'prerelease' → $requested"
58+
}
4759
# When empty / 'null' / 'latest' → resolve to latest stable release
48-
if ([string]::IsNullOrWhiteSpace($requested) -or
60+
elseif ([string]::IsNullOrWhiteSpace($requested) -or
4961
$requested.Trim().ToLower() -in @('latest','null')) {
5062
5163
$requested = (

README.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,21 @@ jobs:
3535
Version: 7.6.0-preview.6
3636
```
3737
38+
### Installing the latest prerelease
39+
40+
```yaml
41+
- name: Install latest PowerShell Preview
42+
uses: PSModule/install-powershell@v1
43+
with:
44+
Prerelease: true
45+
```
46+
3847
## Inputs
3948
4049
| Input | Required | Default | Description |
4150
| ----- | -------- | ------- | ----------- |
42-
| `Version` | `false` | `latest` | Desired PowerShell Core version (e.g. `7.4.1`, `7.6.0-preview.6`). Use `latest` to install the newest stable release. Prerelease versions are supported. |
51+
| `Version` | `false` | `latest` | Desired PowerShell Core version (e.g. `7.4.1`, `7.6.0-preview.6`). Use `latest` to install the newest stable release (or newest prerelease when `Prerelease` is `true`). |
52+
| `Prerelease` | `false` | `false` | Install a prerelease version. When `true` and `Version` is `latest`, resolves to the latest prerelease. Similar to `-Prerelease` on `Install-PSResource`. |
4353

4454
## Secrets
4555

@@ -53,8 +63,8 @@ This action does **not** generate any outputs.
5363

5464
* **Version resolution**
5565
If `Version` is set to `latest` (case‑insensitive), the action queries the GitHub API for the newest stable release tag in the
56-
`PowerShell/PowerShell` repository and substitutes that version. Prerelease version strings (e.g. `7.6.0-preview.6`) are passed
57-
through directly.
66+
`PowerShell/PowerShell` repository and substitutes that version. When `Prerelease` is `true`, it queries for the latest prerelease
67+
instead. Explicit prerelease version strings (e.g. `7.6.0-preview.6`) are passed through directly.
5868

5969
* **Skip logic**
6070
Before installing, the action checks the current runner to see whether the requested version is already available

action.yml

Lines changed: 67 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ inputs:
1616
Prerelease versions are supported (e.g. `7.6.0-preview.6`, `7.5.0-rc.1`).
1717
required: false
1818
default: 'latest'
19+
Prerelease:
20+
description: |
21+
Install a prerelease version of PowerShell.
22+
When `true` and `Version` is `latest`, installs the latest prerelease.
23+
Similar to the `-Prerelease` switch on `Install-PSResource`.
24+
required: false
25+
default: 'false'
1926

2027
runs:
2128
using: composite
@@ -26,24 +33,38 @@ runs:
2633
working-directory: ${{ github.action_path }}
2734
env:
2835
REQUESTED_VERSION: ${{ inputs.Version }}
36+
PRERELEASE: ${{ inputs.Prerelease }}
2937
GITHUB_TOKEN: ${{ github.token }}
3038
run: |
3139
# Install-PowerShell
3240
set -e
3341
echo "Requested version: [$REQUESTED_VERSION]"
42+
echo "Prerelease: [$PRERELEASE]"
3443
3544
# Only resolve to latest version if explicitly set to 'latest' (case-insensitive)
3645
case "${REQUESTED_VERSION:-}" in
3746
[Ll][Aa][Tt][Ee][Ss][Tt])
38-
REQUESTED_VERSION=$(
39-
curl -s -f \
40-
-H "Accept: application/vnd.github+json" \
41-
-H "Authorization: Bearer $GITHUB_TOKEN" \
42-
-H "X-GitHub-Api-Version: 2022-11-28" \
43-
https://api.github.com/repos/PowerShell/PowerShell/releases/latest |
44-
jq -r '.tag_name' | sed 's/^v//'
45-
)
46-
echo "Latest stable PowerShell release detected: $REQUESTED_VERSION"
47+
if [[ "$PRERELEASE" == "true" ]]; then
48+
REQUESTED_VERSION=$(
49+
curl -s -f \
50+
-H "Accept: application/vnd.github+json" \
51+
-H "Authorization: Bearer $GITHUB_TOKEN" \
52+
-H "X-GitHub-Api-Version: 2022-11-28" \
53+
https://api.github.com/repos/PowerShell/PowerShell/releases |
54+
jq -r '[.[] | select(.prerelease == true)] | .[0].tag_name' | sed 's/^v//'
55+
)
56+
echo "Latest prerelease PowerShell version detected: $REQUESTED_VERSION"
57+
else
58+
REQUESTED_VERSION=$(
59+
curl -s -f \
60+
-H "Accept: application/vnd.github+json" \
61+
-H "Authorization: Bearer $GITHUB_TOKEN" \
62+
-H "X-GitHub-Api-Version: 2022-11-28" \
63+
https://api.github.com/repos/PowerShell/PowerShell/releases/latest |
64+
jq -r '.tag_name' | sed 's/^v//'
65+
)
66+
echo "Latest stable PowerShell release detected: $REQUESTED_VERSION"
67+
fi
4768
;;
4869
"")
4970
echo "Error: Version input is required (or use 'latest')"
@@ -100,24 +121,38 @@ runs:
100121
working-directory: ${{ github.action_path }}
101122
env:
102123
REQUESTED_VERSION: ${{ inputs.Version }}
124+
PRERELEASE: ${{ inputs.Prerelease }}
103125
GITHUB_TOKEN: ${{ github.token }}
104126
run: |
105127
# Install-PowerShell
106128
set -e
107129
echo "Requested version: [$REQUESTED_VERSION]"
130+
echo "Prerelease: [$PRERELEASE]"
108131
109132
# Only resolve to latest version if explicitly set to 'latest' (case-insensitive)
110133
case "${REQUESTED_VERSION:-}" in
111134
[Ll][Aa][Tt][Ee][Ss][Tt])
112-
REQUESTED_VERSION=$(
113-
curl -s -f \
114-
-H "Accept: application/vnd.github+json" \
115-
-H "Authorization: Bearer $GITHUB_TOKEN" \
116-
-H "X-GitHub-Api-Version: 2022-11-28" \
117-
https://api.github.com/repos/PowerShell/PowerShell/releases/latest |
118-
jq -r '.tag_name' | sed 's/^v//'
119-
)
120-
echo "Latest stable PowerShell release detected: $REQUESTED_VERSION"
135+
if [[ "$PRERELEASE" == "true" ]]; then
136+
REQUESTED_VERSION=$(
137+
curl -s -f \
138+
-H "Accept: application/vnd.github+json" \
139+
-H "Authorization: Bearer $GITHUB_TOKEN" \
140+
-H "X-GitHub-Api-Version: 2022-11-28" \
141+
https://api.github.com/repos/PowerShell/PowerShell/releases |
142+
jq -r '[.[] | select(.prerelease == true)] | .[0].tag_name' | sed 's/^v//'
143+
)
144+
echo "Latest prerelease PowerShell version detected: $REQUESTED_VERSION"
145+
else
146+
REQUESTED_VERSION=$(
147+
curl -s -f \
148+
-H "Accept: application/vnd.github+json" \
149+
-H "Authorization: Bearer $GITHUB_TOKEN" \
150+
-H "X-GitHub-Api-Version: 2022-11-28" \
151+
https://api.github.com/repos/PowerShell/PowerShell/releases/latest |
152+
jq -r '.tag_name' | sed 's/^v//'
153+
)
154+
echo "Latest stable PowerShell release detected: $REQUESTED_VERSION"
155+
fi
121156
;;
122157
"")
123158
echo "Error: Version input is required (or use 'latest')"
@@ -161,23 +196,29 @@ runs:
161196
working-directory: ${{ github.action_path }}
162197
env:
163198
REQUESTED_VERSION: ${{ inputs.Version }}
199+
PRERELEASE: ${{ inputs.Prerelease }}
164200
GITHUB_TOKEN: ${{ github.token }}
165201
run: |
166202
# Install-PowerShell
167203
Write-Host "Requested version: [$env:REQUESTED_VERSION]"
204+
Write-Host "Prerelease: [$env:PRERELEASE]"
168205
169206
# Resolve 'latest' → concrete version
170207
$req = $env:REQUESTED_VERSION
171208
if ($req -and $req.Trim().ToLower() -eq 'latest') {
172-
$latest = (
173-
Invoke-RestMethod -Uri 'https://api.github.com/repos/PowerShell/PowerShell/releases/latest' `
174-
-Headers @{
175-
'Accept' = 'application/vnd.github+json'
176-
'Authorization' = "Bearer $($env:GITHUB_TOKEN)"
209+
$headers = @{
210+
'Accept' = 'application/vnd.github+json'
211+
'Authorization' = "Bearer $($env:GITHUB_TOKEN)"
177212
'X-GitHub-Api-Version' = '2022-11-28'
178-
}
179-
).tag_name.TrimStart('v')
180-
Write-Host "Latest stable PowerShell release detected: $latest"
213+
}
214+
if ($env:PRERELEASE -eq 'true') {
215+
$releases = Invoke-RestMethod -Uri 'https://api.github.com/repos/PowerShell/PowerShell/releases' -Headers $headers
216+
$latest = ($releases | Where-Object { $_.prerelease -eq $true } | Select-Object -First 1).tag_name.TrimStart('v')
217+
Write-Host "Latest prerelease PowerShell version detected: $latest"
218+
} else {
219+
$latest = (Invoke-RestMethod -Uri 'https://api.github.com/repos/PowerShell/PowerShell/releases/latest' -Headers $headers).tag_name.TrimStart('v')
220+
Write-Host "Latest stable PowerShell release detected: $latest"
221+
}
181222
$env:REQUESTED_VERSION = $latest
182223
} elseif ([string]::IsNullOrWhiteSpace($req)) {
183224
Write-Host "Error: Version input is required (or use 'latest')"

0 commit comments

Comments
 (0)