name: Unit tests
on:
  push:
    branches:
      - dev
  pull_request:

jobs:
  tests:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-22.04, ubuntu-20.04]
    runs-on: ${{ matrix.os }}
    timeout-minutes: 20
    steps:
    - uses: actions/checkout@v3
    - name: Cache for pip
      uses: actions/cache@v3
      with:
        path: ~/.cache/pip
        key: ${{ matrix.os }}-cache-pip

    - name: Install dependencies
      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/python -m 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

    - name: Process coverage data
      if: matrix.os == 'ubuntu-22.04'
      run: |
        ./.venv/bin/coverage combine
        ./.venv/bin/coverage xml

    - name: "Upload coverage to Codecov"
      if: matrix.os == 'ubuntu-22.04'
      uses: codecov/codecov-action@v3

  qemu-tests:
    runs-on: [ubuntu-22.04]
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v3

    - name: Cache for pip
      uses: actions/cache@v3
      with:
        path: ~/.cache/pip
        key: ${{ matrix.os }}-cache-pip

    - name: Install dependencies
      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/images
        key: ${{ matrix.os }}-cache-qemu-images

    - name: Download images
      run: |
        ./tests/qemu-tests/download_images.sh

    # We set `kernel.yama.ptrace_scope=0` for `gdb-pt-dump`
    - name: Run tests
      working-directory: ./tests/qemu-tests
      run: |
        sudo sysctl -w kernel.yama.ptrace_scope=0
        ./tests.sh --cov

    - name: Run qemu-user tests
      working-directory: ./tests/qemu-tests
      run: |
        ./test_qemu.sh

    - name: Process coverage data
      run: |
        ./.venv/bin/coverage combine
        ./.venv/bin/coverage xml

    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v3
