Python checks #172
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Python checks | |
on: | |
push: | |
branches: | |
- main | |
- master | |
pull_request: | |
schedule: | |
- cron: 0 0 * * 1 | |
workflow_dispatch: | |
permissions: read-all | |
jobs: | |
test: | |
name: Pytest testing | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: | |
- '3.9' | |
- '3.10' | |
- '3.11' | |
- '3.12' | |
- '3.13' | |
os: | |
- ubuntu-latest | |
- windows-latest | |
- macos-latest | |
permissions: | |
contents: write | |
steps: | |
- uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 | |
with: | |
disable-sudo: false | |
egress-policy: audit | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache: pip | |
- uses: install-pinned/uv@75877ff4b6e7f7b75e572e664476f9a202dcc9f9 | |
- run: uv pip install --system -e .[dev] | |
- id: cache-pytest | |
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 | |
with: | |
path: .pytest_cache | |
key: ${{ runner.os }}-pytest-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }} | |
- name: Run pytest (with headless support) | |
uses: GabrielBB/xvfb-action@5bcda06da84ba084708898801da79736b88e00a9 | |
env: | |
COVERAGE_FILE: .coverage.${{ runner.os }}.${{ matrix.python-version }} | |
with: | |
run: pytest | |
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 | |
with: | |
name: coverage-${{ runner.os }}${{ matrix.python-version }} | |
path: .coverage.${{ runner.os }}.${{ matrix.python-version }} | |
include-hidden-files: true | |
ruff-format: | |
name: Ruff formatting | |
runs-on: ubuntu-latest | |
steps: | |
- uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 | |
with: | |
disable-sudo: true | |
egress-policy: block | |
allowed-endpoints: > | |
files.pythonhosted.org:443 | |
github.com:443 | |
pypi.org:443 | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 | |
with: | |
python-version: '3.13' | |
cache: pip | |
- uses: install-pinned/uv@75877ff4b6e7f7b75e572e664476f9a202dcc9f9 | |
- run: uv pip install --system -e .[dev] | |
- id: cache-ruff | |
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 | |
with: | |
path: .ruff_cache | |
key: ${{ runner.os }}-ruff-3.13-${{ hashFiles('pyproject.toml') }} | |
- id: run-ruff | |
run: ruff format --diff . | |
ruff-check: | |
name: Ruff linting | |
runs-on: ubuntu-latest | |
permissions: | |
security-events: write | |
steps: | |
- uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 | |
with: | |
disable-sudo: true | |
egress-policy: block | |
allowed-endpoints: > | |
api.github.com:443 | |
files.pythonhosted.org:443 | |
github.com:443 | |
pypi.org:443 | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 | |
with: | |
python-version: '3.13' | |
cache: pip | |
- uses: install-pinned/uv@75877ff4b6e7f7b75e572e664476f9a202dcc9f9 | |
- run: uv pip install --system -e .[dev] | |
- id: cache-ruff | |
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 | |
with: | |
path: .ruff_cache | |
key: ${{ runner.os }}-ruff-3.13-${{ hashFiles('pyproject.toml') }} | |
- id: run-ruff-sarif | |
run: | | |
ruff check --output-format=sarif -o results.sarif . | |
- uses: github/codeql-action/upload-sarif@ff0a06e83cb2de871e5a09832bc6a81e7276941f | |
if: ( success() || failure() ) && contains('["success", "failure"]', steps.run-ruff-sarif.outcome) | |
with: | |
sarif_file: results.sarif | |
- id: run-ruff | |
if: failure() && contains('["failure"]', steps.run-ruff-sarif.outcome) | |
run: | | |
ruff check --output-format=github . | |
mypy: | |
name: Mypy type checking | |
runs-on: ubuntu-latest | |
steps: | |
- uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 | |
with: | |
disable-sudo: true | |
egress-policy: block | |
allowed-endpoints: > | |
api.github.com:443 | |
files.pythonhosted.org:443 | |
github.com:443 | |
pypi.org:443 | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 | |
with: | |
python-version: '3.13' | |
cache: pip | |
- uses: install-pinned/uv@75877ff4b6e7f7b75e572e664476f9a202dcc9f9 | |
- run: uv pip install --system -e .[dev] | |
- id: cache-mypy | |
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 | |
with: | |
path: .mypy_cache | |
key: ${{ runner.os }}-mypy-3.13-${{ hashFiles('pyproject.toml') }} | |
- id: run-mypy | |
run: | | |
mypy . | |
bandit: | |
name: Bandit security | |
runs-on: ubuntu-latest | |
permissions: | |
security-events: write | |
steps: | |
- uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 | |
with: | |
disable-sudo: true | |
egress-policy: block | |
allowed-endpoints: > | |
api.github.com:443 | |
files.pythonhosted.org:443 | |
github.com:443 | |
pypi.org:443 | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 | |
with: | |
python-version: '3.13' | |
cache: pip | |
- uses: install-pinned/uv@75877ff4b6e7f7b75e572e664476f9a202dcc9f9 | |
- run: uv pip install --system -e .[dev] | |
- id: run-bandit-sarif | |
run: | | |
bandit --confidence-level 'medium' --format 'sarif' --output 'results.sarif' --recursive 'requestium' | |
- uses: github/codeql-action/upload-sarif@ff0a06e83cb2de871e5a09832bc6a81e7276941f | |
if: ( success() || failure() ) && contains('["success", "failure"]', steps.run-bandit-sarif.outcome) | |
with: | |
sarif_file: results.sarif | |
- id: run-bandit | |
if: failure() && contains('["failure"]', steps.run-bandit-sarif.outcome) | |
run: | | |
bandit --confidence-level 'medium' --recursive 'requestium' | |
coverage: | |
runs-on: ubuntu-latest | |
needs: test | |
permissions: | |
pull-requests: write | |
contents: write | |
steps: | |
- uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 | |
with: | |
disable-sudo: true | |
egress-policy: block | |
allowed-endpoints: > | |
api.github.com:443 | |
github.com:443 | |
img.shields.io:443 | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 | |
with: | |
pattern: coverage-* | |
merge-multiple: true | |
- name: Coverage comment | |
id: coverage_comment | |
uses: py-cov-action/python-coverage-comment-action@fb02115d6115e7b3325dc3295fe1dcfb1919248a | |
with: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
MERGE_COVERAGE_FILES: true | |
- name: Store Pull Request comment to be posted | |
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 | |
if: steps.coverage_comment.outputs.COMMENT_FILE_WRITTEN == 'true' | |
with: | |
name: python-coverage-comment-action | |
path: python-coverage-comment-action.txt | |
pre-commit: | |
runs-on: ubuntu-latest | |
needs: | |
- ruff-format | |
- ruff-check | |
- bandit | |
permissions: | |
contents: write | |
steps: | |
- uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 | |
with: | |
disable-sudo: true | |
egress-policy: block | |
allowed-endpoints: > | |
files.pythonhosted.org:443 | |
github.com:443 | |
proxy.golang.org:443 | |
pypi.org:443 | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | |
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 | |
with: | |
python-version: '3.13' | |
cache: pip | |
- uses: install-pinned/uv@75877ff4b6e7f7b75e572e664476f9a202dcc9f9 | |
- run: uv pip install --system -e .[dev] | |
- id: cache-pre-commit | |
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 | |
with: | |
path: .pre-commit-cache | |
key: ${{ runner.os }}-pre-commit-3.13 | |
- name: Run pre-commit on all files | |
run: | | |
pre-commit install | |
pre-commit run --all-files | |
env: | |
PRE_COMMIT_HOME: .pre-commit-cache |