From b0248c275d3c18021fd6ce57ef049019d51c7e5f Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Sat, 13 Sep 2025 12:25:45 -0400 Subject: [PATCH 1/7] update to detect rc versions --- .../get-latest-aspnet-versions.ps1 | 48 +++++++++++++------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/LambdaRuntimeDockerfiles/get-latest-aspnet-versions.ps1 b/LambdaRuntimeDockerfiles/get-latest-aspnet-versions.ps1 index fd2a889a7..feb4f0cde 100644 --- a/LambdaRuntimeDockerfiles/get-latest-aspnet-versions.ps1 +++ b/LambdaRuntimeDockerfiles/get-latest-aspnet-versions.ps1 @@ -33,10 +33,13 @@ function Get-LatestAspNetVersion { # Separate release and preview versions $releaseVersions = @() $previewVersions = @() + $rcVersions = @() foreach ($ver in $versions) { if ($ver -match '-preview') { $previewVersions += $ver + } elseif ($ver -match '-rc') { + $rcVersions += $ver } else { $releaseVersions += $ver } @@ -45,61 +48,76 @@ function Get-LatestAspNetVersion { # If we have release versions, get the latest if ($releaseVersions.Count -gt 0) { $verObjects = @() - foreach ($ver in $releaseVersions) { try { $verObj = New-Object PSObject Add-Member -InputObject $verObj -MemberType NoteProperty -Name "OriginalVersion" -Value $ver - - # Convert to Version object for proper comparison $versionObj = [Version]$ver Add-Member -InputObject $verObj -MemberType NoteProperty -Name "Version" -Value $versionObj - $verObjects += $verObj } catch { Write-Host "Warning: Could not parse version $ver, skipping." } } - - # Sort by version (descending) and get the first one $sortedVersions = $verObjects | Sort-Object -Property Version -Descending - if ($sortedVersions.Count -gt 0) { $latestVersion = $sortedVersions[0].OriginalVersion } else { $latestVersion = $null } } + # Otherwise get the latest rc version + elseif ($rcVersions.Count -gt 0) { + $rcObjs = @() + foreach ($ver in $rcVersions) { + # Match versions like 10.0.0-rc.1.25451.107 or 10.0.0-rc.1 + if ($ver -match '(\d+)\.(\d+)\.(\d+)-rc\.(\d+)(?:\.(\d+)\.(\d+))?') { + $major = [int]$matches[1] + $minor = [int]$matches[2] + $patch = [int]$matches[3] + $rc = [int]$matches[4] + $extra1 = if ($matches[5]) { [int]$matches[5] } else { 0 } + $extra2 = if ($matches[6]) { [int]$matches[6] } else { 0 } + $rcObj = New-Object PSObject + Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "OriginalVersion" -Value $ver + Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "Major" -Value $major + Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "Minor" -Value $minor + Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "Patch" -Value $patch + Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "RC" -Value $rc + Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "Extra1" -Value $extra1 + Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "Extra2" -Value $extra2 + $rcObjs += $rcObj + } + } + $sortedRCs = $rcObjs | Sort-Object -Property Major, Minor, Patch, RC, Extra1, Extra2 -Descending + if ($sortedRCs.Count -gt 0) { + $latestVersion = $sortedRCs[0].OriginalVersion + } else { + $latestVersion = ($rcVersions | Sort-Object)[-1] + } + } # Otherwise get the latest preview version elseif ($previewVersions.Count -gt 0) { - # For preview versions like "10.0.0-preview.5.25277.114" $previewObjs = @() - foreach ($ver in $previewVersions) { if ($ver -match '(\d+)\.(\d+)\.(\d+)-preview\.(\d+)') { $major = [int]$matches[1] $minor = [int]$matches[2] $patch = [int]$matches[3] $preview = [int]$matches[4] - $previewObj = New-Object PSObject Add-Member -InputObject $previewObj -MemberType NoteProperty -Name "OriginalVersion" -Value $ver Add-Member -InputObject $previewObj -MemberType NoteProperty -Name "Major" -Value $major Add-Member -InputObject $previewObj -MemberType NoteProperty -Name "Minor" -Value $minor Add-Member -InputObject $previewObj -MemberType NoteProperty -Name "Patch" -Value $patch Add-Member -InputObject $previewObj -MemberType NoteProperty -Name "Preview" -Value $preview - $previewObjs += $previewObj } } - - # Sort by version components $sortedPreviews = $previewObjs | Sort-Object -Property Major, Minor, Patch, Preview -Descending - if ($sortedPreviews.Count -gt 0) { $latestVersion = $sortedPreviews[0].OriginalVersion } else { - # Fallback - just take the last one alphabetically $latestVersion = ($previewVersions | Sort-Object)[-1] } } From b44d82d29ef46c31e9bbc978a50a98a453803859 Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Sat, 13 Sep 2025 12:31:19 -0400 Subject: [PATCH 2/7] update --- .../get-latest-aspnet-versions.ps1 | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/LambdaRuntimeDockerfiles/get-latest-aspnet-versions.ps1 b/LambdaRuntimeDockerfiles/get-latest-aspnet-versions.ps1 index feb4f0cde..c498c9779 100644 --- a/LambdaRuntimeDockerfiles/get-latest-aspnet-versions.ps1 +++ b/LambdaRuntimeDockerfiles/get-latest-aspnet-versions.ps1 @@ -69,27 +69,37 @@ function Get-LatestAspNetVersion { # Otherwise get the latest rc version elseif ($rcVersions.Count -gt 0) { $rcObjs = @() + $maxRcParts = 0 foreach ($ver in $rcVersions) { # Match versions like 10.0.0-rc.1.25451.107 or 10.0.0-rc.1 - if ($ver -match '(\d+)\.(\d+)\.(\d+)-rc\.(\d+)(?:\.(\d+)\.(\d+))?') { + if ($ver -match '^(\d+)\.(\d+)\.(\d+)-rc\.(.+)$') { $major = [int]$matches[1] $minor = [int]$matches[2] $patch = [int]$matches[3] - $rc = [int]$matches[4] - $extra1 = if ($matches[5]) { [int]$matches[5] } else { 0 } - $extra2 = if ($matches[6]) { [int]$matches[6] } else { 0 } + $rcParts = $matches[4] -split '\.' + $rcNumbers = $rcParts | ForEach-Object { [int]$_ } + if ($rcNumbers.Count -gt $maxRcParts) { $maxRcParts = $rcNumbers.Count } $rcObj = New-Object PSObject Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "OriginalVersion" -Value $ver Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "Major" -Value $major Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "Minor" -Value $minor Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "Patch" -Value $patch - Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "RC" -Value $rc - Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "Extra1" -Value $extra1 - Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "Extra2" -Value $extra2 + for ($i = 0; $i -lt $rcNumbers.Count; $i++) { + Add-Member -InputObject $rcObj -MemberType NoteProperty -Name ("RC$i") -Value $rcNumbers[$i] + } $rcObjs += $rcObj } } - $sortedRCs = $rcObjs | Sort-Object -Property Major, Minor, Patch, RC, Extra1, Extra2 -Descending + # Pad missing RC fields with 0 for sorting + foreach ($obj in $rcObjs) { + for ($i = 0; $i -lt $maxRcParts; $i++) { + if (-not ($obj.PSObject.Properties.Name -contains ("RC$i"))) { + Add-Member -InputObject $obj -MemberType NoteProperty -Name ("RC$i") -Value 0 + } + } + } + $sortProps = @("Major", "Minor", "Patch") + @(for ($i = 0; $i -lt $maxRcParts; $i++) { "RC$i" }) + $sortedRCs = $rcObjs | Sort-Object -Property $sortProps -Descending if ($sortedRCs.Count -gt 0) { $latestVersion = $sortedRCs[0].OriginalVersion } else { From 82fbf3519ba83808feea0e5698826fd62a5c8c61 Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Sat, 13 Sep 2025 12:33:29 -0400 Subject: [PATCH 3/7] add logging --- .../get-latest-aspnet-versions.ps1 | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/LambdaRuntimeDockerfiles/get-latest-aspnet-versions.ps1 b/LambdaRuntimeDockerfiles/get-latest-aspnet-versions.ps1 index c498c9779..1f28c9c7b 100644 --- a/LambdaRuntimeDockerfiles/get-latest-aspnet-versions.ps1 +++ b/LambdaRuntimeDockerfiles/get-latest-aspnet-versions.ps1 @@ -36,11 +36,15 @@ function Get-LatestAspNetVersion { $rcVersions = @() foreach ($ver in $versions) { + Write-Host "Processing version: $ver" if ($ver -match '-preview') { + Write-Host " -> Detected preview version" $previewVersions += $ver } elseif ($ver -match '-rc') { + Write-Host " -> Detected rc version" $rcVersions += $ver } else { + Write-Host " -> Detected release version" $releaseVersions += $ver } } @@ -49,6 +53,7 @@ function Get-LatestAspNetVersion { if ($releaseVersions.Count -gt 0) { $verObjects = @() foreach ($ver in $releaseVersions) { + Write-Host "Attempting to parse release version: $ver" try { $verObj = New-Object PSObject Add-Member -InputObject $verObj -MemberType NoteProperty -Name "OriginalVersion" -Value $ver @@ -56,7 +61,7 @@ function Get-LatestAspNetVersion { Add-Member -InputObject $verObj -MemberType NoteProperty -Name "Version" -Value $versionObj $verObjects += $verObj } catch { - Write-Host "Warning: Could not parse version $ver, skipping." + Write-Host "Warning: Could not parse release version $ver, skipping." } } $sortedVersions = $verObjects | Sort-Object -Property Version -Descending @@ -71,13 +76,15 @@ function Get-LatestAspNetVersion { $rcObjs = @() $maxRcParts = 0 foreach ($ver in $rcVersions) { - # Match versions like 10.0.0-rc.1.25451.107 or 10.0.0-rc.1 + Write-Host "Attempting to parse rc version: $ver" if ($ver -match '^(\d+)\.(\d+)\.(\d+)-rc\.(.+)$') { + Write-Host " -> RC regex matched" $major = [int]$matches[1] $minor = [int]$matches[2] $patch = [int]$matches[3] $rcParts = $matches[4] -split '\.' $rcNumbers = $rcParts | ForEach-Object { [int]$_ } + Write-Host " -> RC numeric parts: $($rcNumbers -join ',')" if ($rcNumbers.Count -gt $maxRcParts) { $maxRcParts = $rcNumbers.Count } $rcObj = New-Object PSObject Add-Member -InputObject $rcObj -MemberType NoteProperty -Name "OriginalVersion" -Value $ver @@ -88,6 +95,8 @@ function Get-LatestAspNetVersion { Add-Member -InputObject $rcObj -MemberType NoteProperty -Name ("RC$i") -Value $rcNumbers[$i] } $rcObjs += $rcObj + } else { + Write-Host " -> RC regex did NOT match" } } # Pad missing RC fields with 0 for sorting @@ -99,6 +108,7 @@ function Get-LatestAspNetVersion { } } $sortProps = @("Major", "Minor", "Patch") + @(for ($i = 0; $i -lt $maxRcParts; $i++) { "RC$i" }) + Write-Host "Sorting RCs by: $($sortProps -join ', ')" $sortedRCs = $rcObjs | Sort-Object -Property $sortProps -Descending if ($sortedRCs.Count -gt 0) { $latestVersion = $sortedRCs[0].OriginalVersion From d3d63681f46d5ee8108bf8784a22ed40ee4a94cd Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Sat, 13 Sep 2025 12:34:45 -0400 Subject: [PATCH 4/7] update branch --- .github/workflows/auto-update-Dockerfiles.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-update-Dockerfiles.yml b/.github/workflows/auto-update-Dockerfiles.yml index 1e5af5cc0..10085ebfc 100644 --- a/.github/workflows/auto-update-Dockerfiles.yml +++ b/.github/workflows/auto-update-Dockerfiles.yml @@ -28,7 +28,7 @@ jobs: # Checks-out the repository under $GITHUB_WORKSPACE - uses: actions/checkout@85e6279cec87321a52edac9c87bce653a07cf6c2 #v4.2.2 with: - ref: 'dev' + ref: 'gcbeatty/rc' # Update .NET 8 AMD64 Dockerfile - name: Update .NET 8 AMD64 From 24bd4c939e4c46c8eac6b1b07d613ff883aaa2f4 Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Sat, 13 Sep 2025 12:37:34 -0400 Subject: [PATCH 5/7] update branch --- .github/workflows/auto-update-Dockerfiles.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-update-Dockerfiles.yml b/.github/workflows/auto-update-Dockerfiles.yml index 10085ebfc..1e5af5cc0 100644 --- a/.github/workflows/auto-update-Dockerfiles.yml +++ b/.github/workflows/auto-update-Dockerfiles.yml @@ -28,7 +28,7 @@ jobs: # Checks-out the repository under $GITHUB_WORKSPACE - uses: actions/checkout@85e6279cec87321a52edac9c87bce653a07cf6c2 #v4.2.2 with: - ref: 'gcbeatty/rc' + ref: 'dev' # Update .NET 8 AMD64 Dockerfile - name: Update .NET 8 AMD64 From 11e027e78d82fb0afb3801ef61e31deb2c92c631 Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Sun, 14 Sep 2025 14:19:30 -0400 Subject: [PATCH 6/7] delete branch --- .github/workflows/auto-update-Dockerfiles.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/auto-update-Dockerfiles.yml b/.github/workflows/auto-update-Dockerfiles.yml index 1e5af5cc0..67ce84894 100644 --- a/.github/workflows/auto-update-Dockerfiles.yml +++ b/.github/workflows/auto-update-Dockerfiles.yml @@ -135,6 +135,9 @@ jobs: git add "**/*Dockerfile" git commit -m "chore: Daily ASP.NET Core version update in Dockerfiles" + # Always delete the remote branch before pushing to avoid stale branch errors + git push origin --delete $remoteBranch 2>$null + # Push local branch to remote branch (force push to consistent remote branch name) git push --force-with-lease origin "${localBranch}:${remoteBranch}" From bb90adfc2dd434cb6456ef6da770718f7363a3aa Mon Sep 17 00:00:00 2001 From: Garrett Beatty Date: Sun, 14 Sep 2025 14:22:12 -0400 Subject: [PATCH 7/7] use force --- .github/workflows/auto-update-Dockerfiles.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-update-Dockerfiles.yml b/.github/workflows/auto-update-Dockerfiles.yml index 67ce84894..0e9e8dbc1 100644 --- a/.github/workflows/auto-update-Dockerfiles.yml +++ b/.github/workflows/auto-update-Dockerfiles.yml @@ -139,7 +139,7 @@ jobs: git push origin --delete $remoteBranch 2>$null # Push local branch to remote branch (force push to consistent remote branch name) - git push --force-with-lease origin "${localBranch}:${remoteBranch}" + git push --force origin "${localBranch}:${remoteBranch}" # Write the remote branch name to GITHUB_OUTPUT for use in the PR step Add-Content -Path $env:GITHUB_OUTPUT -Value "BRANCH=$remoteBranch"