This repository was archived by the owner on Feb 1, 2026. It is now read-only.
feat: Add cross-platform dev.py task runner #9
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: Tests | |
| on: | |
| push: | |
| branches: [main, develop] | |
| pull_request: | |
| branches: [main, develop] | |
| jobs: | |
| python-tests: | |
| name: Python Tests (Python ${{ matrix.python-version }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: "pip" | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libsqlite3-dev | |
| - name: Install Python dependencies | |
| run: | | |
| python -m pip install --upgrade pip setuptools wheel | |
| pip install -r requirements.txt | |
| pip install pytest pytest-cov pytest-asyncio | |
| - name: Run tests with coverage | |
| run: | | |
| pytest tests/ -v --cov=src --cov-report=xml --cov-report=term | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v3 | |
| with: | |
| files: ./coverage.xml | |
| flags: python | |
| name: python-${{ matrix.python-version }} | |
| fail_ci_if_error: false | |
| type-checking: | |
| name: Type Checking (MyPy) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: "3.11" | |
| cache: "pip" | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r requirements.txt | |
| pip install mypy | |
| - name: Run MyPy type checking | |
| run: | | |
| mypy src/ --strict --no-implicit-reexport --pretty || true | |
| backend-tests: | |
| name: Backend Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: "3.11" | |
| cache: "pip" | |
| - name: Install backend dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| cd apps/dashboard/backend | |
| pip install -r requirements.txt -r requirements-test.txt | |
| - name: Run backend tests | |
| run: | | |
| cd apps/dashboard/backend | |
| pytest tests/ -v --cov=. --cov-report=term | |
| frontend-tests: | |
| name: Frontend Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "18" | |
| cache: "npm" | |
| cache-dependency-path: "apps/dashboard/frontend/package-lock.json" | |
| - name: Install frontend dependencies | |
| run: | | |
| cd apps/dashboard/frontend | |
| npm ci | |
| - name: Run frontend tests | |
| run: | | |
| cd apps/dashboard/frontend | |
| npm run test -- --run || true | |
| - name: Build frontend | |
| run: | | |
| cd apps/dashboard/frontend | |
| npm run build | |
| shell-linting: | |
| name: Shell Script Linting | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Run ShellCheck | |
| uses: ludeeus/action-shellcheck@master | |
| with: | |
| scandir: "./scripts" | |
| severity: warning | |
| summary: | |
| name: Test Summary | |
| runs-on: ubuntu-latest | |
| needs: [python-tests, backend-tests, frontend-tests] | |
| if: always() | |
| steps: | |
| - name: Check test results | |
| run: | | |
| if [ "${{ needs.python-tests.result }}" = "failure" ]; then | |
| echo "Python tests failed" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.backend-tests.result }}" = "failure" ]; then | |
| echo "Backend tests failed" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.frontend-tests.result }}" = "failure" ]; then | |
| echo "Frontend tests failed" | |
| exit 1 | |
| fi | |
| echo "All tests passed!" |