name: CI/CD
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
lint:
name: Lint and Format Check
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
enable-cache: true
- name: Install dependencies
run: |
uv sync --dev
- name: Run Ruff linter
run: |
uv run ruff check .
- name: Run Ruff formatter check
run: |
uv run ruff format --check .
test:
name: Test (Python ${{ matrix.python-version }})
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: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
enable-cache: true
- name: Install dependencies
run: |
uv sync --dev
- name: Run tests
run: |
uv run pytest -v
# Optional: Type checking job (if mypy is added in the future)
# type-check:
# name: Type Check
# runs-on: ubuntu-latest
# steps:
# - name: Checkout code
# uses: actions/checkout@v4
#
# - name: Set up Python
# uses: actions/setup-python@v5
# with:
# python-version: '3.12'
#
# - name: Install uv
# uses: astral-sh/setup-uv@v4
# with:
# enable-cache: true
#
# - name: Install dependencies
# run: |
# uv sync --dev
#
# - name: Run mypy
# run: |
# uv run mypy src/
all-checks-passed:
name: All Checks Passed
runs-on: ubuntu-latest
needs: [lint, test]
if: always()
steps:
- name: Check if all jobs passed
run: |
if [[ "${{ needs.lint.result }}" != "success" ]] || [[ "${{ needs.test.result }}" != "success" ]]; then
echo "One or more checks failed"
exit 1
fi
echo "All checks passed successfully!"