Files
explorer-monorepo/scripts/lib/address-inventory.sh
defiQUG 7a7ce770c2 feat(scripts): resolve CCIP/LINK addresses via config inventory
- Add scripts/lib/address-inventory.sh (jq + JSON inventory fallback)
- Wire deployment helper scripts to load_explorer_runtime_env + resolve_address_value
- Persist new LINK to address-inventory.json via persist_inventory_value
- Document config/*.json in config/README.md

Made-with: Cursor
2026-03-27 22:09:32 -07:00

68 lines
2.1 KiB
Bash

#!/usr/bin/env bash
# Shared helpers for explorer-monorepo address inventory access.
_inventory_helper_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
EXPLORER_PROJECT_ROOT="${EXPLORER_PROJECT_ROOT:-$(cd "$_inventory_helper_dir/../.." && pwd)}"
EXPLORER_RUNTIME_ENV_FILE="${EXPLORER_RUNTIME_ENV_FILE:-$EXPLORER_PROJECT_ROOT/.env}"
EXPLORER_PARENT_ENV_FILE="${EXPLORER_PARENT_ENV_FILE:-$EXPLORER_PROJECT_ROOT/../.env}"
EXPLORER_ADDRESS_INVENTORY_FILE="${EXPLORER_ADDRESS_INVENTORY_FILE:-$EXPLORER_PROJECT_ROOT/config/address-inventory.json}"
load_explorer_runtime_env() {
source "$EXPLORER_RUNTIME_ENV_FILE" 2>/dev/null || true
source "$EXPLORER_PARENT_ENV_FILE" 2>/dev/null || true
}
inventory_get() {
local key="${1:-}"
if [ -z "$key" ] || [ ! -f "$EXPLORER_ADDRESS_INVENTORY_FILE" ] || ! command -v jq >/dev/null 2>&1; then
return 1
fi
jq -r --arg key "$key" '.inventory[$key] // empty' "$EXPLORER_ADDRESS_INVENTORY_FILE"
}
resolve_address_value() {
local env_name="${1:-}"
local inventory_key="${2:-$env_name}"
local fallback="${3:-}"
local current="${!env_name:-}"
if [ -n "$current" ]; then
printf '%s\n' "$current"
return 0
fi
current="$(inventory_get "$inventory_key" 2>/dev/null || true)"
if [ -n "$current" ]; then
printf '%s\n' "$current"
return 0
fi
if [ -n "$fallback" ]; then
printf '%s\n' "$fallback"
return 0
fi
return 1
}
persist_inventory_value() {
local key="${1:-}"
local value="${2:-}"
local tmp_file
if [ -z "$key" ] || [ -z "$value" ] || [ ! -f "$EXPLORER_ADDRESS_INVENTORY_FILE" ]; then
return 1
fi
if ! command -v jq >/dev/null 2>&1; then
echo "jq is required to update $EXPLORER_ADDRESS_INVENTORY_FILE" >&2
return 1
fi
tmp_file="$(mktemp)"
jq --arg key "$key" --arg value "$value" --arg updated "$(date -I)" \
'.updated = $updated | .inventory[$key] = $value' \
"$EXPLORER_ADDRESS_INVENTORY_FILE" > "$tmp_file"
mv "$tmp_file" "$EXPLORER_ADDRESS_INVENTORY_FILE"
}