name: CI - Lint, Test & Coverage on: push: branches: [ main, development, 'feature/**' ] pull_request: branches: [ main, development ] jobs: lint: name: Lint (ruff & flake8) runs-on: ubuntu-latest steps: - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4 - name: Set up Python uses: actions/setup-python@7f4fc3e22c37d6ff65e88745f38bd3157c663f7c # v4 with: python-version: '3.12' - name: Cache pip uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }} restore-keys: | ${{ runner.os }}-pip- - name: Install dev dependencies run: | python -m pip install --upgrade pip pip install -r requirements.dev.txt - name: Run pre-commit run: | pre-commit run --all-files - name: Run ruff run: | ruff check . - name: Run flake8 run: | flake8 . || true test-backend: name: Backend Tests (Go) runs-on: ubuntu-latest needs: [lint] steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.22' - name: Run Go tests working-directory: backend run: | go test -v ./... test-frontend: name: Frontend Tests (React) runs-on: ubuntu-latest needs: [lint] steps: - uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '20' 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