| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- name: CI
- on:
- push:
- branches: [main]
- pull_request:
- branches: [main]
- env:
- PYTHON_VERSION: '3.11'
- NODE_VERSION: '20'
- # Cancel in-progress runs for the same branch
- concurrency:
- group: ${{ github.workflow }}-${{ github.ref }}
- cancel-in-progress: true
- jobs:
- # ============================================================================
- # Backend Checks
- # ============================================================================
- backend-lint:
- name: Backend Lint
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: ${{ env.PYTHON_VERSION }}
- - name: Install ruff
- run: pip install ruff
- - name: Run ruff check
- run: ruff check backend/
- - name: Run ruff format check
- run: ruff format --check backend/
- backend-tests:
- name: Backend Tests
- runs-on: ubuntu-latest
- needs: backend-lint
- steps:
- - uses: actions/checkout@v4
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: ${{ env.PYTHON_VERSION }}
- - name: Cache pip
- uses: actions/cache@v4
- 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 requirements.txt
- pip install pytest pytest-asyncio pytest-cov
- - name: Run tests
- run: |
- cd backend
- python -m pytest tests/ -v --tb=short
- # ============================================================================
- # Frontend Checks
- # ============================================================================
- frontend-lint:
- name: Frontend Lint
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: ${{ env.NODE_VERSION }}
- cache: 'npm'
- cache-dependency-path: frontend/package-lock.json
- - name: Install dependencies
- working-directory: frontend
- run: npm ci
- - name: Run ESLint
- working-directory: frontend
- run: npm run lint
- frontend-typecheck:
- name: Frontend Type Check
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: ${{ env.NODE_VERSION }}
- cache: 'npm'
- cache-dependency-path: frontend/package-lock.json
- - name: Install dependencies
- working-directory: frontend
- run: npm ci
- - name: Run TypeScript check
- working-directory: frontend
- run: npx tsc --noEmit
- frontend-tests:
- name: Frontend Tests
- runs-on: ubuntu-latest
- needs: [frontend-lint, frontend-typecheck]
- steps:
- - uses: actions/checkout@v4
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: ${{ env.NODE_VERSION }}
- cache: 'npm'
- cache-dependency-path: frontend/package-lock.json
- - name: Install dependencies
- working-directory: frontend
- run: npm ci
- - name: Run tests
- working-directory: frontend
- run: npm run test:run
- frontend-build:
- name: Frontend Build
- runs-on: ubuntu-latest
- needs: [frontend-tests]
- steps:
- - uses: actions/checkout@v4
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: ${{ env.NODE_VERSION }}
- cache: 'npm'
- cache-dependency-path: frontend/package-lock.json
- - name: Install dependencies
- working-directory: frontend
- run: npm ci
- - name: Build
- working-directory: frontend
- run: npm run build
- # ============================================================================
- # Docker Build (optional, for release confidence)
- # ============================================================================
- docker-build:
- name: Docker Build
- runs-on: ubuntu-latest
- needs: [backend-tests, frontend-build]
- steps:
- - uses: actions/checkout@v4
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
- - name: Build Docker image
- uses: docker/build-push-action@v6
- with:
- context: .
- push: false
- tags: bambuddy:test
- cache-from: type=gha
- cache-to: type=gha,mode=max
|