Gas Liquid Contactor #318
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI - Build and Test Application | |
| on: | |
| push: | |
| branches: [ main ] | |
| pull_request: | |
| branches: [ main ] | |
| permissions: | |
| contents: read | |
| jobs: | |
| test: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node-version: [20.x] | |
| python-version: ['3.10', '3.11'] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: 'npm' | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Cache Python dependencies | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/.cache/pip | |
| key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
| restore-keys: | | |
| ${{ runner.os }}-pip- | |
| - name: Install Python dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install .[dev] | |
| pip install -r requirements.txt | |
| - name: Install Node.js dependencies | |
| run: npm ci | |
| - name: Lint frontend code | |
| run: npm run lint | |
| continue-on-error: true | |
| - name: Build frontend | |
| run: npm run build | |
| - name: Run Python tests | |
| run: | | |
| python -m pytest test/ -v | |
| - name: Start backend server and health check | |
| run: | | |
| # Start the backend server in the background | |
| python -m src.backend & | |
| BACKEND_PID=$! | |
| # Wait for the server to start | |
| echo "Waiting for backend server to start..." | |
| sleep 10 | |
| # Health check - test if the server is responding | |
| max_attempts=30 | |
| attempt=1 | |
| while [ $attempt -le $max_attempts ]; do | |
| if curl -f http://localhost:8000/health 2>/dev/null; then | |
| echo "Backend server is healthy!" | |
| break | |
| elif curl -f http://localhost:8000/ 2>/dev/null; then | |
| echo "Backend server is responding!" | |
| break | |
| else | |
| echo "Attempt $attempt/$max_attempts: Backend not ready yet..." | |
| sleep 2 | |
| attempt=$((attempt + 1)) | |
| fi | |
| done | |
| if [ $attempt -gt $max_attempts ]; then | |
| echo "Backend server failed to start properly" | |
| kill $BACKEND_PID 2>/dev/null || true | |
| exit 1 | |
| fi | |
| # Test basic API endpoints if they exist | |
| echo "Testing backend endpoints..." | |
| # Clean up | |
| kill $BACKEND_PID 2>/dev/null || true | |
| echo "Backend server test completed successfully!" | |
| - name: Test frontend build serves correctly | |
| run: | | |
| # Start the preview server in the background | |
| npm run preview & | |
| FRONTEND_PID=$! | |
| # Wait for the server to start | |
| echo "Waiting for frontend server to start..." | |
| sleep 5 | |
| # Health check for frontend | |
| max_attempts=15 | |
| attempt=1 | |
| while [ $attempt -le $max_attempts ]; do | |
| if curl -f http://localhost:4173/ 2>/dev/null; then | |
| echo "Frontend server is serving correctly!" | |
| break | |
| else | |
| echo "Attempt $attempt/$max_attempts: Frontend not ready yet..." | |
| sleep 2 | |
| attempt=$((attempt + 1)) | |
| fi | |
| done | |
| if [ $attempt -gt $max_attempts ]; then | |
| echo "Frontend server failed to start properly" | |
| kill $FRONTEND_PID 2>/dev/null || true | |
| exit 1 | |
| fi | |
| # Clean up | |
| kill $FRONTEND_PID 2>/dev/null || true | |
| echo "Frontend server test completed successfully!" | |
| integration-test: | |
| runs-on: ubuntu-latest | |
| needs: test | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20.x' | |
| cache: 'npm' | |
| - name: Set up Python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install .[dev] | |
| pip install -r requirements.txt | |
| npm ci | |
| - name: Build frontend | |
| run: npm run build | |
| - name: Test full application stack | |
| run: | | |
| # Start both frontend and backend | |
| echo "Starting full application stack..." | |
| # Start backend | |
| python -m src.backend & | |
| BACKEND_PID=$! | |
| # Start frontend preview | |
| npm run preview & | |
| FRONTEND_PID=$! | |
| # Wait for both services | |
| sleep 15 | |
| # Test both services are running | |
| echo "Testing backend..." | |
| if ! curl -f http://localhost:8000/ 2>/dev/null; then | |
| echo "Backend failed to start" | |
| kill $BACKEND_PID $FRONTEND_PID 2>/dev/null || true | |
| exit 1 | |
| fi | |
| echo "Testing frontend..." | |
| if ! curl -f http://localhost:4173/ 2>/dev/null; then | |
| echo "Frontend failed to start" | |
| kill $BACKEND_PID $FRONTEND_PID 2>/dev/null || true | |
| exit 1 | |
| fi | |
| echo "Both services are running successfully!" | |
| # Clean up | |
| kill $BACKEND_PID $FRONTEND_PID 2>/dev/null || true | |
| echo "Integration test completed successfully!" |