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: Pyflakes lint shell: bash run: | python - <<'PY' from __future__ import print_function import subprocess import sys subprocess.check_call([ sys.executable, "-m", "pip", "install", "pyflakes" ]) files = subprocess.check_output( ["git", "ls-files", "*.py"] ).decode("utf-8").splitlines() files = [ f for f in files if not f.startswith("thirdparty/") ] proc = subprocess.Popen( [sys.executable, "-m", "pyflakes"] + files, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, ) out, _ = proc.communicate() text = out.decode("utf-8", "replace") lines = [ line for line in text.splitlines() if " redefines " not in line ] if lines: print("\n".join(lines)) sys.exit(1) if proc.returncode not in (0, 1): if text: print(text) print("pyflakes failed unexpectedly with status %s" % proc.returncode) sys.exit(proc.returncode or 1) print("pyflakes: clean") PY - 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