|
23 | 23 | python-version: '3.13' |
24 | 24 |
|
25 | 25 | - name: Install macOS dependencies |
26 | | - uses: ./.github/actions/install-macos-deps |
| 26 | + run: bash build/mac/scripts/install-deps.sh # Install all deps (no --minimal) |
27 | 27 |
|
28 | 28 | - name: Enable TCP stats |
29 | 29 | run: | |
|
38 | 38 | # This matches the configuration used in Makepkgs for darwin |
39 | 39 | ETC=$(realpath /etc) |
40 | 40 | VAR=$(realpath /var) |
41 | | - ./configure --sysconfdir=$ETC --localstatedir=$VAR --prefix=/usr/local --with-qt=no |
| 41 | + # Discover Homebrew Python prefix to install bindings to the right location |
| 42 | + PYTHON_PREFIX=$(python3 -c 'import sys; print(sys.prefix)') |
| 43 | + echo "Python prefix: $PYTHON_PREFIX" |
| 44 | + ./configure --sysconfdir=$ETC --localstatedir=$VAR --prefix=/usr/local --with-python-prefix=$PYTHON_PREFIX --with-qt=no |
42 | 45 |
|
43 | 46 | - name: Build PCP |
44 | 47 | run: | |
|
90 | 93 | - name: Install PCP |
91 | 94 | run: sudo make install |
92 | 95 |
|
| 96 | + - name: Verify Python/Perl bindings installation |
| 97 | + run: | |
| 98 | + echo "=== Phase 2 Verification: Python/Perl Bindings ===" |
| 99 | + echo "Python search paths:" |
| 100 | + python3 -c "import sys; print('\n'.join(sys.path))" |
| 101 | + echo "" |
| 102 | + echo "Perl @INC paths:" |
| 103 | + perl -e 'print join("\n", @INC), "\n"' |
| 104 | + echo "" |
| 105 | + echo "Testing Python pcp.pmapi import..." |
| 106 | + python3 -c "from pcp import pmapi; print('✓ Python pcp.pmapi OK')" || { |
| 107 | + echo "✗ Python pcp.pmapi FAILED - checking installation location" |
| 108 | + find /usr/local/lib -name "pmapi.py" 2>/dev/null || echo "pmapi.py not found in /usr/local/lib" |
| 109 | + PYTHON_PREFIX=$(python3 -c 'import sys; print(sys.prefix)') |
| 110 | + find "$PYTHON_PREFIX/lib" -name "pmapi.py" 2>/dev/null || echo "pmapi.py not found in $PYTHON_PREFIX/lib either" |
| 111 | + # Set PYTHONPATH as fallback |
| 112 | + PY_VER=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")') |
| 113 | + export PYTHONPATH="/usr/local/lib/python${PY_VER}/site-packages:${PYTHONPATH:-}" |
| 114 | + echo "Setting PYTHONPATH=$PYTHONPATH as fallback" |
| 115 | + echo "PYTHONPATH=$PYTHONPATH" >> $GITHUB_ENV |
| 116 | + } |
| 117 | + echo "" |
| 118 | + echo "Testing Perl PCP::PMDA module..." |
| 119 | + perl -e "use PCP::PMDA; print '✓ Perl PCP::PMDA OK\n'" || { |
| 120 | + echo "✗ Perl PCP::PMDA FAILED - setting PERL5LIB" |
| 121 | + export PERL5LIB="/usr/local/lib/perl5/site_perl:/usr/local/lib/perl5/vendor_perl:${PERL5LIB:-}" |
| 122 | + echo "PERL5LIB=$PERL5LIB" >> $GITHUB_ENV |
| 123 | + } |
| 124 | +
|
93 | 125 | - name: Rebuild PMNS |
94 | 126 | run: | |
95 | 127 | echo "Building PMNS root file from installed PMDA namespaces..." |
@@ -347,6 +379,45 @@ jobs: |
347 | 379 | ./exercise -? 2>&1 | head -3 && echo "✓ Rebuilt binary works!" |
348 | 380 | fi |
349 | 381 |
|
| 382 | + - name: Verify rpath in test binaries |
| 383 | + run: | |
| 384 | + echo "=== Phase 1 Verification: Test Binary rpath ===" |
| 385 | + echo "Checking torture_cache binary..." |
| 386 | + otool -L /var/lib/pcp/testsuite/src/torture_cache | grep libpcp || echo "ERROR: No libpcp reference found" |
| 387 | + echo "" |
| 388 | + echo "Checking LC_RPATH load command..." |
| 389 | + otool -l /var/lib/pcp/testsuite/src/torture_cache | grep -A2 LC_RPATH || echo "ERROR: No LC_RPATH found" |
| 390 | + echo "" |
| 391 | + echo "Expected: Should show /usr/local/lib/libpcp.4.dylib and LC_RPATH with path /usr/local/lib" |
| 392 | +
|
| 393 | + - name: Fix PCP runtime directory permissions |
| 394 | + run: | |
| 395 | + echo "=== Fixing PCP runtime directory permissions for pcpqa ===" |
| 396 | + . /etc/pcp.conf |
| 397 | + sudo chown -R pcpqa:staff $PCP_RUN_DIR |
| 398 | + sudo chmod -R 755 $PCP_RUN_DIR |
| 399 | + echo "✓ Permissions fixed" |
| 400 | + ls -ld $PCP_RUN_DIR |
| 401 | + # Ensure user home directory exists for .pcp/run |
| 402 | + sudo mkdir -p /Users/runner/.pcp/run |
| 403 | + sudo chown -R runner:staff /Users/runner/.pcp |
| 404 | + echo "✓ User .pcp directory configured" |
| 405 | +
|
| 406 | + - name: Verify environment configuration |
| 407 | + run: | |
| 408 | + echo "=== Phase 3 Verification: Environment ===" |
| 409 | + echo "TERM=${TERM:-<not set>}" |
| 410 | + echo "PYTHONPATH=${PYTHONPATH:-<not set>}" |
| 411 | + echo "PERL5LIB=${PERL5LIB:-<not set>}" |
| 412 | + echo "" |
| 413 | + echo "PCP runtime directory permissions:" |
| 414 | + . /etc/pcp.conf |
| 415 | + ls -ld $PCP_RUN_DIR |
| 416 | + ls -l $PCP_RUN_DIR | head -10 || echo "Directory empty" |
| 417 | + echo "" |
| 418 | + echo "pcpqa user home directory:" |
| 419 | + ls -ld /Users/runner/.pcp 2>/dev/null || echo "/Users/runner/.pcp does not exist" |
| 420 | +
|
350 | 421 | - name: Debug testsuite state before QA |
351 | 422 | run: | |
352 | 423 | echo "==========================================" |
@@ -436,8 +507,10 @@ jobs: |
436 | 507 | - name: Run QA sanity tests |
437 | 508 | env: |
438 | 509 | MAKEFLAGS: "" # Force serial make - no parallelism |
| 510 | + TERM: xterm-256color # Fix terminal errors in test output |
439 | 511 | run: | |
440 | 512 | cd /var/lib/pcp/testsuite |
| 513 | + export TERM=xterm-256color # Ensure TERM is set for subprocesses |
441 | 514 |
|
442 | 515 | # If localconfig doesn't exist, make setup will run |
443 | 516 | # Capture its output explicitly |
|
0 commit comments