Skip to content

Commit 3ec9b87

Browse files
committed
Try removing patchelf dependency
1 parent a03e0e8 commit 3ec9b87

File tree

10 files changed

+778
-72
lines changed

10 files changed

+778
-72
lines changed

.github/workflows/CI.yml

Lines changed: 32 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,13 @@ jobs:
147147
run: ${{ matrix.settings.build }}
148148
if: ${{ !matrix.settings.docker }}
149149
shell: bash
150+
- name: build wasm
151+
run: |
152+
rustup target add wasm32-wasip1
153+
cargo build --package fix-python-soname --target wasm32-wasip1 --release
154+
cp target/wasm32-wasip1/release/fix-python-soname.wasm .
155+
if: contains(matrix.settings.target, 'linux')
156+
shell: bash
150157
- name: Upload artifact
151158
uses: actions/upload-artifact@v4
152159
with:
@@ -155,6 +162,8 @@ jobs:
155162
${{ env.APP_NAME }}.*.node
156163
index.d.ts
157164
index.js
165+
fix-python-soname.wasm
166+
fix-python-soname.js
158167
if-no-files-found: error
159168

160169
test-macOS-windows-binding:
@@ -332,79 +341,11 @@ jobs:
332341
apt-get update -y
333342
apt-get install -y python3 python3-dev patchelf
334343
335-
echo "=== Starting test setup ==="
336-
echo "Current directory: $(pwd)"
337-
echo "Python version: $(python3 --version)"
338-
echo "Patchelf version: $(patchelf --version)"
339-
echo "Using combined approach: SONAME patching + programmatic RTLD_GLOBAL"
340-
echo "CI environment: CI=$CI, GITHUB_ACTIONS=$GITHUB_ACTIONS"
341-
342-
# Check what .node files exist
343-
echo "=== Available .node files ==="
344-
ls -la *.node || echo "No .node files found"
345-
346-
# Check what .node files exist and patch Python dependencies
347-
echo "=== Checking .node file Python dependencies ==="
348-
for file in *.node; do
349-
if [ -f "$file" ]; then
350-
case "$file" in
351-
*linux*)
352-
echo "Checking $file..."
353-
echo "Python dependencies before patching:"
354-
ldd "$file" 2>/dev/null | grep python || echo "No Python dependencies found"
355-
356-
# Check if we need to patch SONAME
357-
current_python_lib=$(ldd "$file" 2>/dev/null | grep "libpython" | head -1 | awk '{print $1}')
358-
if [ -n "$current_python_lib" ]; then
359-
echo "Current Python library: $current_python_lib"
360-
361-
# Find the actual Python library on the system
362-
system_python_lib=$(find /usr/lib* -name "libpython3*.so.*" -type f 2>/dev/null | head -1)
363-
if [ -n "$system_python_lib" ]; then
364-
system_python_soname=$(basename "$system_python_lib")
365-
echo "System Python library: $system_python_soname"
366-
367-
# Only patch if they're different
368-
if [ "$current_python_lib" != "$system_python_soname" ]; then
369-
echo "Patching SONAME from $current_python_lib to $system_python_soname"
370-
patchelf --replace-needed "$current_python_lib" "$system_python_soname" "$file"
371-
echo "SONAME patching completed"
372-
else
373-
echo "SONAME already matches system Python"
374-
fi
375-
else
376-
echo "Warning: Could not find system Python library"
377-
fi
378-
else
379-
echo "No Python library dependency found"
380-
fi
381-
382-
echo "Python dependencies after patching:"
383-
ldd "$file" 2>/dev/null | grep python || echo "No Python dependencies found"
384-
echo "---"
385-
;;
386-
*)
387-
echo "Skipping non-Linux file: $file"
388-
;;
389-
esac
390-
fi
391-
done
392-
393-
# Install pnpm and run tests
394-
echo "=== Installing pnpm ==="
395344
corepack disable
396345
npm i -gf pnpm
397-
398-
echo "=== Running pnpm install ==="
399-
# Should be non-interactive in CI environment
400346
pnpm install --prefer-offline
401-
402-
echo "=== Setting up Python library path ==="
403-
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
404-
echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH"
405-
406-
407-
echo "=== Running tests ==="
347+
# Run soname fix directly. Release builds will do this automatically on install.
348+
node fix-python-soname.js
408349
pnpm test
409350
410351
publish:
@@ -430,6 +371,27 @@ jobs:
430371
path: artifacts
431372
- name: Move artifacts
432373
run: pnpm artifacts
374+
- name: Copy fix-python-soname files to Linux packages
375+
run: |
376+
# Find the WASM and JS files from Linux artifacts
377+
WASM_FILE=$(find artifacts -name "fix-python-soname.wasm" | head -n 1)
378+
JS_FILE=$(find artifacts -name "fix-python-soname.js" | head -n 1)
379+
380+
if [ -n "$WASM_FILE" ] && [ -n "$JS_FILE" ]; then
381+
echo "Found WASM file: $WASM_FILE"
382+
echo "Found JS file: $JS_FILE"
383+
384+
# Copy to all Linux npm directories
385+
for dir in npm/*/; do
386+
if [[ "$dir" == *"linux"* ]]; then
387+
echo "Copying files to $dir"
388+
cp "$WASM_FILE" "$dir"
389+
cp "$JS_FILE" "$dir"
390+
fi
391+
done
392+
else
393+
echo "Warning: fix-python-soname files not found in artifacts"
394+
fi
433395
- name: List packages
434396
run: ls -R ./npm
435397
shell: bash

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,5 +199,6 @@ $RECYCLE.BIN/
199199
# Build/Install files
200200
/target
201201
/*.node
202+
/*.wasm
202203
/index.d.ts
203204
/index.js

0 commit comments

Comments
 (0)