fix(ci): probe runtime backend from inside container
This commit is contained in:
@@ -321,6 +321,43 @@ jobs:
|
||||
DB_PASSWORD="plex_password"
|
||||
DB_URL="postgresql://plex_user:${DB_PASSWORD}@${DB_CONTAINER}:5432/plex_playlist"
|
||||
|
||||
fetch_backend_endpoint() {
|
||||
endpoint_path="$1"
|
||||
output_file="$2"
|
||||
probe_tmp="$(mktemp)"
|
||||
|
||||
if ! docker exec "${BACKEND_CONTAINER}" python -c "$(printf '%s\n' \
|
||||
'import sys' \
|
||||
'import urllib.error' \
|
||||
'import urllib.request' \
|
||||
'endpoint_path = sys.argv[1]' \
|
||||
'url = f"http://127.0.0.1:8000{endpoint_path}"' \
|
||||
'try:' \
|
||||
' with urllib.request.urlopen(url, timeout=2) as response:' \
|
||||
' body = response.read().decode("utf-8", errors="replace")' \
|
||||
' print(response.status)' \
|
||||
' print(body)' \
|
||||
'except urllib.error.HTTPError as err:' \
|
||||
' body = err.read().decode("utf-8", errors="replace")' \
|
||||
' print(err.code)' \
|
||||
' print(body)' \
|
||||
'except Exception:' \
|
||||
' print("000")' \
|
||||
' print("")'
|
||||
)" "${endpoint_path}" >"${probe_tmp}" 2>/dev/null
|
||||
then
|
||||
: >"${output_file}"
|
||||
rm -f "${probe_tmp}"
|
||||
echo "000"
|
||||
return 0
|
||||
fi
|
||||
|
||||
http_code="$(head -n 1 "${probe_tmp}")"
|
||||
tail -n +2 "${probe_tmp}" >"${output_file}"
|
||||
rm -f "${probe_tmp}"
|
||||
echo "${http_code}"
|
||||
}
|
||||
|
||||
dump_failure_context() {
|
||||
echo "=== Runtime Integration Failure Context ==="
|
||||
docker ps -a || true
|
||||
@@ -417,7 +454,7 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
health_code="$(curl -sS -o /tmp/blackbox-health.json -w "%{http_code}" "http://127.0.0.1:18000/health" || true)"
|
||||
health_code="$(fetch_backend_endpoint "/health" /tmp/blackbox-health.json)"
|
||||
if [ "${health_code}" = "200" ]; then
|
||||
backend_ready=true
|
||||
break
|
||||
@@ -431,7 +468,7 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
root_code="$(curl -sS -o /tmp/blackbox-root.json -w "%{http_code}" "http://127.0.0.1:18000/" || true)"
|
||||
root_code="$(fetch_backend_endpoint "/" /tmp/blackbox-root.json)"
|
||||
if [ "${root_code}" != "200" ] || ! grep -q 'Plex Playlist Backend API' /tmp/blackbox-root.json; then
|
||||
echo "❌ Root endpoint validation failed"
|
||||
cat /tmp/blackbox-root.json 2>/dev/null || true
|
||||
@@ -439,7 +476,7 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
compatibility_code="$(curl -sS -o /tmp/blackbox-compatibility.json -w "%{http_code}" "http://127.0.0.1:18000/compatibility" || true)"
|
||||
compatibility_code="$(fetch_backend_endpoint "/compatibility" /tmp/blackbox-compatibility.json)"
|
||||
if [ "${compatibility_code}" != "200" ] || ! grep -q '"ok":true' /tmp/blackbox-compatibility.json; then
|
||||
echo "❌ Compatibility endpoint validation failed"
|
||||
cat /tmp/blackbox-compatibility.json 2>/dev/null || true
|
||||
@@ -447,7 +484,7 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
health_code="$(curl -sS -o /tmp/blackbox-health.json -w "%{http_code}" "http://127.0.0.1:18000/health" || true)"
|
||||
health_code="$(fetch_backend_endpoint "/health" /tmp/blackbox-health.json)"
|
||||
if [ "${health_code}" != "200" ] || ! grep -q '"status":"healthy"' /tmp/blackbox-health.json; then
|
||||
echo "❌ Health endpoint validation failed"
|
||||
cat /tmp/blackbox-health.json 2>/dev/null || true
|
||||
|
||||
Reference in New Issue
Block a user