Files
sub2api-cn-relay-manager/scripts/acceptance/verify_frontend_acceptance_matrix.sh
phamnazage-jpg 77b7f7f660
Some checks failed
CI / Build & Test (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / Docker Build (push) Has been cancelled
CI / Release (push) Has been cancelled
feat: harden runtime import and frontend verification workflows
2026-06-04 20:02:36 +08:00

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"