- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control. - Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities. - Created .gitmodules to include OpenZeppelin contracts as a submodule. - Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment. - Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks. - Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring. - Created scripts for resource import and usage validation across non-US regions. - Added tests for CCIP error handling and integration to ensure robust functionality. - Included various new files and directories for the orchestration portal and deployment scripts.
138 lines
4.1 KiB
Bash
Executable File
138 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Generate scripts inventory and command index (local-only)
|
|
# Outputs:
|
|
# - docs/SCRIPTS_INVENTORY.md
|
|
# - docs/COMMANDS_INDEX.md
|
|
|
|
set -euo pipefail
|
|
set +e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd)"
|
|
source "/home/intlc/projects/smom-dbis-138/scripts/lib/init.sh"
|
|
ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
source "$ROOT_DIR/scripts/lib/init.sh"
|
|
set -e
|
|
|
|
QUIET=0
|
|
LIMIT=30
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--quiet) QUIET=1; shift ;;
|
|
--limit) LIMIT="$2"; shift 2 ;;
|
|
*) echo "Unknown arg: $1"; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
DOC_INV="$ROOT_DIR/docs/SCRIPTS_INVENTORY.md"
|
|
DOC_CMD="$ROOT_DIR/docs/COMMANDS_INDEX.md"
|
|
mkdir -p "$ROOT_DIR/docs"
|
|
|
|
emit() { if [ $QUIET -eq 0 ]; then echo -e "$@"; fi }
|
|
|
|
ensure_azure_cli || true
|
|
|
|
# Collect scripts list (exclude lib)
|
|
mapfile -t ALL_SCRIPTS < <(cd "$ROOT_DIR" && find scripts -type f -name '*.sh' ! -path '*/lib/*' | sort)
|
|
|
|
total_count=${#ALL_SCRIPTS[@]}
|
|
emit "Found $total_count shell scripts (excluding scripts/lib)."
|
|
|
|
# Build per-file metrics
|
|
tmp_metrics=$(mktemp)
|
|
{
|
|
printf "path\tlines\tsubdir\thas_lib\thas_color_vars\thas_manual_az\tcalls\n"
|
|
for f in "${ALL_SCRIPTS[@]}"; do
|
|
lines=$(wc -l < "$f" | tr -d ' ')
|
|
rel=${f#"$ROOT_DIR/"}
|
|
subdir=$(echo "$rel" | awk -F'/' '{print ($2? $2 : "root")}')
|
|
if grep -qE '^SCRIPT_DIR=.*BASH_SOURCE' "$f" && grep -q 'source\s\+"\$SCRIPT_DIR/\.\./lib/init\.sh"' "$f"; then
|
|
has_lib=1
|
|
else
|
|
has_lib=0
|
|
fi
|
|
if grep -qE '^[[:space:]]*(RED|GREEN|YELLOW|BLUE|CYAN|NC)=' "$f"; then
|
|
color=1
|
|
else
|
|
color=0
|
|
fi
|
|
if grep -qE '(^|[[:space:]])(command -v[[:space:]]+az|az[[:space:]]+account[[:space:]]+(show|set))' "$f"; then
|
|
manaz=1
|
|
else
|
|
manaz=0
|
|
fi
|
|
calls=$(grep -hoE 'scripts/[A-Za-z0-9_./-]+\.sh' "$f" | sort -u | tr '\n' ' ' || true)
|
|
printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\n" "$rel" "$lines" "$subdir" "$has_lib" "$color" "$manaz" "$calls"
|
|
done
|
|
} > "$tmp_metrics"
|
|
|
|
# Generate SCRIPTS_INVENTORY.md
|
|
{
|
|
echo "# Scripts Inventory"
|
|
echo
|
|
echo "Generated: $(date -Iseconds)"
|
|
echo
|
|
echo "Total scripts (excluding scripts/lib): $total_count"
|
|
echo
|
|
echo "## By directory"
|
|
echo
|
|
awk -F"\t" 'NR>1{c[$3]++} END{for(k in c){printf "- %s: %d\n", k, c[k]} }' "$tmp_metrics"
|
|
echo
|
|
echo "## Top ${LIMIT} scripts by line count"
|
|
echo
|
|
echo "| # | Script | Lines | Uses lib | Color vars | Manual az checks |"
|
|
echo "|---:|:------|------:|:--------:|:----------:|:----------------:|"
|
|
awk -F"\t" 'NR>1{print $0}' "$tmp_metrics" | sort -t$'\t' -k2,2nr | head -n "$LIMIT" |
|
|
nl -w2 -s' | ' |
|
|
awk -F"\t" '{printf "%s | `%s` | %s | %s | %s | %s |\n", $1, $2, $3, ($4?"yes":"no"), ($5?"yes":"no"), ($6?"yes":"no")}'
|
|
|
|
echo
|
|
echo "## Library adoption status"
|
|
echo
|
|
total=$(awk 'END{print NR-1}' "$tmp_metrics")
|
|
with=$(awk -F"\t" 'NR>1&&$4==1{c++} END{print c+0}' "$tmp_metrics")
|
|
echo "- With lib/init.sh: $with / $total"
|
|
echo "- Without lib/init.sh: "$((total-with))
|
|
|
|
echo
|
|
echo "## Script call graph (edges)"
|
|
echo
|
|
echo "Format: caller -> callee"
|
|
awk -F"\t" 'NR>1 && $7!=""{ split($7,a," "); for(i in a){print "- " $1 " -> " a[i]} }' "$tmp_metrics"
|
|
} > "$DOC_INV"
|
|
|
|
# Generate COMMANDS_INDEX.md from Makefile
|
|
{
|
|
echo "# Commands Index (Makefile → Script Map)"
|
|
echo
|
|
echo "Generated: $(date -Iseconds)"
|
|
echo
|
|
echo "| Target | Script |"
|
|
echo "|:------ |:-------|"
|
|
awk '
|
|
BEGIN{t=""}
|
|
/^[A-Za-z0-9_.-]:/ { next }
|
|
/^[A-Za-z0-9_.-]+:/ { split($0,a,":"); t=a[1]; next }
|
|
/^[\t]/ {
|
|
if ($0 ~ /scripts\/.*\.sh/) {
|
|
match($0, /scripts\/[A-Za-z0-9_\/.+-]+\.sh([^ ]*)?/, m);
|
|
if (m[0] != "") { gsub(/^\t+/,"",$0); printf "| %s | \`%s\` |\n", t, m[0]; }
|
|
}
|
|
}
|
|
' "$ROOT_DIR/epakefile" 2>/dev/null || true
|
|
awk '
|
|
BEGIN{t=""}
|
|
/^[A-Za-z0-9_.-]+:/ { split($0,a,":"); t=a[1]; next }
|
|
/^[\t]/ {
|
|
if ($0 ~ /scripts\/.*\.sh/) {
|
|
match($0, /scripts\/[A-Za-z0-9_\/.+-]+\.sh([^ ]*)?/, m);
|
|
if (m[0] != "") { gsub(/^\t+/,"",$0); printf "| %s | \`%s\` |\n", t, m[0]; }
|
|
}
|
|
}
|
|
' "$ROOT_DIR/Makefile"
|
|
} > "$DOC_CMD"
|
|
|
|
emit "Wrote: $DOC_INV"
|
|
emit "Wrote: $DOC_CMD"
|
|
rm -f "$tmp_metrics"
|
|
exit 0
|