From 95a6aa7bd02f37b19a4b19db7e134b07413b0bf3 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Thu, 6 Aug 2026 12:38:51 +0200 Subject: [PATCH] fix: isolate cross-platform native dependency install --- scripts/build-binaries.sh | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/scripts/build-binaries.sh b/scripts/build-binaries.sh index bae8705f8..702f7d97c 100755 --- a/scripts/build-binaries.sh +++ b/scripts/build-binaries.sh @@ -97,11 +97,17 @@ fi if [[ "$SKIP_DEPS" == "false" ]]; then echo "==> Installing cross-platform native bindings..." CLIPBOARD_VERSION=$(node -p "require('./packages/coding-agent/package.json').optionalDependencies['@mariozechner/clipboard']") - # npm ci only installs optional deps for the current platform - # We need the base clipboard package and all platform bindings for bun cross-compilation - # Use --force to bypass platform checks (os/cpu restrictions in package.json) - # Install all in one command to avoid npm removing packages from previous installs - npm install --include=optional --no-save --package-lock=false --force --ignore-scripts \ + # npm ci only installs optional deps for the current platform. Install the + # cross-platform packages in isolation so npm does not re-resolve and mutate + # the workspace dependency graph, which can trigger npm/arborist failures. + NATIVE_DEPS_DIR=$(mktemp -d) + cleanup_native_deps() { + rm -rf "$NATIVE_DEPS_DIR" + } + trap cleanup_native_deps EXIT + printf '%s\n' '{"private":true}' > "$NATIVE_DEPS_DIR/package.json" + # Use --force to bypass platform checks (os/cpu restrictions in package.json). + npm install --prefix "$NATIVE_DEPS_DIR" --include=optional --no-save --package-lock=false --force --ignore-scripts \ @mariozechner/clipboard@"$CLIPBOARD_VERSION" \ @mariozechner/clipboard-darwin-arm64@"$CLIPBOARD_VERSION" \ @mariozechner/clipboard-darwin-x64@"$CLIPBOARD_VERSION" \ @@ -109,6 +115,20 @@ if [[ "$SKIP_DEPS" == "false" ]]; then @mariozechner/clipboard-linux-arm64-gnu@"$CLIPBOARD_VERSION" \ @mariozechner/clipboard-win32-x64-msvc@"$CLIPBOARD_VERSION" \ @mariozechner/clipboard-win32-arm64-msvc@"$CLIPBOARD_VERSION" + mkdir -p node_modules/@mariozechner + for package in \ + clipboard \ + clipboard-darwin-arm64 \ + clipboard-darwin-x64 \ + clipboard-linux-x64-gnu \ + clipboard-linux-arm64-gnu \ + clipboard-win32-x64-msvc \ + clipboard-win32-arm64-msvc; do + rm -rf "node_modules/@mariozechner/$package" + cp -R "$NATIVE_DEPS_DIR/node_modules/@mariozechner/$package" node_modules/@mariozechner/ + done + cleanup_native_deps + trap - EXIT else echo "==> Skipping cross-platform native bindings (--skip-deps)" fi