Skip to content

Commit d9215b8

Browse files
authored
* Make steps more robust (#3211)
* Make steps more robust
2 parents d2daf39 + 48c72d7 commit d9215b8

File tree

5 files changed

+153
-68
lines changed

5 files changed

+153
-68
lines changed

.github/workflows/build.yml

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,14 +111,18 @@ jobs:
111111
}
112112
if (-not $latestVersion) { $latestVersion = "1.0.3595.46" }
113113
Write-Host "Using WebView2 ($(if ($usePrerelease) { 'preview' } else { 'latest' })): $latestVersion"
114-
dotnet add $utilProj package $packageId --version $latestVersion
115-
dotnet restore $utilProj
114+
dotnet add "$utilProj" package $packageId --version $latestVersion
115+
dotnet restore "$utilProj"
116116
$nugetBase = Join-Path $env:USERPROFILE ".nuget\packages\microsoft.web.webview2\$latestVersion"
117117
@("Microsoft.Web.WebView2.Core.dll","Microsoft.Web.WebView2.WinForms.dll","WebView2Loader.dll") | ForEach-Object {
118118
$f = Get-ChildItem -Path $nugetBase -Recurse -Name $_ -ErrorAction SilentlyContinue | Select-Object -First 1
119119
if ($f) { Copy-Item (Join-Path $nugetBase $f) $libDir -Force; Write-Host "Copied $_" }
120120
}
121-
dotnet remove package $packageId --project $utilProj
121+
[xml]$proj = Get-Content $utilProj
122+
$nodes = $proj.SelectNodes("//PackageReference[@Include='$packageId']")
123+
foreach ($node in $nodes) { $node.ParentNode.RemoveChild($node) | Out-Null }
124+
$proj.Save($utilProj)
125+
Write-Host "Removed temporary WebView2 PackageReference entries"
122126
123127
- name: Restore
124128
run: dotnet restore "Source/Krypton Components/Krypton Toolkit Suite 2022 - VS2022.slnx"
@@ -208,14 +212,18 @@ jobs:
208212
}
209213
if (-not $latestVersion) { $latestVersion = "1.0.3595.46" }
210214
Write-Host "Using WebView2 ($(if ($usePrerelease) { 'preview' } else { 'latest' })): $latestVersion"
211-
dotnet add $utilProj package $packageId --version $latestVersion
212-
dotnet restore $utilProj
215+
dotnet add "$utilProj" package $packageId --version $latestVersion
216+
dotnet restore "$utilProj"
213217
$nugetBase = Join-Path $env:USERPROFILE ".nuget\packages\microsoft.web.webview2\$latestVersion"
214218
@("Microsoft.Web.WebView2.Core.dll","Microsoft.Web.WebView2.WinForms.dll","WebView2Loader.dll") | ForEach-Object {
215219
$f = Get-ChildItem -Path $nugetBase -Recurse -Name $_ -ErrorAction SilentlyContinue | Select-Object -First 1
216220
if ($f) { Copy-Item (Join-Path $nugetBase $f) $libDir -Force; Write-Host "Copied $_" }
217221
}
218-
dotnet remove package $packageId --project $utilProj
222+
[xml]$proj = Get-Content $utilProj
223+
$nodes = $proj.SelectNodes("//PackageReference[@Include='$packageId']")
224+
foreach ($node in $nodes) { $node.ParentNode.RemoveChild($node) | Out-Null }
225+
$proj.Save($utilProj)
226+
Write-Host "Removed temporary WebView2 PackageReference entries"
219227
220228
- name: Restore
221229
run: dotnet restore "Source/Krypton Components/Krypton Toolkit Suite 2022 - VS2022.slnx"

.github/workflows/canary-lts-release.yml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,16 +114,21 @@ jobs:
114114
}
115115
if (-not $latestVersion) { $latestVersion = "1.0.3595.46" }
116116
Write-Host "Using WebView2 SDK version: $latestVersion"
117-
dotnet add "Source/Krypton Components/Krypton.Utilities/Krypton.Utilities.csproj" package Microsoft.Web.WebView2 --version $latestVersion
118-
dotnet restore "Source/Krypton Components/Krypton.Utilities/Krypton.Utilities.csproj"
117+
$utilProj = Join-Path $env:GITHUB_WORKSPACE "Source\Krypton Components\Krypton.Utilities\Krypton.Utilities.csproj"
118+
dotnet add "$utilProj" package Microsoft.Web.WebView2 --version $latestVersion
119+
dotnet restore "$utilProj"
119120
$nugetBasePath = "$env:USERPROFILE\.nuget\packages\microsoft.web.webview2\$latestVersion"
120121
$coreDll = Get-ChildItem -Path $nugetBasePath -Recurse -Name "Microsoft.Web.WebView2.Core.dll" | Select-Object -First 1
121122
Copy-Item (Join-Path $nugetBasePath $coreDll) "WebView2SDK\"
122123
$winFormsDll = Get-ChildItem -Path $nugetBasePath -Recurse -Name "Microsoft.Web.WebView2.WinForms.dll" | Select-Object -First 1
123124
Copy-Item (Join-Path $nugetBasePath $winFormsDll) "WebView2SDK\"
124125
$loaderDll = Get-ChildItem -Path $nugetBasePath -Recurse -Name "WebView2Loader.dll" | Select-Object -First 1
125126
Copy-Item (Join-Path $nugetBasePath $loaderDll) "WebView2SDK\"
126-
dotnet remove "Source/Krypton Components/Krypton.Utilities/Krypton.Utilities.csproj" package Microsoft.Web.WebView2
127+
[xml]$proj = Get-Content $utilProj
128+
$nodes = $proj.SelectNodes("//PackageReference[@Include='$packageId']")
129+
foreach ($node in $nodes) { $node.ParentNode.RemoveChild($node) | Out-Null }
130+
$proj.Save($utilProj)
131+
Write-Host "Removed temporary WebView2 PackageReference entries"
127132
128133
- name: Restore
129134
if: steps.canary_lts_kill_switch.outputs.enabled == 'true'

.github/workflows/canary.yml

Lines changed: 50 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -132,35 +132,59 @@ jobs:
132132
if: steps.canary_release_kill_switch.outputs.enabled == 'true'
133133
shell: pwsh
134134
run: |
135+
$ErrorActionPreference = "Stop"
136+
135137
$root = $env:GITHUB_WORKSPACE
136138
if (-not $root) { $root = (Get-Location).Path }
137-
$utilProj = Join-Path $root "Source\Krypton Components\Krypton.Utilities\Krypton.Utilities.csproj"
139+
138140
$libDir = Join-Path $root "Source\Krypton Components\Krypton.Utilities\Lib\WebView2"
139-
if (-not (Test-Path $utilProj)) { Write-Error "Project not found: $utilProj"; exit 1 }
140-
if (-not (Test-Path $libDir)) { New-Item -ItemType Directory -Path $libDir -Force }
141-
$packageId = "Microsoft.Web.WebView2"
142-
Write-Host "Using prerelease=true for WebView2 SDK lookup (canary build)"
143-
$latestVersion = $null
144-
try {
145-
$searchResponse = Invoke-RestMethod -Uri "https://azuresearch-usnc.nuget.org/query?q=$packageId&prerelease=true&semVerLevel=2.0.0&take=1" -Method Get
146-
if ($searchResponse.data -and $searchResponse.data.Count -gt 0) { $latestVersion = $searchResponse.data[0].version }
147-
} catch {
148-
try {
149-
$response = Invoke-RestMethod -Uri "https://api.nuget.org/v3-flatcontainer/$packageId/index.json" -Method Get
150-
$allVersions = $response.versions | Where-Object { $_ -match '^\d+\.\d+\.\d+' }
151-
if ($allVersions) { $latestVersion = $allVersions | Sort-Object { [System.Version]($_ -replace '-.*', '') } -Descending | Select-Object -First 1 }
152-
} catch {}
153-
}
154-
if (-not $latestVersion) { $latestVersion = "1.0.3595.46" }
155-
Write-Host "Using WebView2 (Preview): $latestVersion"
156-
dotnet add $utilProj package $packageId --version $latestVersion
157-
dotnet restore $utilProj
158-
$nugetBase = Join-Path $env:USERPROFILE ".nuget\packages\microsoft.web.webview2\$latestVersion"
159-
@("Microsoft.Web.WebView2.Core.dll","Microsoft.Web.WebView2.WinForms.dll","WebView2Loader.dll") | ForEach-Object {
160-
$f = Get-ChildItem -Path $nugetBase -Recurse -Name $_ -ErrorAction SilentlyContinue | Select-Object -First 1
161-
if ($f) { Copy-Item (Join-Path $nugetBase $f) $libDir -Force; Write-Host "Copied $_" }
162-
}
163-
dotnet remove package $packageId --project $utilProj
141+
$tempDir = Join-Path $env:RUNNER_TEMP "webview2"
142+
try {
143+
$search = Invoke-RestMethod `
144+
-Uri "https://azuresearch-usnc.nuget.org/query?q=$packageId&prerelease=true&semVerLevel=2.0.0&take=1"
145+
146+
$latestVersion = $search.data[0].version
147+
}
148+
catch {
149+
Write-Warning "NuGet search failed, using fallback version"
150+
$latestVersion = "1.0.3595.46"
151+
}
152+
153+
Write-Host "Using WebView2 version: $latestVersion"
154+
155+
$nupkg = Join-Path $tempDir "$packageId.$latestVersion.nupkg"
156+
$extractDir = Join-Path $tempDir "extract"
157+
158+
Write-Host "Downloading package..."
159+
160+
Invoke-WebRequest `
161+
-Uri "https://www.nuget.org/api/v2/package/$packageId/$latestVersion" `
162+
-OutFile $nupkg
163+
164+
Write-Host "Extracting package..."
165+
166+
Expand-Archive $nupkg $extractDir -Force
167+
168+
Write-Host "Copying required DLLs..."
169+
170+
$files = @(
171+
"Microsoft.Web.WebView2.Core.dll"
172+
"Microsoft.Web.WebView2.WinForms.dll"
173+
"WebView2Loader.dll"
174+
)
175+
176+
foreach ($file in $files) {
177+
$found = Get-ChildItem $extractDir -Recurse -Filter $file | Select-Object -First 1
178+
if ($found) {
179+
Copy-Item $found.FullName $libDir -Force
180+
Write-Host "Copied $file"
181+
}
182+
else {
183+
Write-Warning "$file not found in package"
184+
}
185+
}
186+
187+
Write-Host "WebView2 population complete."
164188

165189
- name: Restore
166190
if: steps.canary_release_kill_switch.outputs.enabled == 'true'

.github/workflows/nightly.yml

Lines changed: 60 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -156,41 +156,77 @@ jobs:
156156
restore-keys: |
157157
${{ runner.os }}-nuget-
158158
159+
- uses: actions/cache@v5
160+
if: steps.nightly_release_kill_switch.outputs.enabled == 'true' && steps.check_changes.outputs.has_changes == 'true'
161+
with:
162+
path: ${{ runner.temp }}/webview2
163+
key: webview2-${{ runner.os }}
164+
159165
- name: Populate WebView2 (Preview)
160166
if: steps.nightly_release_kill_switch.outputs.enabled == 'true' && steps.check_changes.outputs.has_changes == 'true'
161167
shell: pwsh
162168
run: |
169+
$ErrorActionPreference = "Stop"
170+
163171
$root = $env:GITHUB_WORKSPACE
164172
if (-not $root) { $root = (Get-Location).Path }
165-
$utilProj = Join-Path $root "Source\Krypton Components\Krypton.Utilities\Krypton.Utilities.csproj"
173+
166174
$libDir = Join-Path $root "Source\Krypton Components\Krypton.Utilities\Lib\WebView2"
167-
if (-not (Test-Path $utilProj)) { Write-Error "Project not found: $utilProj"; exit 1 }
168-
if (-not (Test-Path $libDir)) { New-Item -ItemType Directory -Path $libDir -Force }
175+
$tempDir = Join-Path $env:RUNNER_TEMP "webview2"
176+
177+
New-Item -ItemType Directory -Force -Path $libDir | Out-Null
178+
New-Item -ItemType Directory -Force -Path $tempDir | Out-Null
179+
169180
$packageId = "Microsoft.Web.WebView2"
170-
# Use prerelease versions for alpha/nightly builds to avoid .NET 11.0 requirement
171-
Write-Host "Using prerelease=true for WebView2 SDK lookup (nightly build)"
172-
$latestVersion = $null
181+
182+
Write-Host "Querying NuGet for latest WebView2 prerelease..."
183+
173184
try {
174-
$searchResponse = Invoke-RestMethod -Uri "https://azuresearch-usnc.nuget.org/query?q=$packageId&prerelease=true&semVerLevel=2.0.0&take=1" -Method Get
175-
if ($searchResponse.data -and $searchResponse.data.Count -gt 0) { $latestVersion = $searchResponse.data[0].version }
176-
} catch {
177-
try {
178-
$response = Invoke-RestMethod -Uri "https://api.nuget.org/v3-flatcontainer/$packageId/index.json" -Method Get
179-
# Include prerelease versions
180-
$allVersions = $response.versions | Where-Object { $_ -match '^\d+\.\d+\.\d+' }
181-
if ($allVersions) { $latestVersion = $allVersions | Sort-Object { [System.Version]($_ -replace '-.*', '') } -Descending | Select-Object -First 1 }
182-
} catch {}
185+
$search = Invoke-RestMethod `
186+
-Uri "https://azuresearch-usnc.nuget.org/query?q=$packageId&prerelease=true&semVerLevel=2.0.0&take=1"
187+
188+
$latestVersion = $search.data[0].version
183189
}
184-
if (-not $latestVersion) { $latestVersion = "1.0.3595.46" }
185-
Write-Host "Using WebView2 (Preview): $latestVersion"
186-
dotnet add $utilProj package $packageId --version $latestVersion
187-
dotnet restore $utilProj
188-
$nugetBase = Join-Path $env:USERPROFILE ".nuget\packages\microsoft.web.webview2\$latestVersion"
189-
@("Microsoft.Web.WebView2.Core.dll","Microsoft.Web.WebView2.WinForms.dll","WebView2Loader.dll") | ForEach-Object {
190-
$f = Get-ChildItem -Path $nugetBase -Recurse -Name $_ -ErrorAction SilentlyContinue | Select-Object -First 1
191-
if ($f) { Copy-Item (Join-Path $nugetBase $f) $libDir -Force; Write-Host "Copied $_" }
190+
catch {
191+
Write-Warning "NuGet search failed, using fallback version"
192+
$latestVersion = "1.0.3595.46"
192193
}
193-
dotnet remove package $packageId --project $utilProj
194+
195+
Write-Host "Using WebView2 version: $latestVersion"
196+
197+
$nupkg = Join-Path $tempDir "$packageId.$latestVersion.nupkg"
198+
$extractDir = Join-Path $tempDir "extract"
199+
200+
Write-Host "Downloading package..."
201+
202+
Invoke-WebRequest `
203+
-Uri "https://www.nuget.org/api/v2/package/$packageId/$latestVersion" `
204+
-OutFile $nupkg
205+
206+
Write-Host "Extracting package..."
207+
208+
Expand-Archive $nupkg $extractDir -Force
209+
210+
Write-Host "Copying required DLLs..."
211+
212+
$files = @(
213+
"Microsoft.Web.WebView2.Core.dll"
214+
"Microsoft.Web.WebView2.WinForms.dll"
215+
"WebView2Loader.dll"
216+
)
217+
218+
foreach ($file in $files) {
219+
$found = Get-ChildItem $extractDir -Recurse -Filter $file | Select-Object -First 1
220+
if ($found) {
221+
Copy-Item $found.FullName $libDir -Force
222+
Write-Host "Copied $file"
223+
}
224+
else {
225+
Write-Warning "$file not found in package"
226+
}
227+
}
228+
229+
Write-Host "WebView2 population complete."
194230
195231
- name: Restore
196232
if: steps.nightly_release_kill_switch.outputs.enabled == 'true' && steps.check_changes.outputs.has_changes == 'true'

.github/workflows/release.yml

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -127,14 +127,18 @@ jobs:
127127
}
128128
if (-not $latestVersion) { $latestVersion = "1.0.3595.46" }
129129
Write-Host "Using WebView2 (Latest): $latestVersion"
130-
dotnet add $utilProj package $packageId --version $latestVersion
131-
dotnet restore $utilProj
130+
dotnet add "$utilProj" package $packageId --version $latestVersion
131+
dotnet restore "$utilProj"
132132
$nugetBase = Join-Path $env:USERPROFILE ".nuget\packages\microsoft.web.webview2\$latestVersion"
133133
@("Microsoft.Web.WebView2.Core.dll","Microsoft.Web.WebView2.WinForms.dll","WebView2Loader.dll") | ForEach-Object {
134134
$f = Get-ChildItem -Path $nugetBase -Recurse -Name $_ -ErrorAction SilentlyContinue | Select-Object -First 1
135135
if ($f) { Copy-Item (Join-Path $nugetBase $f) $libDir -Force; Write-Host "Copied $_" }
136136
}
137-
dotnet remove package $packageId --project $utilProj
137+
[xml]$proj = Get-Content $utilProj
138+
$nodes = $proj.SelectNodes("//PackageReference[@Include='$packageId']")
139+
foreach ($node in $nodes) { $node.ParentNode.RemoveChild($node) | Out-Null }
140+
$proj.Save($utilProj)
141+
Write-Host "Removed temporary WebView2 PackageReference entries"
138142
139143
- name: Restore
140144
# Kill switch check
@@ -387,14 +391,18 @@ jobs:
387391
}
388392
if (-not $latestVersion) { $latestVersion = "1.0.3595.46" }
389393
Write-Host "Using WebView2 (Latest): $latestVersion"
390-
dotnet add $utilProj package $packageId --version $latestVersion
391-
dotnet restore $utilProj
394+
dotnet add "$utilProj" package $packageId --version $latestVersion
395+
dotnet restore "$utilProj"
392396
$nugetBase = Join-Path $env:USERPROFILE ".nuget\packages\microsoft.web.webview2\$latestVersion"
393397
@("Microsoft.Web.WebView2.Core.dll","Microsoft.Web.WebView2.WinForms.dll","WebView2Loader.dll") | ForEach-Object {
394398
$f = Get-ChildItem -Path $nugetBase -Recurse -Name $_ -ErrorAction SilentlyContinue | Select-Object -First 1
395399
if ($f) { Copy-Item (Join-Path $nugetBase $f) $libDir -Force; Write-Host "Copied $_" }
396400
}
397-
dotnet remove package $packageId --project $utilProj
401+
[xml]$proj = Get-Content $utilProj
402+
$nodes = $proj.SelectNodes("//PackageReference[@Include='$packageId']")
403+
foreach ($node in $nodes) { $node.ParentNode.RemoveChild($node) | Out-Null }
404+
$proj.Save($utilProj)
405+
Write-Host "Removed temporary WebView2 PackageReference entries"
398406
399407
- name: Restore
400408
# Kill switch check
@@ -910,14 +918,18 @@ jobs:
910918
}
911919
if (-not $latestVersion) { $latestVersion = "1.0.3595.46" }
912920
Write-Host "Using WebView2 (Preview): $latestVersion"
913-
dotnet add $utilProj package $packageId --version $latestVersion
914-
dotnet restore $utilProj
921+
dotnet add "$utilProj" package $packageId --version $latestVersion
922+
dotnet restore "$utilProj"
915923
$nugetBase = Join-Path $env:USERPROFILE ".nuget\packages\microsoft.web.webview2\$latestVersion"
916924
@("Microsoft.Web.WebView2.Core.dll","Microsoft.Web.WebView2.WinForms.dll","WebView2Loader.dll") | ForEach-Object {
917925
$f = Get-ChildItem -Path $nugetBase -Recurse -Name $_ -ErrorAction SilentlyContinue | Select-Object -First 1
918926
if ($f) { Copy-Item (Join-Path $nugetBase $f) $libDir -Force; Write-Host "Copied $_" }
919927
}
920-
dotnet remove package $packageId --project $utilProj
928+
[xml]$proj = Get-Content $utilProj
929+
$nodes = $proj.SelectNodes("//PackageReference[@Include='$packageId']")
930+
foreach ($node in $nodes) { $node.ParentNode.RemoveChild($node) | Out-Null }
931+
$proj.Save($utilProj)
932+
Write-Host "Removed temporary WebView2 PackageReference entries"
921933
922934
- name: Restore
923935
# Kill switch check

0 commit comments

Comments
 (0)