name: Pip on: push: branches: [main, master] pull_request: branches: [main, master] workflow_dispatch: jobs: test: name: Test on Python ${{ matrix.python-version }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.12', '3.13'] steps: - name: Checkout code uses: actions/checkout@v5 with: submodules: recursive - name: Verify submodules run: | echo "Checking submodule status:" git submodule status echo "Checking libbpf directory:" ls -la libbpf/ echo "Checking libbpf/src:" ls -la libbpf/src/ || echo "libbpf/src not found!" - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y \ libbpf-dev \ libelf-dev \ zlib1g-dev \ build-essential \ clang \ cmake \ ninja-build \ pkg-config \ git \ make - name: Install Python build dependencies run: | python -m pip install --upgrade pip pip install --upgrade "setuptools>=77.0.0" wheel pip install cmake ninja pybind11 - name: Check build requirements run: | echo "Python version:" python --version echo "CMake version:" cmake --version echo "Ninja version:" ninja --version echo "Setuptools version:" python -c "import setuptools; print(setuptools.__version__)" - name: Build and install pylibbpf (verbose) run: | pip install -v -e . 2>&1 | tee build.log continue-on-error: false - name: Check build output run: | echo "Build directory contents:" find build -type f -name "*.so" 2>/dev/null || echo "No .so files found in build/" echo "" echo "Looking for pylibbpf extension:" find . -name "pylibbpf*.so" -o -name "pylibbpf*.pyd" echo "" echo "Site-packages contents:" python -c "import site; print(site.getsitepackages())" ls -la $(python -c "import site; print(site.getsitepackages()[0])")/pylibbpf/ || echo "pylibbpf not in site-packages" - name: Try importing extension directly run: | python -c " import sys print('Python path:', sys.path) try: from pylibbpf import pylibbpf print('Successfully imported pylibbpf.pylibbpf') print('pylibbpf.pylibbpf members:', dir(pylibbpf)) except ImportError as e: print(f'Failed to import pylibbpf.pylibbpf: {e}') " - name: Verify extension loaded run: | python -c "import pylibbpf; print('Members:', dir(pylibbpf)); assert hasattr(pylibbpf, 'BpfObject'), 'BpfObject not found!'; print('✓ OK')" - name: Install test dependencies if: success() run: | pip install pytest pytest-cov - name: Run tests if: success() run: | python -I -m pytest -v -s --cov=pylibbpf --cov-report=term-missing