Spaces:
Running
Running
| name: MD Simulation Health Check | |
| on: | |
| push: | |
| branches: [MD-integration] | |
| workflow_dispatch: | |
| concurrency: | |
| group: md-simulation-health-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| md-simulation-health-check: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| lfs: true | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Laravel image | |
| run: docker build -t ailixir-laravel . | |
| - name: Build MD simulation image | |
| run: docker build -t md-simulation ai_apps/Protein-Ligand-MD-Simulation/ | |
| - name: Create Docker network | |
| run: docker network create ailixir-md | |
| - name: Start Laravel API | |
| run: | | |
| docker run -d --name ailixir-laravel \ | |
| --network ailixir-md \ | |
| -p 8000:8000 \ | |
| --env-file docker/laravel.env \ | |
| -e MD_SIMULATION_URL=http://md-api:5005 \ | |
| ailixir-laravel | |
| - name: Start Redis | |
| run: | | |
| docker run -d --name md-redis \ | |
| --network ailixir-md \ | |
| --network-alias md-redis \ | |
| redis:7-alpine | |
| - name: Start MD Simulation API | |
| run: | | |
| docker run -d --name md-api \ | |
| --network ailixir-md \ | |
| -p 5005:5005 \ | |
| -e REDIS_HOST=md-redis \ | |
| -e REDIS_PORT=6379 \ | |
| -e USE_REDIS=true \ | |
| -e OPENMM_PLATFORM=CPU \ | |
| -e FLASK_HOST=0.0.0.0 \ | |
| -e FLASK_PORT=5005 \ | |
| -e MD_DATA_DIR=/app/data \ | |
| -e LOG_LEVEL=INFO \ | |
| md-simulation | |
| - name: Wait for Laravel API to be ready | |
| run: | | |
| echo "Waiting for Laravel API to be ready..." | |
| for i in $(seq 1 30); do | |
| if curl -sf http://localhost:8000/ > /dev/null 2>&1; then | |
| echo "Laravel API is ready" | |
| exit 0 | |
| fi | |
| echo "Waiting for Laravel ($i/30)..." | |
| sleep 2 | |
| done | |
| docker logs ailixir-laravel | |
| exit 1 | |
| - name: Wait for MD Simulation API to be healthy | |
| run: | | |
| echo "Waiting for MD Simulation API to be healthy..." | |
| for i in $(seq 1 60); do | |
| if curl -sf http://localhost:5005/health > /dev/null 2>&1; then | |
| echo "MD Simulation API is healthy" | |
| exit 0 | |
| fi | |
| echo "Waiting for MD API ($i/60)..." | |
| sleep 5 | |
| done | |
| docker logs md-api | |
| exit 1 | |
| - name: Test MD simulation health via Laravel proxy | |
| run: | | |
| echo "GET /api/md-simulation/health via Laravel proxy" | |
| RESPONSE=$(curl -sf http://localhost:8000/api/md-simulation/health) | |
| echo "$RESPONSE" | |
| STATUS=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('status'))") | |
| if [ "$STATUS" != "ok" ]; then | |
| echo "Expected status 'ok', got '$STATUS'" | |
| exit 1 | |
| fi | |
| echo "MD Simulation service is healthy via Laravel proxy!" | |
| - name: Dump logs on failure | |
| if: failure() | |
| run: | | |
| docker logs ailixir-laravel || true | |
| docker logs md-api || true | |
| docker logs md-redis || true | |
| - name: Cleanup | |
| if: always() | |
| run: | | |
| docker rm -f ailixir-laravel md-api md-redis 2>/dev/null || true | |
| docker network rm ailixir-md 2>/dev/null || true | |