diff --git a/search-compose.sh b/search-compose.sh new file mode 100755 index 00000000..d81fdc7c --- /dev/null +++ b/search-compose.sh @@ -0,0 +1,97 @@ +#!/bin/bash +# Search for compose files matching specified criteria +# +# Usage: +# ./search-compose.sh [client] [node] +# +# Required parameters: +# network: Network name (e.g., ethereum, arbitrum, polygon) +# chain: Chain name (e.g., mainnet, sepolia, one) +# type: Database type (archive, pruned, minimal, full) +# +# Optional parameters: +# client: Client name (e.g., geth, erigon3, reth, besu) +# node: Node implementation (e.g., nimbus, lighthouse, dtl) +# +# Output: +# Prints matching compose file paths (without .yml extension), one per line + +dir="$(dirname "$0")" +registry_file="${dir}/compose_registry.json" + +if [ ! -f "$registry_file" ]; then + echo "Error: compose_registry.json not found at $registry_file" >&2 + exit 1 +fi + +# Check if jq is available +if ! command -v jq &> /dev/null; then + echo "Error: jq is required but not installed" >&2 + exit 1 +fi + +# Parse command-line arguments +if [ $# -lt 3 ]; then + echo "Usage: $0 [client] [node]" >&2 + echo "" >&2 + echo "Required parameters:" >&2 + echo " network: Network name (e.g., ethereum, arbitrum, polygon)" >&2 + echo " chain: Chain name (e.g., mainnet, sepolia, one)" >&2 + echo " type: Database type (archive, pruned, minimal, full)" >&2 + echo "" >&2 + echo "Optional parameters:" >&2 + echo " client: Client name (e.g., geth, erigon3, reth, besu)" >&2 + echo " node: Node implementation (e.g., nimbus, lighthouse, dtl)" >&2 + exit 1 +fi + +network="$1" +chain="$2" +type="$3" +client="${4:-}" +node="${5:-}" + +# Build jq filter +condition_parts=( + ".network == \"$network\"" + ".chain == \"$chain\"" + ".type == \"$type\"" +) + +if [ -n "$client" ]; then + condition_parts+=(".client == \"$client\"") +fi + +if [ -n "$node" ]; then + # Handle null node values - if node is specified, it must match (or be null if searching for null) + if [ "$node" = "null" ] || [ "$node" = "NULL" ]; then + condition_parts+=(".node == null") + else + condition_parts+=(".node == \"$node\"") + fi +fi + +# Join conditions with " and " +condition_str="" +for i in "${!condition_parts[@]}"; do + if [ $i -eq 0 ]; then + condition_str="${condition_parts[$i]}" + else + condition_str="${condition_str} and ${condition_parts[$i]}" + fi +done + +# Query the registry and extract compose_file paths +jq_filter=".[] | select($condition_str) | .compose_file" + +# Execute query and output results +results=$(jq -r "$jq_filter" "$registry_file") + +if [ -z "$results" ]; then + # No results found + exit 1 +else + # Output each result on a separate line + echo "$results" +fi +