name: Scapy unit tests on: push: branches: [master] pull_request: # The branches below must be a subset of the branches above branches: [master] permissions: contents: read jobs: health: name: Code health check runs-on: ubuntu-latest steps: - name: Checkout Scapy uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install tox run: pip install tox - name: Run flake8 tests run: tox -e flake8 - name: Run codespell run: tox -e spell - name: Run twine check run: tox -e twine - name: Run gitarchive check run: tox -e gitarchive docs: # 'runs-on' and 'python-version' should match the ones defined in .readthedocs.yml name: Build doc runs-on: ubuntu-22.04 steps: - name: Checkout Scapy uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install tox run: pip install tox - name: Build docs run: tox -e docs spdx: name: Check SPDX identifiers runs-on: ubuntu-latest steps: - name: Checkout Scapy uses: actions/checkout@v4 - name: Launch script run: bash scapy/tools/check_spdx.sh mypy: name: Type hints check runs-on: ubuntu-latest steps: - name: Checkout Scapy uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install tox run: pip install tox - name: Run mypy run: tox -e mypy utscapy: name: ${{ matrix.os }} ${{ matrix.installmode }} ${{ matrix.python }} ${{ matrix.mode }} ${{ matrix.flags }} runs-on: ${{ matrix.os }} timeout-minutes: 20 continue-on-error: ${{ matrix.allow-failure == 'true' }} strategy: fail-fast: false matrix: os: [ubuntu-latest] python: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] mode: [non_root] installmode: [''] flags: [" -K scanner"] allow-failure: ['false'] include: # Linux root tests - os: ubuntu-latest python: "3.12" mode: root flags: " -K scanner" # PyPy tests: root only - os: ubuntu-latest python: "pypy3.9" mode: root flags: " -K scanner" # Libpcap test - os: ubuntu-latest python: "3.12" mode: root installmode: 'libpcap' flags: " -K scanner" # macOS tests - os: macos-14 python: "3.12" mode: both flags: " -K scanner" # Scanner tests - os: ubuntu-latest python: "3.12" mode: root allow-failure: 'true' flags: " -k scanner" - os: ubuntu-latest python: "pypy3.9" mode: root allow-failure: 'true' flags: " -k scanner" - os: macos-14 python: "3.12" mode: both allow-failure: 'true' flags: " -k scanner" steps: - name: Checkout Scapy uses: actions/checkout@v4 # Codecov requires a fetch-depth > 1 with: fetch-depth: 2 - name: Setup Python uses: actions/setup-python@v5 with: python-version: ${{ matrix.python }} - name: Install Tox and any other packages run: ./.config/ci/install.sh ${{ matrix.installmode }} - name: Run Tox run: UT_FLAGS="${{ matrix.flags }}" ./.config/ci/test.sh ${{ matrix.python }} ${{ matrix.mode }} - name: Codecov uses: codecov/codecov-action@v4 continue-on-error: true with: token: ${{ secrets.CODECOV_TOKEN }} cryptography: name: pyca/cryptography test runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install tox run: pip install tox # pyca/cryptography's CI installs cryptography # then runs the tests. We therefore didn't include it in tox - name: Install cryptography run: pip install cryptography - name: Run tests run: tox -e cryptography # CODE-QL analyze: name: CodeQL analysis runs-on: ubuntu-latest permissions: security-events: write steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 2 - name: Initialize CodeQL uses: github/codeql-action/init@v3 with: languages: 'python' - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3