name: Tests on: push: branches: - dev paths: - '**' - '!mkdocs.yml' - '!docs/**' - '!*.md' pull_request: paths: - '**' - '!mkdocs.yml' - '!docs/**' - '!*.md' jobs: tests-using-nix: strategy: fail-fast: false matrix: os: [ubuntu-24.04] type: [qemu-user-tests, qemu-system-tests, tests] runs-on: ${{ matrix.os }} timeout-minutes: 40 env: TMPDIR: /tmp PWNDBG_VENV_PATH: PWNDBG_PLEASE_SKIP_VENV steps: - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v3 - uses: cachix/install-nix-action@08dcb3a5e62fa31e2da3d490afc4176ef55ecd72 # @v30 with: nix_path: nixpkgs=channel:nixos-unstable - name: Install dependencies run: | ./setup-dev.sh --install-only - name: Build pwndbg run: | nix build '.#pwndbg-dev' --accept-flake-config -o result # We set `kernel.yama.ptrace_scope=0` for `attachp` command tests - name: Setup run: | sudo sysctl -w kernel.yama.ptrace_scope=0 mkdir .cov - name: Run tests if: matrix.type == 'tests' run: | ./tests.sh --nix --cov - name: Run cross-arch tests if: matrix.type == 'qemu-user-tests' run: | ./crossarch-tests.sh --nix --cov - name: Set up cache for QEMU images if: matrix.type == 'qemu-system-tests' id: qemu-cache uses: actions/cache@v3 with: path: ./tests/qemu-tests/kimages key: ${{ matrix.os }}-cache-qemu-images - name: Download QEMU images if: matrix.type == 'qemu-system-tests' run: | # Would happen in the next step as well, but this way # it looks nicer in the CI. ./tests/qemu-tests/download-kernel-images.sh - name: Run kernel tests if: matrix.type == 'qemu-system-tests' run: | ./kernel-tests.sh --nix --cov tests: strategy: fail-fast: false matrix: os: [ubuntu-24.04, ubuntu-22.04] runs-on: ${{ matrix.os }} timeout-minutes: 20 steps: - uses: actions/checkout@v4 - name: Cache for pip uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ matrix.os }}-cache-pip - name: Setup pwndbg run: | ./setup.sh ./setup-dev.sh - name: Python version info run: | echo 'GDB py:' gdb --batch --quiet --nx --nh --ex 'py import sys; print(sys.version)' echo 'Installed py:' ./.venv/bin/python -V echo 'Installed packages:' ./.venv/bin/pip freeze # We set `kernel.yama.ptrace_scope=0` for `attachp` command tests - name: Run tests run: | mkdir .cov sudo sysctl -w kernel.yama.ptrace_scope=0 ./tests.sh --cov ./unit-tests.sh --cov - name: Process coverage data if: matrix.os == 'ubuntu-22.04' run: | ./.venv/bin/uv run --group tests coverage combine ./.venv/bin/uv run --group tests coverage xml - name: "Upload coverage to Codecov" if: matrix.os == 'ubuntu-22.04' uses: codecov/codecov-action@v3 qemu-user-tests: runs-on: [ubuntu-24.04] timeout-minutes: 20 steps: - uses: actions/checkout@v4 - name: Cache for pip uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ matrix.os }}-cache-pip - name: Setup pwndbg run: | ./setup.sh ./setup-dev.sh mkdir .cov - name: Run cross-architecture tests run: | ./crossarch-tests.sh --cov - name: Process coverage data run: | ./.venv/bin/uv run --group tests coverage combine ./.venv/bin/uv run --group tests coverage xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 qemu-system-tests: runs-on: [ubuntu-22.04] timeout-minutes: 30 steps: - uses: actions/checkout@v4 - name: Cache for pip uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ matrix.os }}-cache-pip - name: Setup pwndbg run: | ./setup.sh ./setup-dev.sh mkdir .cov - name: Set up cache for QEMU images id: qemu-cache uses: actions/cache@v3 with: path: ./tests/qemu-tests/kimages key: ${{ matrix.os }}-cache-qemu-images - name: Download images run: | ./tests/qemu-tests/download-kernel-images.sh # We set `kernel.yama.ptrace_scope=0` for `gdb-pt-dump` - name: Run kernel tests run: | sudo sysctl -w kernel.yama.ptrace_scope=0 ./kernel-tests.sh --cov - name: Process coverage data run: | ./.venv/bin/uv run --group tests coverage combine ./.venv/bin/uv run --group tests coverage xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v3