Skip to content

ci: a vcpkg baseline newer than the runner image fails to resolve - #86

Merged
xroche merged 2 commits into
masterfrom
ci-vcpkg-version-db
Aug 2, 2026
Merged

ci: a vcpkg baseline newer than the runner image fails to resolve#86
xroche merged 2 commits into
masterfrom
ci-vcpkg-version-db

Conversation

@xroche

@xroche xroche commented Aug 2, 2026

Copy link
Copy Markdown
Owner

Bumping a vcpkg baseline past the runner image's frozen C:\vcpkg breaks the build. The step fetches the baseline commit so baseline.json resolves, but vcpkg reads the version database off disk, so it then asks for an entry the image has never seen. On #84 that failed Win32 with no version database entry for vcpkg-cmake-config at 2026-07-21 while x64 passed on the same commit: different runner images, not an architecture split.

The step now checks out versions/ at the newest pinned baseline, leaving scripts/ alone so it keeps matching the image's vcpkg.exe. Re-run #84 once this lands to confirm it: Win32 should go green whichever image it draws.

xroche and others added 2 commits August 2, 2026 10:17
Fetching a baseline commit makes versions/baseline.json readable, but vcpkg
reads the version database itself off the working tree, and the runner image
freezes that at build time. A baseline newer than the image then asks for an
entry the local tree has never seen:

  error : no version database entry for vcpkg-cmake-config at 2026-07-21

Which jobs it hits depends on the image they draw. On PR #84 the x64 job got
image 20260728 and passed, Win32 got 20260720 and failed on the same commit.

Check out versions/ at the newest baseline instead. Entries are append-only,
so it also satisfies the engine's older pin, and scripts/ stays put to keep
matching the vcpkg.exe the image shipped.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012gAp9x4L95B8DkeuHQpuqg
Signed-off-by: Xavier Roche <roche@httrack.com>
Port removals do delete versions/<x>-/<port>.json, so the database is not
append-only in general: seven files went away over the last two years. It
holds across the baselines we pin (17 added, none removed, dependency
closure intact), which is not the same thing as a rule, so state neither.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012gAp9x4L95B8DkeuHQpuqg
Signed-off-by: Xavier Roche <roche@httrack.com>
@xroche
xroche enabled auto-merge (squash) August 2, 2026 08:37
@xroche
xroche merged commit b60cf84 into master Aug 2, 2026
4 checks passed
@xroche
xroche deleted the ci-vcpkg-version-db branch August 2, 2026 08:47
xroche added a commit that referenced this pull request Aug 2, 2026
…seline (#87)

Picking the newest baseline by committer date was a proxy for ancestry, and a fragile one: ties sort unstably, and the exact check (`git merge-base --is-ancestor`) cannot see across two `--depth 1` fetches. Rather than repair the comparison, this drops it. Each manifest gets `versions/` checked out at its own pin, right before the build that uses it.

That also retires the shakier assumption behind #86, that the database is append-only enough for one tree to serve both baselines. It is not append-only in general, since port removals delete versions files; it just held across the two baselines we pin. Master now pins different baselines for the engine and the GUI, so an ordinary CI run exercises both checkouts.

Signed-off-by: Xavier Roche <xroche@gmail.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant