#!/usr/bin/env bash set -euo pipefail # === METADATA === SCRIPT_NAME="$(basename "$0")" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" SKILL_ROOT="$(dirname "$SCRIPT_DIR")" # === CONFIGURATION === : "${OUTPUT_DIR:=$SKILL_ROOT/outputs}" # === FUNCTIONS === log_info() { echo "[INFO] $(date -Iseconds) $*"; } log_warn() { echo "[WARN] $(date -Iseconds) $*" >&2; } log_error() { echo "[ERROR] $(date -Iseconds) $*" >&2; } die() { log_error "$@"; exit 1; } check_dependency() { if command -v "$1" &>/dev/null; then log_info "Found: $1 ($(command -v "$1"))" return 0 else log_warn "Missing: $1" return 1 fi } preflight() { log_info "Running preflight checks..." [[ -d "$OUTPUT_DIR" ]] || mkdir -p "$OUTPUT_DIR" } main() { preflight log_info "Starting $SCRIPT_NAME..." local missing=0 # Required dependencies log_info "=== Required Dependencies ===" check_dependency gpg || ((missing++)) check_dependency ssh-keygen || ((missing++)) check_dependency pass || ((missing++)) check_dependency cloudflared || ((missing++)) check_dependency git || ((missing++)) # Optional dependencies log_info "=== Optional Dependencies ===" check_dependency kate || log_info "Kate not found - editor setup will be skipped" check_dependency jq || log_info "jq not found - JSON output will be basic" check_dependency curl || log_info "curl not found - network checks skipped" # Network checks log_info "=== Network Connectivity ===" if command -v curl &>/dev/null; then if curl -s --connect-timeout 5 https://api.cloudflare.com/client/v4/ &>/dev/null; then log_info "Cloudflare API reachable" else log_warn "Cloudflare API unreachable - tunnel setup may fail" fi fi # EU residency check (informational) log_info "=== EU Data Residency ===" log_info "This node will be configured for EU data sovereignty" log_info "Jurisdiction: Ireland (Dublin)" # Check for required parameters log_info "=== Required Parameters ===" [[ -n "${OPERATOR_NAME:-}" ]] && log_info "OPERATOR_NAME: set" || log_warn "OPERATOR_NAME: not set" [[ -n "${OPERATOR_EMAIL:-}" ]] && log_info "OPERATOR_EMAIL: set" || log_warn "OPERATOR_EMAIL: not set" [[ -n "${DOMAIN:-}" ]] && log_info "DOMAIN: set" || log_warn "DOMAIN: not set" [[ -n "${CF_ACCOUNT_ID:-}" ]] && log_info "CF_ACCOUNT_ID: set" || log_warn "CF_ACCOUNT_ID: not set" if [[ $missing -gt 0 ]]; then die "Missing $missing required dependencies. Install them before proceeding." fi log_info "Completed $SCRIPT_NAME - all preflight checks passed" } [[ "${BASH_SOURCE[0]}" == "$0" ]] && main "$@"