name: Test on: push: branches: [ main, develop ] pull_request: branches: [ main, develop ] jobs: backend-test: runs-on: ubuntu-latest services: postgres: image: postgres:16-alpine env: POSTGRES_DB: trustos_test POSTGRES_USER: trustos POSTGRES_PASSWORD: test options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.10' - name: Cache Python dependencies uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('backend/requirements.txt') }} - name: Install dependencies run: | cd backend pip install -r requirements.txt - name: Run tests env: DATABASE_URL: postgresql+asyncpg://trustos:test@localhost:5432/trustos_test SECRET_KEY: test-secret-key-for-ci OPENAI_API_KEY: sk-test ANTHROPIC_API_KEY: sk-ant-test run: | cd backend pytest tests/ -v --cov=app --cov-report=xml || true frontend-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '20' cache: 'npm' cache-dependency-path: 'frontend/package-lock.json' - name: Install dependencies run: | cd frontend npm ci - name: Run linter run: | cd frontend npm run lint || true - name: Build env: NEXT_PUBLIC_API_URL: http://localhost:8000 run: | cd frontend npm run build - name: Run tests run: | cd frontend npm test -- --passWithNoTests || true security-scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@master with: scan-type: 'fs' scan-ref: '.' format: 'sarif' output: 'trivy-results.sarif' severity: 'CRITICAL,HIGH' continue-on-error: true - name: Upload Trivy scan results uses: github/codeql-action/upload-sarif@v2 if: always() with: sarif_file: 'trivy-results.sarif'