Add vcpkg NuGet binary cache to CI#58
Merged
Merged
Conversation
heifner
reviewed
May 19, 2026
Contributor
heifner
left a comment
There was a problem hiding this comment.
Reviewed and tested this branch locally — overall looks good, and the NuGet binary-cache path works end-to-end (restored 9 packages incl. llvm@18.1.6 from GitHub Packages in ~1.2 min, full build + 23/23 ctest pass, install tree contains real ELF tools rather than build-dir symlinks).
Two non-blocking build/robustness notes inline; neither blocks merge.
heifner
approved these changes
May 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
vcpkg dependencies, especially LLVM, are expensive to build from source and make CI slow whenever the existing archive cache misses. This PR moves compiled vcpkg dependency reuse to a durable NuGet-backed binary cache in GitHub Packages.
The goal is to make repeated CI and local builds faster and more predictable while keeping the existing containerized CI environment as the source of ABI stability. The local helper script now derives its expected Ubuntu/LLVM environment from the workflow-selected CI Dockerfile, so developer builds can validate that they are aligned before expecting NuGet cache reuse.
Summary
scripts/build-with-github-vcpkg-cache.shas the shared local/CI build entrypointdeveloper,trusted-ci, andforked-pr-ci.github/workflows/build.yamland the configured platform fileBUILD.mdwith the current build flow, helper script modes, optional NuGet binary cache setup, and installed tool inventoryValidation
CI:
Local:
read:packagesapt.llvm.org/noble llvm-toolchain-noble-18Install rule:
DESTDIR=/tmp/wire-cdt-install-test cmake --install build-local-nuget-cacheusr/local/cdt/binare regular ELF executables, not symlinks back tobuild-local-nuget-cache/vcpkg_installedNotes
This intentionally keeps the existing containerized CI build. The container stabilizes the compiler/toolchain ABI that vcpkg uses for binary cache keys.
For local cache hits, developers should use the
developermode helper path documented inBUILD.md. Trusted CI usestrusted-cimode with GitHub Packages read/write access; fork PR CI usesforked-pr-cimode without package credentials.