From aa691c1ee21dfc0a9b8b70576c8a927fda6b1c74 Mon Sep 17 00:00:00 2001 From: Luiz Felipe Machado <56140722+luizfelmach@users.noreply.github.com> Date: Tue, 26 May 2026 11:41:07 -0300 Subject: [PATCH] fix(self-hsoted): handle optional services and overrides in test-container-logs (#46099) --- docker/tests/test-container-logs.sh | 68 +++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/docker/tests/test-container-logs.sh b/docker/tests/test-container-logs.sh index 7a32f34b6a6..75ecd100c2a 100644 --- a/docker/tests/test-container-logs.sh +++ b/docker/tests/test-container-logs.sh @@ -13,6 +13,7 @@ set -e pass=0 fail=0 +project_name="${COMPOSE_PROJECT_NAME:-supabase}" fail_msg() { fail=$((fail + 1)) @@ -24,12 +25,56 @@ pass_msg() { echo " PASS: $1" } +# The `docker ps` fallback in the helpers below exists because the script +# doesn't know which compose `-f` flags the user ran `up` with. `docker compose +# ps` only sees services defined in the currently loaded compose files, but +# compose stamps `com.docker.compose.{project,service}` labels at `up` time - +# so a label-based lookup finds the container regardless of which override +# files are active in this shell. + +is_service_running() { + service="$1" + if docker compose ps --services --status running 2>/dev/null | grep -q "^$service$"; then + return 0 + fi + + docker ps --filter "label=com.docker.compose.project=$project_name" \ + --filter "label=com.docker.compose.service=$service" \ + --filter "status=running" \ + --quiet | grep -q '.' +} + +get_container_id() { + service="$1" + + container_id=$(docker compose ps -q "$service" 2>/dev/null || true) + if [ -n "$container_id" ]; then + printf '%s' "$container_id" + return + fi + + container_id=$(docker ps -a \ + --filter "label=com.docker.compose.project=$project_name" \ + --filter "label=com.docker.compose.service=$service" \ + --quiet) + + set -- $container_id + printf '%s' "$1" +} + # Check that a service's logs contain all expected patterns check_logs() { service="$1" shift - logs=$(docker compose logs "$service" 2>/dev/null) + logs=$(docker compose logs "$service" 2>/dev/null || true) + if [ -z "$logs" ]; then + container_id=$(get_container_id "$service") + if [ -n "$container_id" ]; then + logs=$(docker logs "$container_id" 2>&1 || true) + fi + fi + if [ -z "$logs" ]; then fail_msg "$service (no logs found)" return @@ -45,6 +90,17 @@ check_logs() { pass_msg "$service" } +check_logs_if_running() { + service="$1" + shift + + if is_service_running "$service"; then + check_logs "$service" "$@" + else + pass_msg "$service (skipped: service not running)" + fi +} + echo "" echo "=== Checking service startup logs ===" echo "" @@ -55,9 +111,13 @@ check_logs db \ check_logs auth \ 'db worker started' -check_logs kong \ +check_logs_if_running kong \ 'init.lua.*declarative config loaded' +check_logs_if_running api-gw \ + 'Envoy configuration generated successfully' \ + 'Starting Envoy...' + check_logs rest \ 'Schema cache loaded in.*milliseconds' @@ -79,7 +139,7 @@ check_logs meta \ check_logs functions \ 'main function started' -check_logs analytics \ +check_logs_if_running analytics \ 'Access LogflareWeb.Endpoint at http://localhost:4000' \ 'Executing startup tasks' \ 'Ensuring single tenant user is seeded' @@ -88,7 +148,7 @@ check_logs supavisor \ 'Connected to Postgres database' \ 'HEAD /api/health$' -check_logs vector \ +check_logs_if_running vector \ 'Vector has started' check_logs imgproxy \