From fb01ee7bb971ec4b6ecb0d4dcdcec12c74d59e5a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 7 Nov 2025 14:23:28 +0000 Subject: [PATCH 1/5] Initial plan From a513d08ab89fd593ae28d9a0d09865302f8b221c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 7 Nov 2025 14:35:44 +0000 Subject: [PATCH 2/5] Add pre-release/RC version filtering to update.ps1 Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com> --- scripts/update.ps1 | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/scripts/update.ps1 b/scripts/update.ps1 index 768744a..3c0637b 100644 --- a/scripts/update.ps1 +++ b/scripts/update.ps1 @@ -32,7 +32,11 @@ Param( # -whatif switch to not actually make changes # Path to the vendor configuration source file - [string]$sourcesPath = "$PSScriptRoot\..\vendor\sources.json" + [string]$sourcesPath = "$PSScriptRoot\..\vendor\sources.json", + + # Include pre-release versions (RC, beta, alpha, etc.) + # By default, only stable releases are considered + [switch]$IncludePrerelease = $false ) # Get the root directory of the cmder project. @@ -83,7 +87,10 @@ function Match-Filenames { function Fetch-DownloadUrl { param ( [Parameter(Mandatory = $true)] - $urlStr + $urlStr, + + [Parameter(Mandatory = $false)] + [bool]$includePrerelease = $false ) $url = [uri] $urlStr @@ -127,6 +134,31 @@ function Fetch-DownloadUrl { } :loop foreach ($i in $info) { + # Skip pre-release versions unless explicitly included + # Pre-releases include RC (Release Candidate), beta, alpha, and other test versions + if (-not $includePrerelease) { + # Check if marked as pre-release by GitHub + if ($i.prerelease -eq $true) { + Write-Verbose "Skipping pre-release version: $($i.tag_name)" + continue + } + + # Check for common pre-release keywords in tag name + # This catches versions like v2.50.0-rc, v1.0.0-beta, v1.0.0-alpha, etc. + $prereleaseKeywords = @('-rc', '-beta', '-alpha', '-preview', '-pre') + $isPrerelease = $false + foreach ($keyword in $prereleaseKeywords) { + if ($i.tag_name -ilike "*$keyword*") { + Write-Verbose "Skipping version with pre-release keyword '$keyword': $($i.tag_name)" + $isPrerelease = $true + break + } + } + if ($isPrerelease) { + continue + } + } + if (-not ($i.assets -is [array])) { continue } @@ -215,7 +247,7 @@ foreach ($s in $sources) { Write-Verbose "Old Link: $($s.url)" - $downloadUrl = Fetch-DownloadUrl $s.url + $downloadUrl = Fetch-DownloadUrl $s.url -includePrerelease $IncludePrerelease if (($null -eq $downloadUrl) -or ($downloadUrl -eq '')) { Write-Verbose "No new links were found" From d01ab39181c6995296c0852930c1b3af4c0244f8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 7 Nov 2025 14:36:57 +0000 Subject: [PATCH 3/5] Fix pre-release filtering for archive downloads Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com> --- scripts/update.ps1 | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/scripts/update.ps1 b/scripts/update.ps1 index 3c0637b..84e38aa 100644 --- a/scripts/update.ps1 +++ b/scripts/update.ps1 @@ -196,12 +196,39 @@ function Fetch-DownloadUrl { # Special case for archive downloads of repository if (($null -eq $downloadLinks) -or (-not $downloadLinks)) { - if ((($p | ForEach-Object { $_.Trim('/') }) -contains "archive") -and $info[0].tag_name) { - for ($i = 0; $i -lt $p.Length; $i++) { - if ($p[$i].Trim('/') -eq "archive") { - $p[$i + 1] = $info[0].tag_name + ".zip" - $downloadLinks = $url.Scheme + "://" + $url.Host + ($p -join '') - return $downloadLinks + if ((($p | ForEach-Object { $_.Trim('/') }) -contains "archive")) { + # Find the first release that matches our pre-release filtering criteria + $selectedRelease = $null + foreach ($release in $info) { + # Apply the same filtering logic + if (-not $includePrerelease) { + if ($release.prerelease -eq $true) { + continue + } + $prereleaseKeywords = @('-rc', '-beta', '-alpha', '-preview', '-pre') + $isPrerelease = $false + foreach ($keyword in $prereleaseKeywords) { + if ($release.tag_name -ilike "*$keyword*") { + $isPrerelease = $true + break + } + } + if ($isPrerelease) { + continue + } + } + # Use the first release that passes the filter + $selectedRelease = $release + break + } + + if ($selectedRelease -and $selectedRelease.tag_name) { + for ($i = 0; $i -lt $p.Length; $i++) { + if ($p[$i].Trim('/') -eq "archive") { + $p[$i + 1] = $selectedRelease.tag_name + ".zip" + $downloadLinks = $url.Scheme + "://" + $url.Host + ($p -join '') + return $downloadLinks + } } } } From aa6b28a2b02bc2bd19328cd480793e09c7daee78 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 7 Nov 2025 14:38:56 +0000 Subject: [PATCH 4/5] Refactor: Extract pre-release check to helper function Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com> --- scripts/update.ps1 | 56 ++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/scripts/update.ps1 b/scripts/update.ps1 index 84e38aa..135c1e3 100644 --- a/scripts/update.ps1 +++ b/scripts/update.ps1 @@ -83,6 +83,31 @@ function Match-Filenames { return $position } +# Checks if a release is a pre-release based on GitHub API flag and version tag keywords +# Pre-release keywords include: -rc (release candidate), -beta, -alpha, -preview, -pre +function Test-IsPrerelease { + param ( + [Parameter(Mandatory = $true)] + $release + ) + + # Check if marked as pre-release by GitHub + if ($release.prerelease -eq $true) { + return $true + } + + # Check for common pre-release keywords in tag name + # This catches versions like v2.50.0-rc, v1.0.0-beta, v1.0.0-alpha, etc. + $prereleaseKeywords = @('-rc', '-beta', '-alpha', '-preview', '-pre') + foreach ($keyword in $prereleaseKeywords) { + if ($release.tag_name -ilike "*$keyword*") { + return $true + } + } + + return $false +} + # Uses the GitHub api in order to fetch the current download links for the latest releases of the repo. function Fetch-DownloadUrl { param ( @@ -137,26 +162,10 @@ function Fetch-DownloadUrl { # Skip pre-release versions unless explicitly included # Pre-releases include RC (Release Candidate), beta, alpha, and other test versions if (-not $includePrerelease) { - # Check if marked as pre-release by GitHub - if ($i.prerelease -eq $true) { + if (Test-IsPrerelease $i) { Write-Verbose "Skipping pre-release version: $($i.tag_name)" continue } - - # Check for common pre-release keywords in tag name - # This catches versions like v2.50.0-rc, v1.0.0-beta, v1.0.0-alpha, etc. - $prereleaseKeywords = @('-rc', '-beta', '-alpha', '-preview', '-pre') - $isPrerelease = $false - foreach ($keyword in $prereleaseKeywords) { - if ($i.tag_name -ilike "*$keyword*") { - Write-Verbose "Skipping version with pre-release keyword '$keyword': $($i.tag_name)" - $isPrerelease = $true - break - } - } - if ($isPrerelease) { - continue - } } if (-not ($i.assets -is [array])) { @@ -202,18 +211,7 @@ function Fetch-DownloadUrl { foreach ($release in $info) { # Apply the same filtering logic if (-not $includePrerelease) { - if ($release.prerelease -eq $true) { - continue - } - $prereleaseKeywords = @('-rc', '-beta', '-alpha', '-preview', '-pre') - $isPrerelease = $false - foreach ($keyword in $prereleaseKeywords) { - if ($release.tag_name -ilike "*$keyword*") { - $isPrerelease = $true - break - } - } - if ($isPrerelease) { + if (Test-IsPrerelease $release) { continue } } From 73739407b11d6c4211e9d77ffa02fd8253e7ee2d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 7 Nov 2025 14:40:21 +0000 Subject: [PATCH 5/5] Simplify conditional logic for better readability Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com> --- scripts/update.ps1 | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/scripts/update.ps1 b/scripts/update.ps1 index 135c1e3..c6b982d 100644 --- a/scripts/update.ps1 +++ b/scripts/update.ps1 @@ -161,11 +161,9 @@ function Fetch-DownloadUrl { :loop foreach ($i in $info) { # Skip pre-release versions unless explicitly included # Pre-releases include RC (Release Candidate), beta, alpha, and other test versions - if (-not $includePrerelease) { - if (Test-IsPrerelease $i) { - Write-Verbose "Skipping pre-release version: $($i.tag_name)" - continue - } + if (-not $includePrerelease -and (Test-IsPrerelease $i)) { + Write-Verbose "Skipping pre-release version: $($i.tag_name)" + continue } if (-not ($i.assets -is [array])) { @@ -210,10 +208,8 @@ function Fetch-DownloadUrl { $selectedRelease = $null foreach ($release in $info) { # Apply the same filtering logic - if (-not $includePrerelease) { - if (Test-IsPrerelease $release) { - continue - } + if (-not $includePrerelease -and (Test-IsPrerelease $release)) { + continue } # Use the first release that passes the filter $selectedRelease = $release