Skip to content

Docker workflow

Docker workflow #16

name: Docker Build and Verify
on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
jobs:
build-and-test:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Docker images
working-directory: src/services/simulation_service/core
run: |
docker compose build --progress=plain
- name: Verify Docker images exist
run: |
docker images | grep simulation_server
docker images | grep simulation_worker
- name: Start simulation cluster
working-directory: src/services/simulation_service/core
run: |
docker compose up -d --scale worker=2
- name: Wait for services to be healthy
run: |
echo "Waiting for simulation server to be healthy..."
timeout 120s bash -c 'until docker compose -f src/services/simulation_service/core/docker-compose.yml ps | grep simulation_server | grep -q "healthy"; do sleep 2; done'
- name: Verify services are running
working-directory: src/services/simulation_service/core
run: |
docker compose ps
docker compose logs server
docker compose logs worker
- name: Check container resource usage
run: |
docker stats --no-stream
- name: Test scaling workers
working-directory: src/services/simulation_service/core
run: |
docker compose up -d --scale worker=3
sleep 10
worker_count=$(docker compose ps worker --format json | jq length)
echo "Worker count: $worker_count"
if [ "$worker_count" -ne 3 ]; then
echo "Expected 3 workers, got $worker_count"
exit 1
fi
- name: Cleanup simulation cluster
if: always()
working-directory: src/services/simulation_service/core
run: |
docker compose down -v
docker compose logs > /tmp/docker-logs.txt || true
- name: Upload Docker logs
if: failure()
uses: actions/upload-artifact@v4
with:
name: docker-logs
path: /tmp/docker-logs.txt
- name: Clean up Docker resources
if: always()
run: |
docker system prune -f