Files
scriptc/.github/actions/libnode-dev-pack/action.yml
T
Malte UblandClaude Opus 5.5 df869f28b0 Run Node islands on macOS, and test them in the macOS CI lanes
macOS binds libnode's own calls to v8::base::Stack inside libnode, so the
bridge's definitions cannot give V8 Node's stack as they do on Linux; V8
took the main thread's stack start and its conservative scan faulted in
the gap above Node's stack. While Node starts on its stack, the main
thread's pthread record now names that stack, which V8 reads once and
keeps.

macOS's makecontext clears the whole stack it is given, so it gets only
the top slice of Node's stack (no 64 MiB pass per context).

CI: dev-pack.json pins mirrored darwin-arm64 and darwin-x64 libnode
builds of the pinned Node 24.22.0 from the libnode-packs workflow, the
dev-pack action serves either platform, and the macOS lanes provision it,
so island tests fail rather than skip on macOS CI. The arm64 LLVM job
runs the island harness; the Intel job runs it and the island corpus.
bridge-smoke loads the .dylib bridge on macOS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 12:50:38 -07:00

32 lines
1.6 KiB
YAML

name: libnode development pack (Linux x64, macOS)
description: >-
Provide a libnode pack for the Node island tests and export
SCRIPTC_LIBNODE: restored from the cache, or on a miss assembled from the
pinned, checksum-verified inputs in packages/libnode-common/dev-pack.json
for the runner's platform (a prebuilt libnode and Node's headers; the
bridge builds in seconds). Temporary until the NI-13 packs exist. Fails
the job if no pack results: the island tests must never skip in CI.
runs:
using: composite
steps:
- name: Name the runner's platform
id: platform
shell: bash
run: node -p '`name=${process.platform}-${process.arch}`' >> "$GITHUB_OUTPUT"
- uses: actions/cache@v4
id: libnode
with:
path: ${{ runner.temp }}/libnode-dev-pack
key: libnode-dev-pack-${{ steps.platform.outputs.name }}-${{ hashFiles('packages/libnode-common/dev-pack.json', 'packages/libnode-common/build-pack.mjs', 'packages/libnode-common/fetch-dev-pack.mjs', 'packages/libnode-common/bridge/**', 'packages/runtime/src/scr_node_bridge.h') }}
- name: Assemble the libnode pack
if: steps.libnode.outputs.cache-hit != 'true'
shell: bash
run: node packages/libnode-common/fetch-dev-pack.mjs --out "$RUNNER_TEMP/libnode-dev-pack"
- name: Export SCRIPTC_LIBNODE
shell: bash
run: |
case "$RUNNER_OS" in macOS) bridge=libscr_node_bridge.dylib ;; *) bridge=libscr_node_bridge.so ;; esac
test -f "$RUNNER_TEMP/libnode-dev-pack/manifest.json"
test -f "$RUNNER_TEMP/libnode-dev-pack/$bridge"
echo "SCRIPTC_LIBNODE=$RUNNER_TEMP/libnode-dev-pack" >> "$GITHUB_ENV"