fix(ci): probe runtime backend from inside container
This commit is contained in:
@@ -321,6 +321,43 @@ jobs:
|
|||||||
DB_PASSWORD="plex_password"
|
DB_PASSWORD="plex_password"
|
||||||
DB_URL="postgresql://plex_user:${DB_PASSWORD}@${DB_CONTAINER}:5432/plex_playlist"
|
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() {
|
dump_failure_context() {
|
||||||
echo "=== Runtime Integration Failure Context ==="
|
echo "=== Runtime Integration Failure Context ==="
|
||||||
docker ps -a || true
|
docker ps -a || true
|
||||||
@@ -417,7 +454,7 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
if [ "${health_code}" = "200" ]; then
|
||||||
backend_ready=true
|
backend_ready=true
|
||||||
break
|
break
|
||||||
@@ -431,7 +468,7 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
if [ "${root_code}" != "200" ] || ! grep -q 'Plex Playlist Backend API' /tmp/blackbox-root.json; then
|
||||||
echo "❌ Root endpoint validation failed"
|
echo "❌ Root endpoint validation failed"
|
||||||
cat /tmp/blackbox-root.json 2>/dev/null || true
|
cat /tmp/blackbox-root.json 2>/dev/null || true
|
||||||
@@ -439,7 +476,7 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
if [ "${compatibility_code}" != "200" ] || ! grep -q '"ok":true' /tmp/blackbox-compatibility.json; then
|
||||||
echo "❌ Compatibility endpoint validation failed"
|
echo "❌ Compatibility endpoint validation failed"
|
||||||
cat /tmp/blackbox-compatibility.json 2>/dev/null || true
|
cat /tmp/blackbox-compatibility.json 2>/dev/null || true
|
||||||
@@ -447,7 +484,7 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
if [ "${health_code}" != "200" ] || ! grep -q '"status":"healthy"' /tmp/blackbox-health.json; then
|
||||||
echo "❌ Health endpoint validation failed"
|
echo "❌ Health endpoint validation failed"
|
||||||
cat /tmp/blackbox-health.json 2>/dev/null || true
|
cat /tmp/blackbox-health.json 2>/dev/null || true
|
||||||
|
|||||||
Reference in New Issue
Block a user