#!/usr/bin/env bash # Check external dependencies that cannot be satisfied by repo-only changes. # Default: fail when any external blocker is unresolved. # Use --advisory to always exit 0 while still printing blocker status. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" if [[ -f "$PROJECT_ROOT/scripts/lib/load-project-env.sh" ]]; then # shellcheck disable=SC1091 source "$PROJECT_ROOT/scripts/lib/load-project-env.sh" fi ADVISORY=0 [[ "${1:-}" == "--advisory" ]] && ADVISORY=1 PASS_COUNT=0 FAIL_COUNT=0 log_ok() { printf '[OK] %s\n' "$1"; } log_block() { printf '[BLOCKED] %s\n' "$1"; } record_pass() { PASS_COUNT=$((PASS_COUNT + 1)) log_ok "$1" } record_fail() { FAIL_COUNT=$((FAIL_COUNT + 1)) log_block "$1" } http_ok() { local url="$1" curl -fsS -m 8 -o /dev/null "$url" } check_url_blocker() { local blocker_id="$1" local label="$2" local url="${3:-}" local hint="$4" if [[ -z "$url" ]]; then record_fail "$blocker_id $label: unresolved. $hint" return 0 fi if http_ok "$url"; then record_pass "$blocker_id $label: reachable at $url" else record_fail "$blocker_id $label: configured but unreachable at $url" fi } check_chain138_ci_rpc() { local blocker_id="EXT-CHAIN138-CI-RPC" local rpc="${CHAIN138_CI_RPC_URL:-${RPC_URL_138_PUBLIC:-${CHAIN138_PUBLIC_RPC_URL:-}}}" if [[ -z "$rpc" ]]; then record_fail "$blocker_id Chain 138 CI RPC: unresolved. Set CHAIN138_CI_RPC_URL (preferred) or RPC_URL_138_PUBLIC to a runner-reachable endpoint." return 0 fi if ! command -v cast >/dev/null 2>&1; then record_fail "$blocker_id Chain 138 CI RPC: cast not available to verify $rpc" return 0 fi local block_number block_number="$(cast block-number --rpc-url "$rpc" 2>/dev/null || true)" if [[ -n "$block_number" ]]; then record_pass "$blocker_id Chain 138 CI RPC: reachable at $rpc (block $block_number)" else record_fail "$blocker_id Chain 138 CI RPC: configured but unreachable at $rpc" fi } echo "=== External Dependency Check ===" echo "" check_url_blocker \ "EXT-DBIS-CORE" \ "dbis_core deployment" \ "${DBIS_CORE_URL:-}" \ "Deploy dbis_core or set DBIS_CORE_URL to an existing reachable instance." check_url_blocker \ "EXT-CC-PAYMENT-ADAPTERS" \ "cc-payment-adapters implementation" \ "${CC_PAYMENT_ADAPTERS_URL:-}" \ "Implement/host cc-payment-adapters and set CC_PAYMENT_ADAPTERS_URL." check_url_blocker \ "EXT-CC-AUDIT-LEDGER" \ "cc-audit-ledger implementation" \ "${CC_AUDIT_LEDGER_URL:-}" \ "Implement/host cc-audit-ledger and set CC_AUDIT_LEDGER_URL." check_url_blocker \ "EXT-CC-SHARED-EVENTS" \ "cc-shared-events implementation" \ "${CC_SHARED_EVENTS_URL:-}" \ "Implement/host cc-shared-events and set CC_SHARED_EVENTS_URL." check_url_blocker \ "EXT-CC-SHARED-SCHEMAS" \ "cc-shared-schemas implementation" \ "${CC_SHARED_SCHEMAS_URL:-}" \ "Implement/host cc-shared-schemas and set CC_SHARED_SCHEMAS_URL." check_url_blocker \ "EXT-FIN-GATEWAY" \ "FIN / Alliance Access gateway" \ "${FIN_GATEWAY_URL:-${ALLIANCE_ACCESS_URL:-}}" \ "Provision a real FIN / Alliance Access gateway and set FIN_GATEWAY_URL or ALLIANCE_ACCESS_URL." check_chain138_ci_rpc echo "" echo "Resolved: $PASS_COUNT" echo "Blocked: $FAIL_COUNT" if (( FAIL_COUNT > 0 )) && (( ADVISORY == 0 )); then exit 1 fi exit 0