@@ -184,7 +184,24 @@ jobs:
184184 docker compose -f docker-compose.prod-ci.yml -p prod pull web celerys
185185
186186 docker compose -f docker-compose.prod-ci.yml -p prod run --rm web python manage.py migrate
187- docker compose -f docker-compose.prod-ci.yml -p prod up -d
187+ docker compose -f docker-compose.prod-ci.yml -p prod up -d --force-recreate
188+ expected_image="ghcr.io/procollab-github/api:${IMAGE_TAG}"
189+ for service in web celerys; do
190+ container="$(docker compose -f docker-compose.prod-ci.yml -p prod ps -q "$service")"
191+ if [ -z "$container" ]; then
192+ echo "Service ${service} has no running container" >&2
193+ docker compose -f docker-compose.prod-ci.yml -p prod ps >&2 || true
194+ exit 1
195+ fi
196+
197+ actual_image="$(docker inspect -f '{{.Config.Image}}' "$container")"
198+ echo "Service ${service}: container=${container} image=${actual_image}"
199+ if [ "$actual_image" != "$expected_image" ]; then
200+ echo "Service ${service} uses unexpected image: ${actual_image}, expected ${expected_image}" >&2
201+ docker compose -f docker-compose.prod-ci.yml -p prod ps >&2 || true
202+ exit 1
203+ fi
204+ done
188205 if [ "$(id -u)" -eq 0 ]; then
189206 nginx -t
190207 systemctl reload nginx
@@ -210,12 +227,22 @@ jobs:
210227 exit 1
211228 fi
212229
230+ docker compose -f docker-compose.prod-ci.yml -p prod ps
231+
213232 celery_status=""
214233 celery_ping=""
215- for attempt in $(seq 1 24); do
216- celery_status="$(docker inspect -f '{{.State.Status}}' api_celery 2>/dev/null || true)"
234+ celery_container=""
235+ for attempt in $(seq 1 12); do
236+ celery_container="$(docker compose -f docker-compose.prod-ci.yml -p prod ps -q celerys 2>/dev/null || true)"
237+ if [ -n "$celery_container" ]; then
238+ celery_status="$(docker inspect -f '{{.State.Status}}' "$celery_container" 2>/dev/null || true)"
239+ else
240+ celery_status="missing"
241+ fi
242+
243+ echo "Celery check attempt ${attempt}: container=${celery_container:-missing} status=${celery_status}"
217244 if [ "$celery_status" = "running" ]; then
218- celery_ping="$(docker compose -f docker-compose.prod-ci.yml -p prod exec -T celerys sh -lc 'celery -A procollab inspect ping --timeout=10 ' 2>&1 || true)"
245+ celery_ping="$(docker compose -f docker-compose.prod-ci.yml -p prod exec -T celerys sh -lc 'celery -A procollab inspect ping --timeout=15 ' 2>&1 || true)"
219246 printf '%s\n' "$celery_ping"
220247 if printf '%s\n' "$celery_ping" | grep -q 'pong'; then
221248 echo "Celery check passed on attempt ${attempt}"
@@ -226,12 +253,11 @@ jobs:
226253 sleep 5
227254 done
228255
229- if [ "$celery_status" != "running" ]; then
230- echo "Celery container is not running: ${celery_status}" >&2
256+ if [ "$celery_status" != "running" ] || ! printf '%s\n' "$celery_ping" | grep -q 'pong'; then
257+ echo "Celery check failed: status=${celery_status}" >&2
258+ docker compose -f docker-compose.prod-ci.yml -p prod ps >&2 || true
259+ docker compose -f docker-compose.prod-ci.yml -p prod logs --tail=200 celerys >&2 || true
260+ docker compose -f docker-compose.prod-ci.yml -p prod logs --tail=100 redis >&2 || true
261+ docker compose -f docker-compose.prod-ci.yml -p prod logs --tail=100 web >&2 || true
231262 exit 1
232263 fi
233-
234- printf '%s\n' "$celery_ping" | grep -q 'pong' || {
235- echo "Celery ping failed" >&2
236- exit 1
237- }
0 commit comments