fix: isolate cross-platform native dependency install

This commit is contained in:
Armin Ronacher 2026-08-06 12:38:51 +02:00
parent 38e8f28113
commit 95a6aa7bd0

View file

@ -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