name: CI/CD Pipeline on: push: branches: [ main, develop ] pull_request: branches: [ main, develop ] jobs: test: runs-on: ubuntu-latest services: postgres: image: postgres:15 env: POSTGRES_PASSWORD: postgres POSTGRES_DB: lediscord_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.11' - name: Install Python dependencies run: | cd backend pip install -r requirements.txt - name: Run backend tests run: | cd backend python -m pytest tests/ -v env: DATABASE_URL: postgresql://postgres:postgres@localhost:5432/lediscord_test - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '18' cache: 'npm' cache-dependency-path: frontend/package-lock.json - name: Install frontend dependencies run: | cd frontend npm ci - name: Run frontend tests run: | cd frontend npm run test:unit - name: Build frontend run: | cd frontend npm run build security: runs-on: ubuntu-latest needs: test steps: - uses: actions/checkout@v3 - name: Run security scan uses: snyk/actions/node@master env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} with: args: --severity-threshold=high path: frontend/ - name: Run Python security scan run: | cd backend pip install safety safety check docker: runs-on: ubuntu-latest needs: [test, security] steps: - uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Build and test Docker images run: | docker-compose build docker-compose up -d sleep 30 curl -f http://localhost:8000/health || exit 1 curl -f http://localhost:5173 || exit 1 docker-compose down