113 lines
4.5 KiB
Bash
113 lines
4.5 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
MATRIX_ROOT="${FRONTEND_MATRIX_ROOT:-$ROOT_DIR/artifacts/frontend-acceptance-matrix}"
|
|
TS="${TS:-$(date +%s)}"
|
|
MATRIX_DIR="${MATRIX_DIR:-$MATRIX_ROOT/${TS}_frontend_matrix}"
|
|
|
|
BROWSER_SMOKE_SCRIPT="${BROWSER_SMOKE_SCRIPT:-$ROOT_DIR/scripts/test/verify_frontend_smoke.sh}"
|
|
PORTAL_ACCEPTANCE_SCRIPT="${PORTAL_ACCEPTANCE_SCRIPT:-$ROOT_DIR/scripts/acceptance/verify_portal_catalog_ui.sh}"
|
|
PUBLIC_PORTAL_BROWSER_SCRIPT="${PUBLIC_PORTAL_BROWSER_SCRIPT:-$ROOT_DIR/scripts/acceptance/verify_public_portal_browser.sh}"
|
|
ACCOUNTS_ACCEPTANCE_SCRIPT="${ACCOUNTS_ACCEPTANCE_SCRIPT:-$ROOT_DIR/scripts/acceptance/verify_accounts_admin_ui.sh}"
|
|
ROUTE_MATRIX_SCRIPT="${ROUTE_MATRIX_SCRIPT:-$ROOT_DIR/scripts/acceptance/verify_route_acceptance_matrix.sh}"
|
|
PROVIDER_ADMIN_SCRIPT="${PROVIDER_ADMIN_SCRIPT:-$ROOT_DIR/scripts/acceptance/verify_provider_admin_actions.sh}"
|
|
RUN_PUBLIC_PORTAL_BROWSER="${RUN_PUBLIC_PORTAL_BROWSER:-0}"
|
|
|
|
mkdir -p "$MATRIX_DIR"
|
|
|
|
run_step() {
|
|
local name="$1"
|
|
shift
|
|
echo "==> $name"
|
|
ARTIFACT_DIR="$MATRIX_DIR/$name" "$@" >"$MATRIX_DIR/$name.stdout.txt" 2>"$MATRIX_DIR/$name.stderr.txt"
|
|
}
|
|
|
|
mark_skip() {
|
|
local name="$1"
|
|
local reason="$2"
|
|
printf '%s\n' "$reason" >"$MATRIX_DIR/$name.skip.txt"
|
|
}
|
|
|
|
has_crm_auth() {
|
|
[[ -n "${CRM_ADMIN_TOKEN:-}" ]] || { [[ -n "${CRM_ADMIN_USERNAME:-}" ]] && [[ -n "${CRM_ADMIN_PASSWORD:-}" ]]; }
|
|
}
|
|
|
|
run_step browser_smoke bash "$BROWSER_SMOKE_SCRIPT"
|
|
run_step portal_catalog bash "$PORTAL_ACCEPTANCE_SCRIPT"
|
|
|
|
if [[ "$RUN_PUBLIC_PORTAL_BROWSER" == "1" ]]; then
|
|
run_step portal_public_browser bash "$PUBLIC_PORTAL_BROWSER_SCRIPT"
|
|
else
|
|
mark_skip portal_public_browser "set RUN_PUBLIC_PORTAL_BROWSER=1 to execute public portal browser verification"
|
|
fi
|
|
|
|
if [[ -n "${CRM_BASE:-}" ]] && has_crm_auth; then
|
|
run_step accounts_admin bash "$ACCOUNTS_ACCEPTANCE_SCRIPT"
|
|
else
|
|
mark_skip accounts_admin "missing CRM_BASE or CRM auth; set CRM_BASE with CRM_ADMIN_TOKEN or CRM_ADMIN_USERNAME/CRM_ADMIN_PASSWORD"
|
|
fi
|
|
|
|
if [[ -n "${CRM_BASE:-}" ]] && has_crm_auth && [[ -n "${SHADOW_HOST_ID:-}" ]] && [[ -n "${SHADOW_GROUP_ID:-}" ]] && { [[ -n "${SUBSCRIPTION_USER_ID:-}" ]] || [[ -n "${GATEWAY_API_KEY:-}" ]]; }; then
|
|
run_step route_matrix bash "$ROUTE_MATRIX_SCRIPT"
|
|
else
|
|
mark_skip route_matrix "missing CRM auth or route data-plane env; require CRM_BASE, auth, SHADOW_HOST_ID, SHADOW_GROUP_ID, and SUBSCRIPTION_USER_ID or GATEWAY_API_KEY"
|
|
fi
|
|
|
|
if [[ -n "${CRM_BASE:-}" ]] && has_crm_auth && [[ -n "${ACCESS_API_KEY:-}" ]] && [[ -n "${PROVIDER_KEYS:-}" ]]; then
|
|
run_step provider_admin bash "$PROVIDER_ADMIN_SCRIPT"
|
|
else
|
|
mark_skip provider_admin "missing provider admin env; require CRM_BASE, auth, ACCESS_API_KEY, and PROVIDER_KEYS"
|
|
fi
|
|
|
|
python3 - "$MATRIX_DIR" >"$MATRIX_DIR/summary.json" <<'PY'
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
matrix_dir = Path(sys.argv[1])
|
|
|
|
def load_json(path):
|
|
return json.loads(path.read_text(encoding="utf-8"))
|
|
|
|
def step_result(name, summary_file):
|
|
step_dir = matrix_dir / name
|
|
if step_dir.exists():
|
|
return {"status": "ok", "artifact_dir": str(step_dir), "summary": load_json(step_dir / summary_file)}
|
|
skip_file = matrix_dir / f"{name}.skip.txt"
|
|
if skip_file.exists():
|
|
return {"status": "skipped", "reason": skip_file.read_text(encoding="utf-8").strip()}
|
|
return {"status": "missing"}
|
|
|
|
browser = step_result("browser_smoke", "99-summary.json")
|
|
portal = step_result("portal_catalog", "99-summary.json")
|
|
portal_public_browser = step_result("portal_public_browser", "99-summary.json")
|
|
accounts = step_result("accounts_admin", "99-summary.json")
|
|
route = step_result("route_matrix", "summary.json")
|
|
provider = step_result("provider_admin", "99-summary.json")
|
|
|
|
summary = {
|
|
"matrix_dir": str(matrix_dir),
|
|
"steps": {
|
|
"browser_smoke": browser,
|
|
"portal_catalog": portal,
|
|
"portal_public_browser": portal_public_browser,
|
|
"accounts_admin": accounts,
|
|
"route_matrix": route,
|
|
"provider_admin": provider,
|
|
},
|
|
"page_mapping": {
|
|
"portal": ["browser_smoke", "portal_catalog", "portal_public_browser"],
|
|
"admin_index": ["browser_smoke"],
|
|
"logical_groups": ["browser_smoke", "route_matrix"],
|
|
"route_health": ["browser_smoke", "route_matrix"],
|
|
"accounts": ["browser_smoke", "accounts_admin"],
|
|
"providers": ["browser_smoke", "provider_admin"],
|
|
"batch_import": ["browser_smoke"],
|
|
},
|
|
}
|
|
print(json.dumps(summary, ensure_ascii=False, indent=2))
|
|
PY
|
|
|
|
cat "$MATRIX_DIR/summary.json"
|