--- name: CI/CD on: push: branches: [ main, develop ] pull_request: branches: [ main, develop ] jobs: test: runs-on: ubuntu-latest services: supabase: image: supabase/postgres-meta:v0.68.0 env: POSTGRES_PASSWORD: postgres POSTGRES_USER: postgres POSTGRES_DB: postgres ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Check code formatting run: npm run format - name: Run tests with coverage run: npm run test:coverage env: SUPABASE_URL: http://localhost:54321 SUPABASE_KEY: test-key OLLAMA_URL: http://localhost:11434 SEARXNG_URL: http://localhost:8080 NODE_ENV: test CACHE_DURATION_DAYS: 7 - name: Upload coverage reports uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} files: ./coverage/lcov.info fail_ci_if_error: true build: needs: test runs-on: ubuntu-latest if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop') steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Build run: npm run build - name: Upload build artifacts uses: actions/upload-artifact@v4 with: name: dist path: dist/ deploy-staging: needs: build runs-on: ubuntu-latest if: github.event_name == 'push' && github.ref == 'refs/heads/develop' environment: name: staging url: https://staging.example.com steps: - uses: actions/checkout@v4 - name: Download build artifacts uses: actions/download-artifact@v4 with: name: dist path: dist/ - name: Deploy to staging run: | echo "Deploying to staging environment" # Add your staging deployment commands here env: DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} deploy-production: needs: build runs-on: ubuntu-latest if: github.event_name == 'push' && github.ref == 'refs/heads/main' environment: name: production url: https://example.com steps: - uses: actions/checkout@v4 - name: Download build artifacts uses: actions/download-artifact@v4 with: name: dist path: dist/ - name: Deploy to production run: | echo "Deploying to production environment" # Add your production deployment commands here env: DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}