@@ -326,15 +326,85 @@ jobs:
326326 uses : addnab/docker-run-action@v3
327327 with :
328328 image : ${{ steps.docker.outputs.IMAGE }}
329- options : -v ${{ steps.docker.outputs.PNPM_STORE_PATH }}:${{ steps.docker.outputs.PNPM_STORE_PATH }} -v ${{ github.workspace }}:${{ github.workspace }} -w ${{ github.workspace }} --platform ${{ steps.docker.outputs.PLATFORM }}
329+ options : -v ${{ steps.docker.outputs.PNPM_STORE_PATH }}:${{ steps.docker.outputs.PNPM_STORE_PATH }} -v ${{ github.workspace }}:${{ github.workspace }} -w ${{ github.workspace }} --platform ${{ steps.docker.outputs.PLATFORM }} -e CI=true -e GITHUB_ACTIONS=true
330330 run : |
331- # Install Python 3.9+ (any version will work with abi3-py39)
331+ # Install Python 3.x
332332 apt-get update -y
333- apt-get install -y python3 python3-dev
333+ apt-get install -y python3 python3-dev patchelf
334+
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
334392
335393 # Install pnpm and run tests
394+ echo "=== Installing pnpm ==="
336395 corepack disable
337396 npm i -gf pnpm
397+
398+ echo "=== Running pnpm install ==="
399+ # Should be non-interactive in CI environment
400+ 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 ==="
338408 pnpm test
339409
340410 publish :
0 commit comments