diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 62c890d50..0691f7b06 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -2,10 +2,10 @@ name: Test Docker on: pull_request: paths: - - '**' - - '!mkdocs.yml' - - '!docs/**' - - '!*.md' + - "**" + - "!mkdocs.yml" + - "!docs/**" + - "!*.md" jobs: docker_x86-64: @@ -17,29 +17,29 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 30 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - - name: Cache for docker images - uses: jpribyl/action-docker-layer-caching@v0.1.1 - # Ignore the failure of a step and avoid terminating the job. - continue-on-error: true - with: - key: ${{ matrix.images }}-cache-images-{hash} + - name: Cache for docker images + uses: jpribyl/action-docker-layer-caching@v0.1.1 + # Ignore the failure of a step and avoid terminating the job. + continue-on-error: true + with: + key: ${{ matrix.images }}-cache-images-{hash} - - name: Docker Build ${{ matrix.images }} - run: docker compose build ${{ matrix.images }} + - name: Docker Build ${{ matrix.images }} + run: docker compose build ${{ matrix.images }} - - name: Run GDB Tests on ${{ matrix.images }} - run: | - docker compose run ${{ matrix.images }} ./tests.sh -d gdb -g gdb - - - name: Run DBG Tests on GDB on ${{ matrix.images }} - run: | - docker compose run ${{ matrix.images }} ./tests.sh -d gdb -g dbg + - name: Run GDB Tests on ${{ matrix.images }} + run: | + docker compose run ${{ matrix.images }} ./tests.sh -d gdb -g gdb - - name: Run DBG Tests on LLDB on ${{ matrix.images }} - run: | - docker compose run ${{ matrix.images }} ./tests.sh -d lldb -g dbg + - name: Run DBG Tests on GDB on ${{ matrix.images }} + run: | + docker compose run ${{ matrix.images }} ./tests.sh -d gdb -g dbg + + - name: Run DBG Tests on LLDB on ${{ matrix.images }} + run: | + docker compose run ${{ matrix.images }} ./tests.sh -d lldb -g dbg docker_aarch64: strategy: @@ -50,26 +50,26 @@ jobs: runs-on: ubuntu-24.04-arm timeout-minutes: 30 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - - name: Cache for docker images - uses: jpribyl/action-docker-layer-caching@v0.1.1 - # Ignore the failure of a step and avoid terminating the job. - continue-on-error: true - with: - key: ${{ matrix.images }}-cache-images-aarch64-{hash} + - name: Cache for docker images + uses: jpribyl/action-docker-layer-caching@v0.1.1 + # Ignore the failure of a step and avoid terminating the job. + continue-on-error: true + with: + key: ${{ matrix.images }}-cache-images-aarch64-{hash} - - name: Docker Build ${{ matrix.images }} - run: docker compose build ${{ matrix.images }} + - name: Docker Build ${{ matrix.images }} + run: docker compose build ${{ matrix.images }} - - name: Run Cross Tests on GDB on ${{ matrix.images }} - run: | - docker compose run ${{ matrix.images }} ./tests.sh -d gdb -g cross-arch-user + - name: Run Cross Tests on GDB on ${{ matrix.images }} + run: | + docker compose run ${{ matrix.images }} ./tests.sh -d gdb -g cross-arch-user - - name: Run DBG Tests on GDB on ${{ matrix.images }} - run: | - docker compose run ${{ matrix.images }} ./tests.sh -d gdb -g dbg + - name: Run DBG Tests on GDB on ${{ matrix.images }} + run: | + docker compose run ${{ matrix.images }} ./tests.sh -d gdb -g dbg - - name: Run DBG Tests on LLDB on ${{ matrix.images }} - run: | - docker compose run ${{ matrix.images }} ./tests.sh -d lldb -g dbg + - name: Run DBG Tests on LLDB on ${{ matrix.images }} + run: | + docker compose run ${{ matrix.images }} ./tests.sh -d lldb -g dbg diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 69aa46b92..c2e62bb2d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -2,10 +2,10 @@ name: Lint on: pull_request: paths: - - '**' - - '!mkdocs.yml' - - '!docs/**' - - '!*.md' + - "**" + - "!mkdocs.yml" + - "!docs/**" + - "!*.md" jobs: lint: @@ -16,42 +16,88 @@ jobs: runs-on: ${{ matrix.os }} timeout-minutes: 10 steps: - - uses: actions/checkout@v4 - - - name: Cache for pip - uses: actions/cache@v3 - with: - path: ~/.cache/pip - key: ${{ matrix.os }}-cache-pip - - - name: Install latest uv - uses: astral-sh/setup-uv@v6 - with: - version: "latest" - - - name: Install dependencies - run: | - sudo apt install -y shfmt curl - uv sync --group lint --group dev - - - name: Run linters - run: | - git diff-index --quiet HEAD -- pwndbg tests - ./lint.sh - - - name: Run mypy - uses: tsuyoshicho/action-mypy@v4 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - # Change reviewdog reporter if you need [github-pr-check,github-check,github-pr-review]. - reporter: github-pr-check - # Change reporter level if you need. - # GitHub Status Check won't become failure with warning. - level: error - # Change the current directory to run mypy command. - # mypy command reads setup.cfg or other settings file in this path. - execute_command: uv run --group dev --group lint --group tests --extra gdb --extra lldb mypy - install_types: false - target: pwndbg pwndbginit tests/host - filter_mode: nofilter - fail_on_error: true + - uses: actions/checkout@v4 + + - name: Cache for pip + uses: actions/cache@v3 + with: + path: ~/.cache/pip + key: ${{ matrix.os }}-cache-pip + + - name: Install latest uv + uses: astral-sh/setup-uv@v6 + with: + version: "latest" + + - name: Install dependencies + run: | + sudo apt install -y shfmt curl + uv sync --group lint --group dev + + - name: Run linters + run: | + git diff-index --quiet HEAD -- pwndbg tests + ./lint.sh + + # The PR must not contain any mypy errors + - name: Run mypy + uses: tsuyoshicho/action-mypy@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + # Change reviewdog reporter if you need [github-pr-check,github-check,github-pr-review]. + reporter: github-pr-check + # Change reporter level if you need. + # GitHub Status Check won't become failure with warning. + level: error + # Change the current directory to run mypy command. + # mypy command reads setup.cfg or other settings file in this path. + execute_command: uv run --group dev --group lint --group tests --all-extras mypy + install_types: false + target: pwndbg pwndbginit tests/host + filter_mode: nofilter + fail_on_error: true + + # The PR must not contain more mypy --strict errors than the dev branch does + - name: Count strict mypy errors in PR branch + id: mypy_pr + run: | + set +e + uv run --group dev --group lint --group tests --all-extras mypy --strict pwndbg pwndbginit tests/host > mypy_pr.txt 2>&1 + echo "exit_code=$?" >> $GITHUB_OUTPUT + ERRORS=$(grep -c "error:" mypy_pr.txt || true) + echo "count=$ERRORS" >> $GITHUB_OUTPUT + echo "PR mypy (--strict) errors: $ERRORS" + continue-on-error: true + + - name: Check out dev branch + run: | + git fetch origin dev + git checkout origin/dev + + - name: Count strict mypy errors in dev branch + id: mypy_dev + run: | + set +e + uv run --group dev --group lint --group tests --all-extras mypy --strict pwndbg pwndbginit tests/host > mypy_dev.txt 2>&1 + echo "exit_code=$?" >> $GITHUB_OUTPUT + ERRORS=$(grep -c "error:" mypy_dev.txt || true) + echo "count=$ERRORS" >> $GITHUB_OUTPUT + echo "Dev mypy (--strict) errors: $ERRORS" + continue-on-error: true + + - name: Compare mypy error counts + run: | + PR_ERRORS=${{ steps.mypy_pr.outputs.count }} + DEV_ERRORS=${{ steps.mypy_dev.outputs.count }} + + echo "PR errors: $PR_ERRORS" + echo "Dev errors: $DEV_ERRORS" + + if [ "$PR_ERRORS" -gt "$DEV_ERRORS" ]; then + echo "This PR introduces more \`mypy --strict\` errors than are present on the dev branch." + echo "You may run \`uv run mypy --strict file/you/modified\` to diagnose where the issue lies." + echo "Ideally, a python type checker (mypy/pyright/ty/pyrefly etc..) should be running in your editor." + exit 1 + else + echo "This PR does not introduce any more \`mypy --strict\` errors than there are on the dev branch." + fi diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml index 283196b7b..e8c1cd30c 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock.yml @@ -4,16 +4,16 @@ on: branches: - dev paths: - - '**' - - '!mkdocs.yml' - - '!docs/**' - - '!*.md' + - "**" + - "!mkdocs.yml" + - "!docs/**" + - "!*.md" pull_request: paths: - - '**' - - '!mkdocs.yml' - - '!docs/**' - - '!*.md' + - "**" + - "!mkdocs.yml" + - "!docs/**" + - "!*.md" jobs: check_release_build-gdb: @@ -22,34 +22,34 @@ jobs: matrix: # https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories os: [ - ubuntu-latest, # x86_64-linux - ubuntu-24.04-arm, # aarch64-linux - macos-15-intel, # x86_64-darwin - macos-15, # aarch64-darwin - ] + ubuntu-latest, # x86_64-linux + ubuntu-24.04-arm, # aarch64-linux + macos-15-intel, # x86_64-darwin + macos-15, # aarch64-darwin + ] runs-on: ${{ matrix.os }} timeout-minutes: 60 steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v3 - - uses: cachix/install-nix-action@08dcb3a5e62fa31e2da3d490afc4176ef55ecd72 # @v30 - with: - nix_path: nixpkgs=channel:nixos-unstable - - name: configure cache - if: github.ref == 'refs/heads/dev' - uses: cachix/cachix-action@ad2ddac53f961de1989924296a1f236fcfbaa4fc # v15 - with: - name: pwndbg - authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v3 + - uses: cachix/install-nix-action@08dcb3a5e62fa31e2da3d490afc4176ef55ecd72 # @v30 + with: + nix_path: nixpkgs=channel:nixos-unstable + - name: configure cache + if: github.ref == 'refs/heads/dev' + uses: cachix/cachix-action@ad2ddac53f961de1989924296a1f236fcfbaa4fc # v15 + with: + name: pwndbg + authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" + signingKey: "${{ secrets.CACHIX_SIGNING_KEY }}" - - name: build pwndbg - run: nix build '.#pwndbg' --accept-flake-config -o result + - name: build pwndbg + run: nix build '.#pwndbg' --accept-flake-config -o result - - name: simple run pwndbg - run: TERM=xterm-256color ./result/bin/pwndbg <<< 'exit' + - name: simple run pwndbg + run: TERM=xterm-256color ./result/bin/pwndbg <<< 'exit' - - name: build develop environment - run: nix develop --accept-flake-config + - name: build develop environment + run: nix develop --accept-flake-config check_release_build-lldb: strategy: @@ -57,58 +57,58 @@ jobs: matrix: # https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories os: [ - ubuntu-latest, # x86_64-linux - ubuntu-24.04-arm, # aarch64-linux - macos-15-intel, # x86_64-darwin - macos-15, # aarch64-darwin - ] + ubuntu-latest, # x86_64-linux + ubuntu-24.04-arm, # aarch64-linux + macos-15-intel, # x86_64-darwin + macos-15, # aarch64-darwin + ] runs-on: ${{ matrix.os }} timeout-minutes: 60 steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v3 - - uses: cachix/install-nix-action@08dcb3a5e62fa31e2da3d490afc4176ef55ecd72 # @v30 - with: - nix_path: nixpkgs=channel:nixos-unstable - - name: configure cache - if: github.ref == 'refs/heads/dev' - uses: cachix/cachix-action@ad2ddac53f961de1989924296a1f236fcfbaa4fc # v15 - with: - name: pwndbg - authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v3 + - uses: cachix/install-nix-action@08dcb3a5e62fa31e2da3d490afc4176ef55ecd72 # @v30 + with: + nix_path: nixpkgs=channel:nixos-unstable + - name: configure cache + if: github.ref == 'refs/heads/dev' + uses: cachix/cachix-action@ad2ddac53f961de1989924296a1f236fcfbaa4fc # v15 + with: + name: pwndbg + authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" + signingKey: "${{ secrets.CACHIX_SIGNING_KEY }}" - - name: build pwndbg - run: nix build '.#pwndbg-lldb' --accept-flake-config -o result + - name: build pwndbg + run: nix build '.#pwndbg-lldb' --accept-flake-config -o result - - name: simple run pwndbg - run: TERM=xterm-256color ./result/bin/pwndbg-lldb <<< 'exit' + - name: simple run pwndbg + run: TERM=xterm-256color ./result/bin/pwndbg-lldb <<< 'exit' - - name: build develop environment - run: nix develop --accept-flake-config + - name: build develop environment + run: nix develop --accept-flake-config lock_flake: runs-on: ubuntu-latest timeout-minutes: 60 steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v3 - - uses: cachix/install-nix-action@08dcb3a5e62fa31e2da3d490afc4176ef55ecd72 # @v30 - with: - nix_path: nixpkgs=channel:nixos-unstable + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v3 + - uses: cachix/install-nix-action@08dcb3a5e62fa31e2da3d490afc4176ef55ecd72 # @v30 + with: + nix_path: nixpkgs=channel:nixos-unstable - - name: check flake.lock - run: nix flake lock --no-update-lock-file + - name: check flake.lock + run: nix flake lock --no-update-lock-file lock_uv: runs-on: ubuntu-latest timeout-minutes: 60 steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v3 - - uses: cachix/install-nix-action@08dcb3a5e62fa31e2da3d490afc4176ef55ecd72 # @v30 - with: - nix_path: nixpkgs=channel:nixos-unstable + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v3 + - uses: cachix/install-nix-action@08dcb3a5e62fa31e2da3d490afc4176ef55ecd72 # @v30 + with: + nix_path: nixpkgs=channel:nixos-unstable - - name: install uv - run: nix profile install --inputs-from . nixpkgs#uv + - name: install uv + run: nix profile install --inputs-from . nixpkgs#uv - - name: check uv.lock - run: uv lock --locked + - name: check uv.lock + run: uv lock --locked diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a97a3dc10..e16a40d38 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -4,16 +4,16 @@ on: branches: - dev paths: - - '**' - - '!mkdocs.yml' - - '!docs/**' - - '!*.md' + - "**" + - "!mkdocs.yml" + - "!docs/**" + - "!*.md" pull_request: paths: - - '**' - - '!mkdocs.yml' - - '!docs/**' - - '!*.md' + - "**" + - "!mkdocs.yml" + - "!docs/**" + - "!*.md" jobs: tests-using-nix: strategy: @@ -26,66 +26,66 @@ jobs: env: TMPDIR: /tmp 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: install uv - run: nix profile install --inputs-from . nixpkgs#uv - - - 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 - - - name: Run tests - if: matrix.type == 'unit-tests' - run: | - ./unit-tests.sh - - - name: Run GDB Tests - if: matrix.type == 'tests' - run: | - ./tests.sh --nix -d gdb -g gdb - - - name: Run DBG Tests on GDB - if: matrix.type == 'tests' - run: | - ./tests.sh --nix -d gdb -g dbg - - - name: Run cross-arch tests - if: matrix.type == 'qemu-user-tests' - run: | - ./tests.sh --nix -d gdb -g cross-arch-user - - - name: Set up cache for QEMU images - if: matrix.type == 'qemu-system-tests' - id: qemu-cache - uses: actions/cache@v3 - with: - path: ./tests/library/qemu-system/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/library/qemu_system/download-kernel-images.sh - - - name: Run kernel tests - if: matrix.type == 'qemu-system-tests' - run: | - ./kernel-tests.sh --nix + - 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: install uv + run: nix profile install --inputs-from . nixpkgs#uv + + - 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 + + - name: Run tests + if: matrix.type == 'unit-tests' + run: | + ./unit-tests.sh + + - name: Run GDB Tests + if: matrix.type == 'tests' + run: | + ./tests.sh --nix -d gdb -g gdb + + - name: Run DBG Tests on GDB + if: matrix.type == 'tests' + run: | + ./tests.sh --nix -d gdb -g dbg + + - name: Run cross-arch tests + if: matrix.type == 'qemu-user-tests' + run: | + ./tests.sh --nix -d gdb -g cross-arch-user + + - name: Set up cache for QEMU images + if: matrix.type == 'qemu-system-tests' + id: qemu-cache + uses: actions/cache@v3 + with: + path: ./tests/library/qemu-system/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/library/qemu_system/download-kernel-images.sh + + - name: Run kernel tests + if: matrix.type == 'qemu-system-tests' + run: | + ./kernel-tests.sh --nix tests: strategy: @@ -95,95 +95,95 @@ jobs: 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 GDB Tests - run: | - sudo sysctl -w kernel.yama.ptrace_scope=0 - ./tests.sh -d gdb -g gdb - - - name: Run DBG Tests on GDB - run: | - sudo sysctl -w kernel.yama.ptrace_scope=0 - ./tests.sh -d gdb -g dbg - - - name: Run DBG Tests on LLDB - if: matrix.os != 'ubuntu-22.04' - run: | - sudo sysctl -w kernel.yama.ptrace_scope=0 - ./tests.sh -d lldb -g dbg + - 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 GDB Tests + run: | + sudo sysctl -w kernel.yama.ptrace_scope=0 + ./tests.sh -d gdb -g gdb + + - name: Run DBG Tests on GDB + run: | + sudo sysctl -w kernel.yama.ptrace_scope=0 + ./tests.sh -d gdb -g dbg + + - name: Run DBG Tests on LLDB + if: matrix.os != 'ubuntu-22.04' + run: | + sudo sysctl -w kernel.yama.ptrace_scope=0 + ./tests.sh -d lldb -g dbg qemu-user-tests: runs-on: [ubuntu-24.04] timeout-minutes: 20 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - - name: Cache for pip - uses: actions/cache@v3 - with: - path: ~/.cache/pip - key: ${{ matrix.os }}-cache-pip + - 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: Setup pwndbg + run: | + ./setup.sh + ./setup-dev.sh - - name: Run cross-architecture tests - run: | - ./tests.sh -g cross-arch-user -d gdb + - name: Run cross-architecture tests + run: | + ./tests.sh -g cross-arch-user -d gdb 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 - - - name: Set up cache for QEMU images - id: qemu-cache - uses: actions/cache@v3 - with: - path: ./tests/library/qemu-system/kimages - key: ${{ matrix.os }}-cache-qemu-images - - - name: Download images - run: | - ./tests/library/qemu_system/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 + - 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: Set up cache for QEMU images + id: qemu-cache + uses: actions/cache@v3 + with: + path: ./tests/library/qemu-system/kimages + key: ${{ matrix.os }}-cache-qemu-images + + - name: Download images + run: | + ./tests/library/qemu_system/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