python-package.yml•3.04 kB
name: CI/CD Pipeline
on:
push:
branches: [main, master, develop]
pull_request:
branches: [main, master, develop]
env:
PYTHON_VERSION: "3.10"
jobs:
test:
name: Test Suite
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12"]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
version: "latest"
- name: Set up Python ${{ matrix.python-version }}
run: uv python install ${{ matrix.python-version }}
- name: Install dependencies
run: |
uv sync --extra dev --extra test
- name: Lint with flake8
run: |
uv run flake8 tools/ main.py tests/ --count --select=E9,F63,F7,F82 --show-source --statistics
uv run flake8 tools/ main.py tests/ --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Type check with mypy
run: |
uv run mypy tools/ main.py --ignore-missing-imports
- name: Test with pytest
run: |
uv run pytest --cov=tools --cov=main --cov-report=xml --cov-report=term-missing
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
file: ./coverage.xml
flags: unittests
name: codecov-umbrella
fail_ci_if_error: false
security:
name: Security Scan
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
version: "latest"
- name: Set up Python
run: uv python install ${{ env.PYTHON_VERSION }}
- name: Install dependencies
run: uv sync --extra dev --extra test
- name: Run Bandit Security Scan
run: |
uv run bandit -r tools/ main.py -f json -o bandit-report.json || true
uv run bandit -r tools/ main.py
- name: Upload Bandit report
uses: actions/upload-artifact@v4
with:
name: bandit-report
path: bandit-report.json
- name: Run Safety Check
run: |
uv run safety check --json --output safety-report.json || true
uv run safety check
- name: Upload Safety report
uses: actions/upload-artifact@v4
with:
name: safety-report
path: safety-report.json
quality:
name: Code Quality
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
- name: Set up Python
run: uv python install ${{ env.PYTHON_VERSION }}
- name: Install dependencies
run: uv sync --extra dev --extra test
- name: Check code formatting with Black
run: uv run black --check .
- name: Check import sorting with isort
run: uv run isort --check-only .