name: CI on: push: branches: [main, develop] pull_request: branches: [main] jobs: backend-lint-and-test: runs-on: ubuntu-latest defaults: run: working-directory: ./backend services: mysql: image: mysql:8.0 env: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: yuzhiran ports: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=5 steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 cache: 'npm' cache-dependency-path: backend/package-lock.json - name: Install dependencies run: npm ci - name: Generate Prisma client run: npx prisma generate env: DATABASE_URL: mysql://root:root123@localhost:3306/yuzhiran - name: Type check run: npx tsc --noEmit - name: Run tests run: npm test frontend-lint-and-test: runs-on: ubuntu-latest defaults: run: working-directory: ./frontend steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 cache: 'npm' cache-dependency-path: frontend/package-lock.json - name: Install dependencies run: npm ci - name: Run tests run: npm test - name: Build run: npm run build docker-build: runs-on: ubuntu-latest needs: [backend-lint-and-test, frontend-lint-and-test] if: github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build backend uses: docker/build-push-action@v5 with: context: ./backend push: false tags: yuzhiran/backend:latest cache-from: type=gha cache-to: type=gha,mode=max - name: Build frontend uses: docker/build-push-action@v5 with: context: ./frontend push: false tags: yuzhiran/frontend:latest cache-from: type=gha cache-to: type=gha,mode=max