SmartProBono Test Suite #107
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: SmartProBono Test Suite | |
| on: | |
| push: | |
| branches: [ main, develop ] | |
| pull_request: | |
| branches: [ main, develop ] | |
| schedule: | |
| - cron: '0 2 * * *' # Run daily at 2 AM | |
| jobs: | |
| backend-tests: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| python-version: [3.8, 3.9, 3.10, 3.11] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Cache pip dependencies | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/.cache/pip | |
| key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }} | |
| restore-keys: | | |
| ${{ runner.os }}-pip- | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r backend/requirements.txt | |
| pip install -r tests/requirements-test.txt | |
| - name: Run backend tests | |
| run: | | |
| python -m pytest tests/test_backend_apis.py tests/test_voice_service.py tests/test_court_filing_service.py -v --tb=short --cov=backend --cov-report=xml --cov-report=term | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v3 | |
| with: | |
| file: ./coverage.xml | |
| flags: backend | |
| name: backend-coverage | |
| integration-tests: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.10 | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.10' | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r backend/requirements.txt | |
| pip install -r tests/requirements-test.txt | |
| - name: Start backend server | |
| run: | | |
| cd backend | |
| python combined_server.py & | |
| sleep 10 | |
| - name: Run integration tests | |
| run: | | |
| python -m pytest tests/test_integration.py -v --tb=short | |
| - name: Stop backend server | |
| run: pkill -f combined_server.py | |
| security-tests: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.10 | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.10' | |
| - name: Install security tools | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install bandit safety | |
| - name: Run security scan | |
| run: | | |
| bandit -r backend/ -f txt | |
| 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: frontend/package-lock.json | |
| - name: Install frontend dependencies | |
| run: | | |
| cd frontend | |
| npm ci | |
| - name: Run frontend tests | |
| run: | | |
| cd frontend | |
| npm test -- --coverage --watchAll=false | |
| - name: Upload frontend coverage | |
| uses: codecov/codecov-action@v3 | |
| with: | |
| file: ./frontend/coverage/lcov.info | |
| flags: frontend | |
| name: frontend-coverage | |
| performance-tests: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.10 | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.10' | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r backend/requirements.txt | |
| pip install -r tests/requirements-test.txt | |
| - name: Start backend server | |
| run: | | |
| cd backend | |
| python combined_server.py & | |
| sleep 10 | |
| - name: Run performance tests | |
| run: | | |
| python -m pytest tests/test_integration.py::TestPerformanceIntegration -v --tb=short | |
| - name: Stop backend server | |
| run: pkill -f combined_server.py | |
| code-quality: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.10 | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.10' | |
| - name: Install linting tools | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install flake8 black isort | |
| - name: Run linting | |
| run: | | |
| flake8 backend/ --count --select=E9,F63,F7,F82 --show-source --statistics | |
| flake8 backend/ --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics | |
| - name: Check code formatting | |
| run: | | |
| black --check backend/ | |
| isort --check-only backend/ | |
| build-test: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.10 | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.10' | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r backend/requirements.txt | |
| - name: Test backend build | |
| run: | | |
| cd backend | |
| python -c "import combined_server; print('Backend imports successfully')" | |
| - name: Test frontend build | |
| run: | | |
| cd frontend | |
| npm ci | |
| npm run build | |
| test-summary: | |
| runs-on: ubuntu-latest | |
| needs: [backend-tests, integration-tests, security-tests, frontend-tests, performance-tests, code-quality, build-test] | |
| if: always() | |
| steps: | |
| - name: Test Summary | |
| run: | | |
| echo "## Test Results Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "| Test Suite | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|------------|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Backend Tests | ${{ needs.backend-tests.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Integration Tests | ${{ needs.integration-tests.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Security Tests | ${{ needs.security-tests.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Frontend Tests | ${{ needs.frontend-tests.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Performance Tests | ${{ needs.performance-tests.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Code Quality | ${{ needs.code-quality.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Build Test | ${{ needs.build-test.result }} |" >> $GITHUB_STEP_SUMMARY | |
| if [[ "${{ needs.backend-tests.result }}" == "success" && "${{ needs.integration-tests.result }}" == "success" && "${{ needs.frontend-tests.result }}" == "success" ]]; then | |
| echo "🎉 All critical tests passed!" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "❌ Some tests failed!" >> $GITHUB_STEP_SUMMARY | |
| fi |