Repository navigation
Move to V8 15.6.8, and fetch the monolith from where it is built - #30
Merged
Merged
Conversation
The V8 the engine builds against jumps from 14.0.264.0 to 15.6.8, and CI stops depending on a file somebody uploaded by hand. The library was previously a v8-libs.zip attached to a release in this repository. Nothing produced it reproducibly, and a rebuilt V8 only reached CI when someone remembered to upload it again. It now comes from v8-static-win, which builds the monolith for 32-bit Windows against the static CRT and publishes all four configurations. The release tag, repository and asset pattern sit in one env block per workflow; moving V8 is those three lines plus the vendored headers, which have to agree with the library or the link fails. The tag is pinned rather than resolved to whatever is newest. A V8 release can change the embedder API, so moving to one should fail in the pull request that does it, not in the next unrelated build. The asset is matched by pattern because its name carries the MSVC toolset it was built with, and that changes when the publishing runner does; the toolset is a floor, not a match, so any toolset at least that new links it. What 15.6.8 required of the bindings: PropertyCallbackInfo::This() is gone - Holder() replaces it. External::New and External::Value take an explicit type tag, as do the aligned-pointer internal field accessors. AccessorNameSetterCallback is replaced by its V2 form, whose callbacks return through PropertyCallbackInfo<v8::Boolean> rather than void. Object::GetIsolate() and Function::GetIsolate() are gone; the isolate comes from the caller. V8_GN_HEADER has to be defined when compiling against the published monolith - it is how the public headers pick up the bundled v8-gn.h and lay objects out the way the library does, so it is an ABI requirement rather than a convenience - and ntdll, userenv and bcrypt have to be linked, which Rust's standard library pulled in when Temporal brought Rust into the archive. Verified by building the DLL against the published x86 Release archive: it compiles and links with no further project change, and imports no dynamic CRT. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The signature changes run past the column limit in a few places - the setter callbacks in particular, which grew a return type and a wider info parameter. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A V8 bump rewrites sixty-odd vendored headers, which is most of the file count of any change that includes one and none of what a reviewer is there to read. Marking them generated collapses them in pull request diffs, and vendored keeps them out of the language statistics. Both are display-only - git still tracks and diffs them normally. The file carries no text= or eol= rule on purpose: this repository has mixed line endings and core.autocrlf=false, and adding one would renormalise files nothing to do with the change that added it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Moves the engine to V8 15.6.8, and stops CI depending on a file that was uploaded by hand.
Where the library comes from
The monolith was previously a
v8-libs.zipattached to a release in this repository. Nothing produced it reproducibly, and a rebuilt V8 only reached CI when someone remembered to upload it again.It now comes from v8-static-win, which builds the monolith for 32-bit Windows against the static CRT and publishes all four configurations. The coordinates live in one
envblock per workflow:Moving V8 is those three lines plus the vendored headers, which have to agree with the library or the link fails on changed symbols.
Two deliberate choices:
The source repo is public, so
GH_TOKEN: ${{ github.token }}is enough and no PAT secret is involved. That also keeps the step working in a fork PR, where secrets would not be available.What 15.6.8 required of the bindings
PropertyCallbackInfo::This()Holder()External::New/External::ValueGet/SetAlignedPointerInInternalFieldAccessorNameSetterCallbackAccessorNameSetterCallbackV2, returning throughPropertyCallbackInfo<v8::Boolean>rather thanvoidObject::GetIsolate(),Function::GetIsolate()Consuming the published monolith also needs
/DV8_GN_HEADER- that is how the public headers pick up the bundledv8-gn.hand lay objects out the way the library does, so it is an ABI requirement rather than a convenience - andntdll,userenvandbcrypton the link line, which Rust's standard library pulled in when Temporal brought Rust into the archive.Verification
x86-releasearchive: compiles and links with no further project change, and imports no dynamic CRT (novcruntime/msvcp/msvcr/api-ms-win-crt/ucrtbase), withntdllandbcryptpresent as expected.dependencies/v8/libs/x86-release/v8_monolith.lib, verified 32-bit by its COFF machine type.envcontext is valid in a cache key per GitHub's context-availability table.README.mdis updated to match: where to get the libraries, the toolset floor, and the two compile/link requirements.Note for reviewers
CI never builds Debug, so only the
x86-releaseasset is fetched. A local Debug build still needsx86-debug/v8_monolith.libfrom the matching archive.