Skip to content

Commit 445110a

Browse files
committed
ci(vcpkg): Use separate restore/save cache actions and improve cache key with baseline/MSVC/triplet
1 parent 4fb2dae commit 445110a

File tree

1 file changed

+43
-5
lines changed

1 file changed

+43
-5
lines changed

.github/workflows/build-toolchain.yml

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)