Files
proxmox/scripts/cleanup-markdown-files.sh
defiQUG b3a8fe4496
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
chore: sync all changes to Gitea
- Config, docs, scripts, and backup manifests
- Submodule refs unchanged (m = modified content in submodules)

Made-with: Cursor
2026-03-02 11:37:34 -08:00

326 lines
9.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Markdown Files Cleanup Script
# Automatically organizes markdown files based on analysis
set -euo pipefail
# Load IP configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_ROOT"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Dry-run mode (set to false to actually move files)
DRY_RUN=${DRY_RUN:-true}
# Log file
LOG_FILE="$PROJECT_ROOT/MARKDOWN_CLEANUP_LOG_$(date +%Y%m%d_%H%M%S).log"
log() {
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" | tee -a "$LOG_FILE"
}
warn() {
echo -e "${YELLOW}[WARN]${NC} $1" | tee -a "$LOG_FILE"
}
error() {
echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE"
}
success() {
echo -e "${GREEN}[OK]${NC} $1" | tee -a "$LOG_FILE"
}
move_file() {
local src="$1"
local dest="$2"
local reason="$3"
if [ ! -f "$src" ]; then
warn "File not found: $src"
return 1
fi
# Create destination directory if needed
local dest_dir=$(dirname "$dest")
if [ "$DRY_RUN" = "true" ]; then
log "Would move: $src -> $dest"
log " Reason: $reason"
log " Would create directory: $dest_dir"
else
mkdir -p "$dest_dir"
if mv "$src" "$dest" 2>/dev/null; then
success "Moved: $src -> $dest"
echo " Reason: $reason" >> "$LOG_FILE"
else
error "Failed to move: $src -> $dest"
return 1
fi
fi
}
# Create necessary directories
create_directories() {
log "Creating directory structure..."
local dirs=(
"reports/archive/2026-01-05"
"reports/status"
"reports/inventories"
"reports/analyses"
"docs/09-troubleshooting/archive"
"rpc-translator-138/docs/archive"
)
for dir in "${dirs[@]}"; do
if [ "$DRY_RUN" = "true" ]; then
log "Would create: $dir"
else
mkdir -p "$dir"
success "Created: $dir"
fi
done
}
# Move timestamped inventory files
move_timestamped_inventories() {
log "Moving timestamped inventory files..."
local files=(
"CONTAINER_INVENTORY_20260105_142214.md"
"CONTAINER_INVENTORY_20260105_142314.md"
"CONTAINER_INVENTORY_20260105_142357.md"
"CONTAINER_INVENTORY_20260105_142455.md"
"CONTAINER_INVENTORY_20260105_142712.md"
"CONTAINER_INVENTORY_20260105_142753.md"
"CONTAINER_INVENTORY_20260105_142842.md"
"CONTAINER_INVENTORY_20260105_144309.md"
"CONTAINER_INVENTORY_20260105_153516.md"
"CONTAINER_INVENTORY_20260105_154200.md"
"SERVICE_DEPENDENCIES_20260105_143608.md"
"SERVICE_DEPENDENCIES_20260105_143624.md"
"IP_AVAILABILITY_20260105_143535.md"
"DHCP_CONTAINERS_20260105_143507.md"
)
for file in "${files[@]}"; do
if [ -f "$file" ]; then
move_file "$file" "reports/archive/2026-01-05/$file" "Timestamped inventory/report file"
fi
done
}
# Move status/completion reports from root to reports
move_status_reports() {
log "Moving status/completion reports from root..."
# Pattern matching for status reports
find . -maxdepth 1 -name "*.md" -type f | while read -r file; do
filename=$(basename "$file")
# Skip essential files
if [[ "$filename" == "README.md" ]] || [[ "$filename" == "PROJECT_STRUCTURE.md" ]]; then
continue
fi
# Check if it's a status/report file
if [[ "$filename" =~ (STATUS|COMPLETE|FINAL|REPORT|SUMMARY|ANALYSIS|DIAGNOSTIC|INVENTORY) ]]; then
move_file "$file" "reports/status/$filename" "Status/completion report in root"
fi
done
}
# Move VMID-specific reports
move_vmid_reports() {
log "Moving VMID-specific reports..."
find . -maxdepth 1 -name "VMID*.md" -type f | while read -r file; do
filename=$(basename "$file")
move_file "$file" "reports/$filename" "VMID-specific report"
done
}
# Move IP conflict and network analysis reports
move_network_reports() {
log "Moving network analysis reports..."
local files=(
"IP_CONFLICT_ANALYSIS.md"
"IP_CONFLICT_${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-192.168.11.14}}}}}}_RESOLUTION.md"
"IP_CONFLICTS_RESOLUTION_COMPLETE.md"
"VMID_IP_CONFLICTS_ANALYSIS.md"
"VMID_IP_ADDRESS_LIST.md"
"FINAL_VMID_IP_MAPPING.md"
"IP_ASSIGNMENT_PLAN.md"
"PHASE1_IP_CONFLICT_RESOLUTION.md"
"PHASE1_IP_INVESTIGATION_COMPLETE.md"
"PHASE1_IP_INVESTIGATION_STATUS.md"
"R630-04_IP_CONFLICT_DISCOVERY.md"
"RESERVED_IP_CONFLICTS_ANALYSIS.md"
"RESERVED_IP_FIX_COMPLETE.md"
"RESERVED_IP_FIX_COMPLETE_FINAL.md"
"RESERVED_IP_FIX_SUMMARY.md"
"DHCP_CONTAINERS_LIST.md"
"DHCP_TO_STATIC_CONVERSION_COMPLETE.md"
"DHCP_TO_STATIC_CONVERSION_FINAL_REPORT.md"
)
for file in "${files[@]}"; do
if [ -f "$file" ]; then
move_file "$file" "reports/analyses/$file" "Network/IP analysis report"
fi
done
}
# Move service status reports
move_service_reports() {
log "Moving service status reports..."
local files=(
"BLOCK_PRODUCTION_REVIEW.md"
"BLOCK_PRODUCTION_STATUS.md"
"SERVICE_VERIFICATION_REPORT.md"
"RPC_ENDPOINT_DIAGNOSTICS_REPORT.md"
"RPC_SSL_ISSUE_SUMMARY.md"
"RPC_TRANSACTION_FAILURE_INVESTIGATION.md"
"RPC_TRANSACTION_FAILURE_ROOT_CAUSE.md"
"BESU_*.md"
"FIREFLY_*.md"
"DBIS_*.md"
"EXPLORER_*.md"
"BLOCKSCOUT_*.md"
)
# Handle specific files
for pattern in "${files[@]}"; do
find . -maxdepth 1 -name "$pattern" -type f | while read -r file; do
filename=$(basename "$file")
# Skip if it's a script or config file
if [[ ! "$filename" =~ (\.sh|\.py|\.js|\.json)$ ]]; then
move_file "$file" "reports/status/$filename" "Service status report"
fi
done
done
}
# Move temporary fix guides from rpc-translator-138
move_rpc_translator_temp_files() {
log "Moving temporary files from rpc-translator-138..."
if [ ! -d "rpc-translator-138" ]; then
warn "rpc-translator-138 directory not found"
return
fi
local temp_patterns=(
"FIX_*.md"
"QUICK_FIX*.md"
"RUN_NOW.md"
"EXECUTE_NOW.md"
"EXECUTION_READY.md"
"LOAD_KEYS_NOW.md"
"FIX_PERMISSIONS*.md"
"*COMPLETE*.md"
"*FINAL*.md"
"*STATUS*.md"
)
for pattern in "${temp_patterns[@]}"; do
find rpc-translator-138 -maxdepth 1 -name "$pattern" -type f | while read -r file; do
filename=$(basename "$file")
# Skip README and important docs
if [[ "$filename" != "README.md" ]] && [[ ! "$filename" =~ ^(DEPLOYMENT|API_METHODS|QUICK_REFERENCE|QUICK_START|QUICK_SETUP) ]]; then
move_file "$file" "rpc-translator-138/docs/archive/$filename" "Temporary fix/status file"
fi
done
done
}
# Move completion/migration status files from docs
move_docs_status_files() {
log "Moving status files from docs directory..."
if [ ! -d "docs" ]; then
warn "docs directory not found"
return
fi
find docs -maxdepth 1 -name "*COMPLETE*.md" -o -name "*FINAL*.md" -o -name "*MIGRATION*.md" | while read -r file; do
filename=$(basename "$file")
# Skip if it's actual documentation
if [[ ! "$filename" =~ ^(DOCUMENTATION|CONTRIBUTOR|STYLE|GUIDE|README) ]]; then
move_file "$file" "reports/$filename" "Status file in docs directory"
fi
done
}
# Consolidate duplicate status files (keep most recent)
consolidate_duplicates() {
log "Identifying duplicate status files..."
# This is a placeholder - actual consolidation requires content comparison
# For now, we'll just log potential duplicates
local status_files=(
"ALL_TASKS_COMPLETE.md"
"ALL_TASKS_COMPLETE_FINAL.md"
"ALL_STEPS_COMPLETE.md"
"ALL_NEXT_STEPS_COMPLETE.md"
)
for file in "${status_files[@]}"; do
if [ -f "$file" ]; then
warn "Potential duplicate: $file (consider consolidating)"
fi
done
}
# Main execution
main() {
log "========================================="
log "Markdown Files Cleanup Script"
log "========================================="
log "Project Root: $PROJECT_ROOT"
log "Dry Run: $DRY_RUN"
log "Log File: $LOG_FILE"
log ""
if [ "$DRY_RUN" = "true" ]; then
warn "DRY RUN MODE - No files will be moved"
warn "Set DRY_RUN=false to actually move files"
log ""
fi
create_directories
move_timestamped_inventories
move_status_reports
move_vmid_reports
move_network_reports
move_service_reports
move_rpc_translator_temp_files
move_docs_status_files
consolidate_duplicates
log ""
log "========================================="
log "Cleanup complete!"
log "========================================="
if [ "$DRY_RUN" = "true" ]; then
log ""
log "Review the log above, then run with:"
log " DRY_RUN=false $0"
fi
}
main "$@"