@@ -39,13 +39,42 @@ jobs:
3939 - name : Checkout Code
4040 uses : actions/checkout@v4
4141
42- - name : Cache vcpkg binary artifacts
43- uses : actions/cache@v4
42+ - name : Compute vcpkg cache key parts
43+ id : vcpkg_key
44+ shell : pwsh
45+ run : |
46+ $baseline = (Get-Content vcpkg.json | ConvertFrom-Json)."builtin-baseline"
47+
48+ # Try to get MSVC version - check VCToolsVersion first, then try cl.exe
49+ $msvc = $env:VCToolsVersion
50+ if (-not $msvc) {
51+ try {
52+ $clOutput = cl.exe 2>&1 | Out-String
53+ if ($clOutput -match "Version (\d+\.\d+\.\d+\.\d+)") {
54+ $msvc = $matches[1]
55+ }
56+ } catch {
57+ # Compiler not available yet, will be detected after VC2022 setup
58+ }
59+ }
60+ if (-not $msvc) { $msvc = "unknown" }
61+
62+ $triplet = "x86-windows"
63+ if ("${{ inputs.preset }}" -like "x64*") { $triplet = "x64-windows" }
64+
65+ "baseline=$baseline" >> $env:GITHUB_OUTPUT
66+ "msvc=$msvc" >> $env:GITHUB_OUTPUT
67+ "triplet=$triplet" >> $env:GITHUB_OUTPUT
68+ Write-Host "vcpkg cache key parts: baseline=$baseline, msvc=$msvc, triplet=$triplet"
69+
70+ - name : Restore vcpkg binary cache
71+ id : vcpkg_cache
72+ uses : actions/cache/restore@v4
4473 with :
4574 path : ${{ github.workspace }}\vcpkg-bincache
46- key : vcpkg-bincache-${{ runner.os }}-${{ hashFiles('vcpkg.json','vcpkg-lock.json') }}-${{ inputs.preset }}
75+ key : vcpkg-bincache-${{ runner.os }}-msvc ${{ steps.vcpkg_key.outputs.msvc }}-baseline${{ steps.vcpkg_key.outputs.baseline }}-${{ steps.vcpkg_key.outputs.triplet }}
4776 restore-keys : |
48- vcpkg-bincache-${{ runner.os }}-${{ hashFiles('vcpkg.json','vcpkg-lock.json') }}-
77+ vcpkg-bincache-${{ runner.os }}-msvc ${{ steps.vcpkg_key.outputs.msvc }}-baseline${{ steps.vcpkg_key.outputs.baseline }}-
4978 vcpkg-bincache-${{ runner.os }}-
5079
5180 - name : Cache VC6 Installation
@@ -121,8 +150,10 @@ jobs:
121150 # Override VCPKG_DEFAULT_BINARY_CACHE that lukka/run-vcpkg sets to its own temp dir
122151 # This ensures vcpkg uses our cached directory instead
123152 $cacheDir = "${{ github.workspace }}\vcpkg-bincache"
153+ $env:VCPKG_DEFAULT_BINARY_CACHE = $cacheDir
154+ $env:VCPKG_BINARY_SOURCES = "clear;files,$cacheDir,readwrite"
124155 "VCPKG_DEFAULT_BINARY_CACHE=$cacheDir" >> $env:GITHUB_ENV
125- "VCPKG_BINARY_SOURCES=clear;files,$cacheDir,readwrite " >> $env:GITHUB_ENV
156+ "VCPKG_BINARY_SOURCES=$env:VCPKG_BINARY_SOURCES " >> $env:GITHUB_ENV
126157 Write-Host "Forced vcpkg binary cache to: $cacheDir" -ForegroundColor Cyan
127158 Write-Host "VCPKG_DEFAULT_BINARY_CACHE=$env:VCPKG_DEFAULT_BINARY_CACHE" -ForegroundColor Gray
128159 Write-Host "VCPKG_BINARY_SOURCES=$env:VCPKG_BINARY_SOURCES" -ForegroundColor Gray
@@ -150,6 +181,13 @@ jobs:
150181 run : |
151182 cmake --build --preset ${{ inputs.preset }}
152183
184+ - name : Save vcpkg binary cache
185+ if : steps.vcpkg_cache.outputs.cache-hit != 'true'
186+ uses : actions/cache/save@v4
187+ with :
188+ path : ${{ github.workspace }}\vcpkg-bincache
189+ key : vcpkg-bincache-${{ runner.os }}-msvc${{ steps.vcpkg_key.outputs.msvc }}-baseline${{ steps.vcpkg_key.outputs.baseline }}-${{ steps.vcpkg_key.outputs.triplet }}
190+
153191 - name : Collect ${{ inputs.game }} ${{ inputs.preset }}${{ inputs.tools && '+t' || '' }}${{ inputs.extras && '+e' || '' }} Artifact
154192 shell : pwsh
155193 run : |
0 commit comments