redeem fix #119
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: Automated Testing | |
| on: | |
| push: | |
| branches: [ main, develop ] | |
| pull_request: | |
| branches: [ main, develop ] | |
| workflow_dispatch: | |
| jobs: | |
| backend-tests: | |
| name: Backend Tests | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| python-version: ['3.10'] | |
| steps: | |
| - name: Checkout code | |
| 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 dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r requirements.txt | |
| - name: Run backend tests | |
| working-directory: ./backend | |
| run: | | |
| pytest --cov=. --cov-report=xml --cov-report=term-missing -v -m "not ci_flaky" | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v3 | |
| with: | |
| files: ./backend/coverage.xml | |
| flags: backend | |
| name: backend-coverage | |
| fail_ci_if_error: false | |
| frontend-tests: | |
| name: Frontend Tests | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node-version: ['18.x', '20.x'] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: 'npm' | |
| cache-dependency-path: ./frontend/package-lock.json | |
| - name: Install dependencies | |
| working-directory: ./frontend | |
| run: npm ci | |
| - name: Run frontend tests | |
| working-directory: ./frontend | |
| run: npm test -- --run --coverage | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v3 | |
| with: | |
| files: ./frontend/coverage/coverage-final.json | |
| flags: frontend | |
| name: frontend-coverage | |
| fail_ci_if_error: false | |
| lint-and-format: | |
| name: Linting and Formatting | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.10' | |
| - name: Install Python linting tools | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install flake8 black isort | |
| - name: Check Python code formatting with black | |
| working-directory: ./backend | |
| run: black --check . | |
| continue-on-error: true | |
| - name: Check Python imports with isort | |
| working-directory: ./backend | |
| run: isort --check-only . | |
| continue-on-error: true | |
| - name: Lint Python code with flake8 | |
| working-directory: ./backend | |
| run: flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics | |
| continue-on-error: true | |
| integration-tests: | |
| name: Integration Tests | |
| runs-on: ubuntu-latest | |
| needs: [backend-tests, frontend-tests] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.10' | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20.x' | |
| - name: Install backend dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r requirements.txt | |
| - name: Install frontend dependencies | |
| working-directory: ./frontend | |
| run: npm ci | |
| - name: Build frontend | |
| working-directory: ./frontend | |
| run: npm run build | |
| - name: Run integration tests | |
| working-directory: ./backend | |
| run: | | |
| pytest -m integration -v | |
| continue-on-error: true | |
| test-summary: | |
| name: Test Summary | |
| runs-on: ubuntu-latest | |
| needs: [backend-tests, frontend-tests, lint-and-format] | |
| if: always() | |
| steps: | |
| - name: Check test results | |
| run: | | |
| echo "Backend Tests: ${{ needs.backend-tests.result }}" | |
| echo "Frontend Tests: ${{ needs.frontend-tests.result }}" | |
| echo "Lint and Format: ${{ needs.lint-and-format.result }}" | |
| - name: Determine overall status | |
| run: | | |
| if [[ "${{ needs.backend-tests.result }}" == "failure" ]] || \ | |
| [[ "${{ needs.frontend-tests.result }}" == "failure" ]]; then | |
| echo "Tests failed!" | |
| exit 1 | |
| else | |
| echo "All tests passed!" | |
| fi |