#!/bin/bash # Gitea Wiki Cleanup Script # Removes old flat structure pages while preserving new organized structure set -e # Configuration GITEA_TOKEN=REDACTED_TOKEN GITEA_URL="https://git.vish.gg" REPO_OWNER="Vish" REPO_NAME="homelab" BASE_URL="$GITEA_URL/api/v1/repos/$REPO_OWNER/$REPO_NAME/wiki" # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' BLUE='\033[0;34m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${BLUE}๐Ÿงน Cleaning up Gitea Wiki - removing old flat structure...${NC}" # Pages to KEEP (our new organized structure) declare -a KEEP_PAGES=( "Home" "Administration" "Infrastructure" "Services" "Getting-Started" "Troubleshooting" "Advanced" # Key organized pages "GitOps-Guide" "Deployment-Guide" "Operational-Status" "Development-Guide" "Agent-Memory" "Infrastructure-Overview" "Infrastructure-Health" "SSH-Guide" "User-Access-Guide" "Security-Guide" "Service-Index" "Dashboard-Setup" "Homarr-Setup" "ARR-Suite-Enhancements" "Beginner-Quickstart" "What-Is-Homelab" "Prerequisites" "Architecture-Overview" "Emergency-Guide" "Common-Issues" "Container-Diagnosis" "Disaster-Recovery" "Hardware-Inventory" ) # Function to check if page should be kept should_keep_page() { local page_title="$1" for keep_page in "${KEEP_PAGES[@]}"; do if [[ "$page_title" == "$keep_page" ]]; then return 0 fi done return 1 } # Get all wiki pages echo -e "${BLUE}๐Ÿ“‹ Fetching all wiki pages...${NC}" all_pages=$(curl -s -H "Authorization: token $GITEA_TOKEN" "$BASE_URL/pages?limit=500") if [[ -z "$all_pages" ]] || [[ "$all_pages" == "null" ]]; then echo -e "${RED}โŒ Failed to fetch wiki pages${NC}" exit 1 fi # Parse page titles page_titles=$(echo "$all_pages" | jq -r '.[].title') total_pages=$(echo "$page_titles" | wc -l) echo -e "${BLUE}๐Ÿ“Š Found $total_pages total wiki pages${NC}" # Count pages to keep vs delete keep_count=0 delete_count=0 declare -a pages_to_delete=() while IFS= read -r page_title; do if should_keep_page "$page_title"; then ((keep_count++)) echo -e "${GREEN}โœ… KEEP: $page_title${NC}" else ((delete_count++)) pages_to_delete+=("$page_title") echo -e "${YELLOW}๐Ÿ—‘๏ธ DELETE: $page_title${NC}" fi done <<< "$page_titles" echo "" echo -e "${BLUE}๐Ÿ“Š Cleanup Summary:${NC}" echo -e "${GREEN}โœ… Pages to keep: $keep_count${NC}" echo -e "${YELLOW}๐Ÿ—‘๏ธ Pages to delete: $delete_count${NC}" echo -e "${BLUE}๐Ÿ“„ Total pages: $total_pages${NC}" # Confirm deletion echo "" echo -e "${YELLOW}โš ๏ธ This will DELETE $delete_count wiki pages!${NC}" echo -e "${YELLOW}โš ๏ธ Only the organized structure will remain.${NC}" read -p "Continue with cleanup? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo -e "${BLUE}๐Ÿšซ Cleanup cancelled${NC}" exit 0 fi # Delete old pages echo "" echo -e "${BLUE}๐Ÿ—‘๏ธ Starting deletion of old pages...${NC}" deleted_count=0 failed_count=0 for page_title in "${pages_to_delete[@]}"; do echo -e "${YELLOW}๐Ÿ—‘๏ธ Deleting: $page_title${NC}" response=$(curl -s -w "%{http_code}" -o /tmp/delete_response.json \ -X DELETE \ -H "Authorization: token $GITEA_TOKEN" \ "$BASE_URL/$page_title") http_code="${response: -3}" if [[ "$http_code" == "204" ]] || [[ "$http_code" == "200" ]]; then echo -e "${GREEN}โœ… Deleted: $page_title${NC}" ((deleted_count++)) else echo -e "${RED}โŒ Failed to delete: $page_title (HTTP $http_code)${NC}" ((failed_count++)) fi # Small delay to avoid rate limiting sleep 0.1 done echo "" echo -e "${BLUE}๐ŸŽฏ Gitea Wiki Cleanup Complete!${NC}" echo -e "${GREEN}โœ… Successfully deleted: $deleted_count pages${NC}" echo -e "${RED}โŒ Failed to delete: $failed_count pages${NC}" echo -e "${GREEN}๐Ÿ“š Organized pages remaining: $keep_count${NC}" # Get final page count final_page_count=$(curl -s -H "Authorization: token $GITEA_TOKEN" "$BASE_URL/pages?limit=500" | jq '. | length' 2>/dev/null || echo "unknown") echo "" echo -e "${GREEN}๐Ÿ“Š Final Wiki Statistics:${NC}" echo -e "${GREEN} Total Pages: $final_page_count${NC}" echo -e "${GREEN} Structure: โœ… Clean organized hierarchy${NC}" echo -e "${GREEN} Old Pages Removed: $deleted_count${NC}" echo "" echo -e "${GREEN}๐ŸŒ Clean Gitea Wiki available at:${NC}" echo -e " ${BLUE}https://git.vish.gg/$REPO_OWNER/$REPO_NAME/wiki${NC}" if [[ $failed_count -eq 0 ]]; then echo "" echo -e "${GREEN}โœ… Gitea Wiki cleanup completed successfully!${NC}" echo -e "${GREEN}๐ŸŽ‰ Wiki now has clean, organized structure only!${NC}" exit 0 else echo "" echo -e "${YELLOW}โš ๏ธ Wiki cleanup completed with some issues.${NC}" echo -e "${YELLOW}๐Ÿ“Š $deleted_count pages deleted, $failed_count failed.${NC}" exit 1 fi