#!/usr/bin/env bash set -euo pipefail IFS=$'\n\t' # ── Config ────────────────────────────────────────────────────────────────── readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" readonly SCRIPT_NAME="$(basename "$0")" # ── Helpers ────────────────────────────────────────────────────────────────── log() { echo "[$(date +%T)] $*"; } warn() { echo "[$(date +%T)] WARN: $*" >&2; } die() { echo "[$(date +%T)] ERROR: $*" >&2; exit 1; } require() { for cmd in "$@"; do command -v "$cmd" >/dev/null 2>&1 || die "Required command not found: $cmd" done } # ── Usage ──────────────────────────────────────────────────────────────────── usage() { cat < Options: -h, --help Show this help -v, --verbose Verbose output -n, --dry-run Show what would happen, don't do it EOF exit 0 } # ── Parse args ─────────────────────────────────────────────────────────────── VERBOSE=0 DRY_RUN=0 while [[ $# -gt 0 ]]; do case "$1" in -h|--help) usage ;; -v|--verbose) VERBOSE=1; shift ;; -n|--dry-run) DRY_RUN=1; shift ;; --) shift; break ;; -*) die "Unknown option: $1" ;; *) break ;; esac done # ── Main ───────────────────────────────────────────────────────────────────── require curl jq log "Starting $SCRIPT_NAME" [[ $VERBOSE -eq 1 ]] && log "Verbose mode ON" [[ $DRY_RUN -eq 1 ]] && warn "Dry-run mode — no changes will be made"