on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

permissions:
  contents: read

jobs:
  build:
    runs-on: ${{ matrix.os }}
    timeout-minutes: 30

    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            python-version: "pypy-2.7"
          - os: macos-latest
            python-version: "3.8"
          - os: windows-latest
            python-version: "3.14"

    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 1
          persist-credentials: false

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Python sanity
        run: python -VV

      - name: Basic import test
        run: python -c "import sqlmap; import sqlmapapi"

      - name: Unit tests
        # -B: do not write .pyc files. On Python 2 / PyPy a cached .pyc makes a module's __file__
        # point at the .pyc, which would make the later --smoke getFileType(__file__) doctest see
        # 'binary' instead of 'text'. Keeping this step byte-compile-free leaves --smoke clean.
        run: python -B -m unittest discover -s tests -p "test_*.py"

      - name: Smoke test
        run: python sqlmap.py --smoke-test

      - name: Vuln test
        run: python sqlmap.py --vuln-test

      - name: API test
        run: python sqlmap.py --api-test
