@@ -39,47 +39,50 @@ jobs:
3939 if : contains(matrix.os, 'windows')
4040 shell : pwsh
4141 run : |
42- function Find-GlslangValidator {
43- $cmd = Get-Command glslangValidator -ErrorAction SilentlyContinue
44- if ($cmd) { return $cmd.Source }
42+ $ErrorActionPreference = 'Stop'
43+ $headers = @{
44+ "Accept" = "application/vnd.github+json"
45+ "X-GitHub-Api-Version" = "2022-11-28"
46+ }
4547
46- $candidates = @()
47- if ($env:VULKAN_SDK) {
48- $candidates += (Join-Path $env:VULKAN_SDK 'Bin\glslangValidator.exe')
49- }
50- $candidates += @(
51- 'C:\VulkanSDK\*\Bin\glslangValidator.exe',
52- 'C:\Program Files\VulkanSDK\*\Bin\glslangValidator.exe',
53- "$env:USERPROFILE\VulkanSDK\*\Bin\glslangValidator.exe",
54- 'C:\ProgramData\chocolatey\lib\vulkan-sdk\tools\**\glslangValidator.exe'
55- )
56-
57- foreach ($pattern in $candidates) {
58- $found = Get-ChildItem -Path $pattern -File -Recurse -ErrorAction SilentlyContinue |
59- Sort-Object FullName -Descending | Select-Object -First 1
60- if ($found) { return $found.FullName }
61- }
48+ function Get-GlslangAssetUrl {
49+ param([string]$Tag)
50+ $release = Invoke-RestMethod -Uri "https://api.github.com/repos/KhronosGroup/glslang/releases/tags/$Tag" -Headers $headers
51+ $asset = $release.assets | Where-Object { $_.name -match 'windows.*Release\.zip$' } | Select-Object -First 1
52+ if ($asset) { return $asset.browser_download_url }
6253 return $null
6354 }
6455
65- $ErrorActionPreference = 'Continue'
66- choco install vulkan-sdk -y
67- $ErrorActionPreference = 'Stop'
68-
69- $validator = Find-GlslangValidator
70- if (-not $validator) {
71- Write-Host "glslangValidator not found after Chocolatey install, falling back to winget..."
72- winget install --id KhronosGroup.VulkanSDK --accept-package-agreements --accept-source-agreements --disable-interactivity
73- $validator = Find-GlslangValidator
56+ $assetUrl = $null
57+ foreach ($tag in @("main-tot", "master-tot")) {
58+ try {
59+ $assetUrl = Get-GlslangAssetUrl -Tag $tag
60+ if ($assetUrl) {
61+ Write-Host "Using glslang release tag: $tag"
62+ break
63+ }
64+ } catch {
65+ Write-Host "Tag $tag lookup failed: $($_.Exception.Message)"
66+ }
7467 }
68+ if (-not $assetUrl) { throw "Unable to locate a Windows glslang asset from main-tot/master-tot." }
7569
76- if (-not $validator) {
77- throw "glslangValidator.exe not found after Vulkan SDK installation."
78- }
70+ $zipPath = Join-Path $env:RUNNER_TEMP "glslang-windows.zip"
71+ $extractDir = Join-Path $env:RUNNER_TEMP "glslang"
72+ if (Test-Path $extractDir) { Remove-Item -Recurse -Force $extractDir }
73+
74+ Invoke-WebRequest -Uri $assetUrl -OutFile $zipPath
75+ Expand-Archive -Path $zipPath -DestinationPath $extractDir -Force
76+
77+ $validator = Get-ChildItem -Path $extractDir -Recurse -File -Filter glslangValidator.exe -ErrorAction SilentlyContinue | Select-Object -First 1
78+ $glslang = Get-ChildItem -Path $extractDir -Recurse -File -Filter glslang.exe -ErrorAction SilentlyContinue | Select-Object -First 1
79+ $tool = if ($validator) { $validator } elseif ($glslang) { $glslang } else { $null }
80+ if (-not $tool) { throw "glslang executable not found in downloaded asset." }
7981
80- Write-Host "Using glslangValidator: $validator"
81- (Split-Path -Parent $validator) | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
82- & $validator --version
82+ $toolDir = Split-Path -Parent $tool.FullName
83+ Write-Host "Using glslang tool: $($tool.FullName)"
84+ $toolDir | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
85+ & $tool.FullName --version
8386
8487 - name : Build Desktop
8588 run : python3 scripts/build.py desktop
0 commit comments