Skip to content

CI: Customize v8 building#22086

Open
cconger wants to merge 17 commits into
mainfrom
release/rusty-v8-147-artifacts
Open

CI: Customize v8 building#22086
cconger wants to merge 17 commits into
mainfrom
release/rusty-v8-147-artifacts

Conversation

@cconger
Copy link
Copy Markdown
Contributor

@cconger cconger commented May 11, 2026

Summary

Move the rusty_v8 artifact production into hermetic Bazel path and bump the v8 crate to 147.4.0

The new flow builds V8 release artifacts from source for Darwin and Linux targets, publishes both the current release-compatible artifacts and sandbox-enabled variants, and keeps Cargo consumers on prebuilt binaries by continuing to feed the v8 crate the archive and generated binding files it already expects.

Why

We need control over V8 build-time features without giving up prebuilt artifacts for downstream Cargo builds.

Upstream rusty_v8 already supports source-only features such as v8_enable_sandbox, but its normal prebuilt release assets do not cover every feature combination we need. Building the artifacts ourselves lets us enable settings such as the V8 sandbox and pointer compression at artifact build time, then publish those outputs so ordinary Cargo builds can still consume prebuilts instead of compiling V8 locally.

This keeps the fast consumer experience of prebuilt rusty_v8 archives while giving us a reproducible path to ship featureful variants that upstream does not currently publish for us.

Implementation Notes

The Bazel graph in this PR is not copied wholesale from rusty_v8; rusty_v8's normal source build is still GN/Ninja-based.

Instead, this change starts from upstream V8's Bazel rules and adapts them to Codex's hermetic toolchains and dependency layout. Where we intentionally follow rusty_v8, we mirror its existing artifact contract:

  • the same v8 crate version and generated binding expectations
  • the same sandbox feature relationship, where sandboxing requires pointer compression
  • the same custom libc++ model expected by Cargo's default use_custom_libcxx feature
  • the same release-style archive plus src_binding outputs consumed by the v8 crate

To preserve that contract, the Bazel release path pins the libc++, libc++abi, and llvm-libc revisions used by rusty_v8 v147.4.0, builds release artifacts with --config=rusty-v8-upstream-libcxx, and folds the matching runtime objects into the final static archive.

Windows

Windows is annoyingly handled differently.

Codex's current hermetic Bazel Windows C++ platform is windows-gnullvm / x86_64-w64-windows-gnu, while upstream rusty_v8 publishes Windows prebuilts for *-pc-windows-msvc. Those are different ABIs, so the Bazel graph cannot truthfully reproduce the upstream MSVC artifacts until we add a real MSVC-targeting C++ toolchain.

For now:

  • Windows MSVC consumers continue to use upstream rusty_v8 release archives.
  • Windows GNU targets are built in-tree so they link against a matching GNU ABI.
  • The canary workflow separately exercises upstream rusty_v8 source builds for MSVC sandbox artifacts, but MSVC is not yet part of the Bazel-produced release matrix.

Validation

This PR is technically self validating through CI. I have already published it as a release tag so the artifacts from this branch are published to https://github.com/openai/codex/releases/tag/rusty-v8-v147.4.0 CI for this PR should therefore consume our own release targets. I have also locally tested for linux and darwin.

cconger and others added 15 commits May 10, 2026 18:44
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Produce explicitly named sandbox release pairs alongside the current compatibility artifacts, and validate staged sandbox outputs before publication across the supported artifact targets.

Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Keep non-Windows rusty-v8 consumers on the resolved 147.4.0 source-built graph. Avoid mixing LLVM's default libc++ headers into rusty-v8's custom libc++ build, propagate that configuration to external C++ deps, and export the musl-specific libc++ define through the shared header target.

Also make checksum validation follow the remaining prebuilt asset version while the source-build migration is in progress.

Co-authored-by: Codex <noreply@openai.com>
@cconger cconger requested a review from bolinfest May 11, 2026 03:00
Copy link
Copy Markdown
Contributor

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1cf09e4acf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread third_party/v8/rusty_v8_147_4_0.sha256
Comment thread .bazelrc
cconger added 2 commits May 11, 2026 03:54
Add the `crdtp_binding.cc` source and CRDTP headers to the 147 Bazel V8
binding target so Windows GNU builds provide the symbols required by the
`v8::crdtp` Rust APIs.

Add a regression test that exercises CRDTP JSON conversion and dispatchable
message parsing.
Fetch the published per-target checksum asset alongside the musl archive and binding so Cargo musl jobs keep working without re-expanding the MODULE.bazel checksum manifest contract.
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