diff --git a/.gitea/workflows/promote-master.yaml b/.gitea/workflows/promote-master.yaml index de95c35..b21366e 100644 --- a/.gitea/workflows/promote-master.yaml +++ b/.gitea/workflows/promote-master.yaml @@ -317,6 +317,42 @@ jobs: chmod 600 .env .rollback-meta docker-compose down + + wait_for_container_removal() { + container_name="$1" + attempts=0 + while docker ps -a --format '{{.Names}}' | grep -qx "$container_name"; do + attempts=$((attempts + 1)) + if [ "$attempts" -ge 12 ]; then + echo "Container ${container_name} still exists after waiting for teardown." + docker ps -a --filter "name=^${container_name}$" + return 1 + fi + echo "Waiting for ${container_name} to be removed..." + sleep 5 + done + } + + wait_for_port_release() { + port="$1" + attempts=0 + while docker ps -a --format '{{.ID}} {{.Names}} {{.Ports}} {{.Status}}' | grep -E "(^|[[:space:]])0\.0\.0\.0:${port}->|:::${port}->" >/dev/null 2>&1; do + attempts=$((attempts + 1)) + if [ "$attempts" -ge 12 ]; then + echo "Port ${port} is still allocated after teardown. Blocking container(s):" + docker ps -a --format '{{.ID}} {{.Names}} {{.Ports}} {{.Status}}' | grep -E "(^|[[:space:]])0\.0\.0\.0:${port}->|:::${port}->" || true + return 1 + fi + echo "Waiting for port ${port} to be released..." + sleep 5 + done + } + + wait_for_container_removal chores-app-frontend-prod + wait_for_container_removal chores-app-backend-prod + wait_for_port_release 443 + wait_for_port_release 5001 + docker-compose pull docker-compose up -d