chore: bump deno_core 0.368.0 → 0.412.0 (v8 142.1.0 → 150.4.0) - #10
Merged
Merged
Conversation
API migrations: - op2 macro: bare async flag removed; eager async ops returning Result<impl Future> are now declared with plain #[op2] - PollEventLoopOptions: pump_v8_message_loop field removed - InspectorSessionProxy: tx/rx moved into InspectorSessionChannels::Regular Behavioral change: deno_core now captures a tokio runtime handle at isolate creation to honor delayed V8 foreground tasks (GC memory reducer), aborting the process when one is posted without a handle. Create the runtime-thread isolate inside tokio_rt.enter(), and give SnapshotBuilder its own tokio runtime kept alive alongside the snapshot isolate.
Builds rusty_v8 from source inside the existing manylinux_2_28 builder
containers on free GitHub runners (x86_64 native, aarch64 cross) and
publishes librusty_v8_release_{target}.a.gz + src_binding_release_
{target}.rs as assets on a librusty_v8-v{version} prerelease.
This only needs to run when the v8 version in Cargo.lock changes;
wheel CI will consume the archives via RUSTY_V8_ARCHIVE /
RUSTY_V8_SRC_BINDING_PATH in a follow-up, removing the per-release
V8 compile and the GCP runner provisioning.
Why from source at all: denoland's prebuilt archives require
glibc >= 2.30 (pthread_cond_clockwait) while manylinux_2_28 wheels
must link against glibc 2.28.
This was referenced Oct 1, 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.
Summary
Two related changes:
deno_coreacross 44 releases (0.368.0 → 0.412.0), moving V8 from 142.1.0 to 150.4.0.Build V8 archiveworkflow (workflow_dispatch-only) that prebuilds rusty_v8 from source and publishes it as release assets — so after this merges, the archive for v150.4.0 can be built once and reused by all future wheel builds.deno_core API migrations
#[op2(async)]flag was removed upstream (async(...)now requires an explicitlazy/deferred/fakemode). Our async ops returnResult<impl Future>, which the macro now auto-detects as eager async — declared with plain#[op2].PollEventLoopOptions:pump_v8_message_loopfield removed (pumping is unconditional now).InspectorSessionProxy:tx/rxmoved into the newInspectorSessionChannels::Regularvariant.The dependency graph now goes through the new
deno_v8wrapper crate, but the underlyingv8(rusty_v8) crate and its build script are unchanged.Behavioral fix (caught by tests)
deno_core now captures a tokio runtime handle at isolate creation to honor delayed V8 foreground tasks (e.g. GC memory-reducer tasks) and aborts the process if such a task is posted from an isolate created outside a tokio context.
tests/test_runtime.py::test_sync_eval_triggers_heap_terminationreproduced the abort reliably under heap pressure.Fixes:
spawn_runtime_threadnow createsRuntimeCoreState(and thus theJsRuntime) inside a scopedtokio_rt.enter()guard.SnapshotBuildergets its own current-thread tokio runtime, entered duringJsRuntimeForSnapshotcreation and kept alive alongside the isolate.V8 archive workflow
.github/workflows/build-v8-archive.yml+.github/scripts/build-v8-archive.sh:ubuntu-latest: x86_64 builds natively, aarch64 cross-compiles via the existingDockerfile.aarch64).Cargo.lock, so it stays in sync with bumps like this one).librusty_v8_release_{target}.a.gz+src_binding_release_{target}.rsto a prerelease taggedlibrusty_v8-v{version}(deliberately not matching thev*pattern that triggers release CI).Why from source at all: denoland's prebuilt archives require glibc ≥ 2.30 (
pthread_cond_clockwait), while manylinux_2_28 wheels must link against glibc 2.28.A follow-up PR will switch wheel CI to consume these archives via
RUSTY_V8_ARCHIVE/RUSTY_V8_SRC_BINDING_PATH, removing the per-release V8 compile and the GCP spot-VM provisioning.Testing
Full Python suite passes locally: 291 tests.
cargo fmtandclippyclean (aside from the pre-existingresult_large_errwarning). The archive workflow itself needs a trial dispatch after merge — expected ~2.5–4h per arch on free runners; if V8 150.x needs a newer clang than the containers' clang-19, that run will surface it.Suggested sequencing
Build V8 archivefrom main → publisheslibrusty_v8-v150.4.0.