Skip to content

upgrade: rebase patch series onto v24.22.0 - #14

Open
gmaclennan wants to merge 4 commits into
recipefrom
upgrade/v24.22.0
Open

gmaclennan wants to merge 4 commits into
recipefrom
upgrade/v24.22.0

Conversation

@gmaclennan

@gmaclennan gmaclennan commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

Re-bases the patch series onto upstream v24.22.0. The recipe reconstructs from a fresh upstream clone at the tree recorded in expected-tree.txt.

Conflicts

  • src/node.cc: see "Upstream changes absorbed" below.
  • README.md: the fork README replaces the upstream remainder, so it resolves to ours.
  • Upstream-CI removal patch: delete/modify on the 30 workflows upstream touched; the intent is still deletion. Two new upstream workflows, author-ready-conflicts.yml and contributor-guidance.yml, are deleted and assigned to that patch in files.map. Upstream deleted commit-lint-problem-matcher.json itself, so its files.map line is gone.

No new static library targets, so the iOS link list is unchanged.

Upstream changes absorbed

v24.22.0 wraps --experimental-wasm-jspi in #if V8_ENABLE_WEBASSEMBLY, and its common.gypi now sets that define on node's own targets when v8_enable_webassembly == 1. Our iOS-only guard is therefore redundant: ios_framework_prepare.sh always passes --v8-lite-mode, configure.py maps that to v8_enable_webassembly=0, so iOS drops the flag while Android keeps WebAssembly and the flag. The hunk is gone from src-mobile-platform-guards-in-node.cc-node_internals.patch, along with the header paragraph that explained it. The iOS boot smoke confirms this chain.

Test changes

Entries below were inferred from reading the test sources unless marked as seen on the full device suite.

Clear-cut skips

Spawns a child node process (both platforms): test-benchmark-compare, test-common-wpt-script-modifier, test-debugger-no-inspect-brk, test-fs-glob-no-follow-symlink-globstar, test-module-unreadable-package-json, test-permission-openssl-store, test-runner-mock-dual-package, test-webcrypto-prototype-pollution, and test-crypto-provider-cache-snapshot (builds a snapshot in a child; seen failing on Android). The new spawning subtest in the existing test-fs-glob.mjs gets an anchored skip (seen failing on Android) rather than skipping the file's ~100 other subtests.

Runs under --permission without --allow-fs-write, so the verdict write is denied (both platforms): test-permission-fs-filehandle-sync, test-permission-linked-binding, test-permission-linked-binding-drop.

iOS lite-mode V8 lacks the flag: test-internal-webidl-buffer-source gained --experimental-wasm-rab-integration in its // Flags: header and fails with bad option (seen on iOS).

Judgement calls

  • test-fs-realpath-stale-stat-values and test-fs-realpath-async-stale-stat-values exec mkfifo, not node. Skipped on both platforms, following the existing mkfifo tests. These are the entries to question first.
  • test-fs-rmSync-special-char-additional-error (new; seen failing on both platforms) expects EACCES except on macOS, where it expects ENOTEMPTY. rmSync uses std::filesystem::remove_all, and both mobile platforms link libc++ as macOS does, so they report ENOTEMPTY too. Fixed with an anchored guard rather than a skip, so the rest of the test still runs.
  • test-debugger-probe-startup-disconnect and test-debugger-wait-for-debugger are left to run on iOS: they drive a mocked inspector client, not a child process. Android's test-debugger-probe-* glob already covers the former.

Failures that may indicate a mobile issue

None outstanding. test-worker-internal-modules gave no verdict on iOS in the first run, which was worth a look because src/node_worker.cc changed worker isolate setup and teardown in this release. It passed on every iOS shard in the second run, so it is treated as a flake and not skipped. Watch for it recurring.

Also guarded: test-sqlite-backup.mjs gained a subtest that spawns node (spawnPromisified(process.execPath)), found by the triage script in #15 rather than by a device run, because the Android shards never reached it.

CI: Android emulator pinned

The Android full-suite shards were killed by a runner shutdown signal about ten minutes in, on every shard in both runs here and also on unchanged recipe (run 38721027963). Every one ran Android emulator 37.2.12; the last completed Android suite (4 September) ran 37.1.11. The ci: commit pins emulator-build: 15917651 (37.1.11) in all three emulator workflows, and with it all four Android shards finished in about 15 minutes. It is independent of the upgrade and can be split into its own PR if preferred.

Verification

  • Reconstruction from a fresh upstream clone prints OK on the recorded hash.
  • audit-test-edits.sh passes.
  • Run 38722825925 is green end to end: every build leg, the curated gate, the full device suite on both platforms, smoke-host and upstream-base.
  • smoke-host compiles node cold on an upstream bump (2h12m here, against about 20 minutes with a warm compiler cache), so it is the last job to finish.

Manual steps

None outstanding: upstream-base already points at v24.22.0.

Skip test-crypto-provider-cache-snapshot (builds a snapshot in a child node) and, on iOS, test-internal-webidl-buffer-source (its new --experimental-wasm-rab-integration flag does not exist in lite-mode V8). Guard the new spawning subtest in test-fs-glob, and expect ENOTEMPTY from rmSync on mobile, where libc++'s std::filesystem::remove_all reports it as on macOS.
Since 37.2.12 the full device suite's Android shards are killed by a runner shutdown signal about ten minutes in, on recipe (run 38721027963) as well as on the v24.22.0 upgrade. 37.1.11 (build 15917651) is the last version that completed the suite.

This branch has not been deployed

No deployments
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