Sanitized mirror from private repository - 2026-04-19 08:15:48 UTC
This commit is contained in:
212
scripts/upload-to-gitea-wiki.sh
Executable file
212
scripts/upload-to-gitea-wiki.sh
Executable file
@@ -0,0 +1,212 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Gitea Wiki Upload Script
|
||||
# Uploads homelab documentation to Gitea wiki via API
|
||||
|
||||
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}🚀 Starting Gitea Wiki documentation upload...${NC}"
|
||||
echo ""
|
||||
|
||||
# Function to create or update wiki page
|
||||
create_wiki_page() {
|
||||
local title="$1"
|
||||
local file_path="$2"
|
||||
local message="$3"
|
||||
|
||||
if [[ ! -f "$file_path" ]]; then
|
||||
echo -e "${RED}❌ File not found: $file_path${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}📄 Creating/updating wiki page: $title${NC}"
|
||||
|
||||
# Read file content and escape for JSON
|
||||
local content
|
||||
content=$(cat "$file_path" | jq -Rs .)
|
||||
|
||||
# Create JSON payload
|
||||
local json_payload
|
||||
json_payload=$(jq -n \
|
||||
--arg title "$title" \
|
||||
--argjson content "$content" \
|
||||
--arg message "$message" \
|
||||
'{
|
||||
title: $title,
|
||||
content_base64: ($content | @base64),
|
||||
message: $message
|
||||
}')
|
||||
|
||||
# Make API request
|
||||
local response
|
||||
response=$(curl -s -w "%{http_code}" -o /tmp/wiki_response.json \
|
||||
-X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$json_payload" \
|
||||
"$BASE_URL/new")
|
||||
|
||||
local http_code="${response: -3}"
|
||||
|
||||
if [[ "$http_code" == "201" ]]; then
|
||||
echo -e "${GREEN}✅ Successfully created: $title${NC}"
|
||||
echo -e "${BLUE}🌐 View at: $GITEA_URL/$REPO_OWNER/$REPO_NAME/wiki/$title${NC}"
|
||||
return 0
|
||||
elif [[ "$http_code" == "409" ]]; then
|
||||
# Page exists, try to update it
|
||||
echo -e "${YELLOW}📝 Page exists, updating: $title${NC}"
|
||||
|
||||
response=$(curl -s -w "%{http_code}" -o /tmp/wiki_response.json \
|
||||
-X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$json_payload" \
|
||||
"$BASE_URL/$title")
|
||||
|
||||
http_code="${response: -3}"
|
||||
|
||||
if [[ "$http_code" == "200" ]]; then
|
||||
echo -e "${GREEN}✅ Successfully updated: $title${NC}"
|
||||
echo -e "${BLUE}🌐 View at: $GITEA_URL/$REPO_OWNER/$REPO_NAME/wiki/$title${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ Failed to update $title (HTTP $http_code)${NC}"
|
||||
cat /tmp/wiki_response.json 2>/dev/null || echo "No response body"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}❌ Failed to create $title (HTTP $http_code)${NC}"
|
||||
cat /tmp/wiki_response.json 2>/dev/null || echo "No response body"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to sanitize title for wiki page names
|
||||
sanitize_title() {
|
||||
echo "$1" | sed 's/[^a-zA-Z0-9_-]/_/g' | sed 's/__*/_/g' | sed 's/^_\|_$//g'
|
||||
}
|
||||
|
||||
# Success and failure counters
|
||||
success_count=0
|
||||
total_count=0
|
||||
|
||||
echo -e "${BLUE}📋 Creating main homelab wiki index...${NC}"
|
||||
|
||||
# Create main wiki index page
|
||||
cat > /tmp/wiki_index.md << 'EOF'
|
||||
# Homelab Documentation Wiki
|
||||
|
||||
*This wiki is automatically synchronized from the homelab Git repository*
|
||||
|
||||
## 🎯 Quick Navigation
|
||||
|
||||
### 📖 Main Documentation
|
||||
- [Repository README](README) - Complete repository overview
|
||||
- [Documentation Index](Documentation-Index) - Master navigation guide
|
||||
- [Operational Status](Operational-Status) - Current system status
|
||||
|
||||
### 🔧 Administration & Operations
|
||||
- [GitOps Comprehensive Guide](GitOps-Comprehensive-Guide) - Complete deployment procedures ⭐
|
||||
- [DokuWiki Integration](DokuWiki-Integration) - Documentation mirroring setup
|
||||
- [Documentation Audit Report](Documentation-Audit-Report) - Recent improvements
|
||||
|
||||
### 🏗️ Infrastructure
|
||||
- [Infrastructure Health Report](Infrastructure-Health-Report) - System health status
|
||||
- [Monitoring Architecture](Monitoring-Architecture) - Monitoring setup
|
||||
- [GitOps Deployment Guide](GitOps-Deployment-Guide) - Deployment procedures
|
||||
|
||||
### 📚 Runbooks & Procedures
|
||||
- [Add New Service](Add-New-Service) - Service deployment runbook
|
||||
|
||||
## 🌐 Access Points
|
||||
|
||||
- **Git Repository**: https://git.vish.gg/Vish/homelab
|
||||
- **DokuWiki Mirror**: http://atlantis.vish.local:8399/doku.php?id=homelab:start
|
||||
- **Gitea Wiki**: https://git.vish.gg/Vish/homelab/wiki
|
||||
|
||||
## 📊 Repository Status
|
||||
|
||||
- **GitOps Status**: ✅ 18 active stacks, 50+ containers
|
||||
- **Servers**: 5 active (Atlantis, Calypso, Gaming VPS, Homelab VM, Concord NUC)
|
||||
- **Services**: 100+ containerized services
|
||||
- **Documentation**: Comprehensive guides and runbooks
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: $(date)
|
||||
**Source Repository**: https://git.vish.gg/Vish/homelab
|
||||
**Maintainer**: Homelab Administrator
|
||||
EOF
|
||||
|
||||
total_count=$((total_count + 1))
|
||||
if create_wiki_page "Home" "/tmp/wiki_index.md" "Updated homelab wiki index with navigation"; then
|
||||
success_count=$((success_count + 1))
|
||||
fi
|
||||
|
||||
# Upload key documentation files
|
||||
declare -A wiki_files=(
|
||||
["README"]="README.md"
|
||||
["Documentation-Index"]="docs/INDEX.md"
|
||||
["GitOps-Comprehensive-Guide"]="docs/admin/GITOPS_COMPREHENSIVE_GUIDE.md"
|
||||
["DokuWiki-Integration"]="docs/admin/DOKUWIKI_INTEGRATION.md"
|
||||
["Documentation-Audit-Report"]="DOCUMENTATION_AUDIT_REPORT.md"
|
||||
["Operational-Status"]="OPERATIONAL_STATUS.md"
|
||||
["Infrastructure-Health-Report"]="docs/infrastructure/INFRASTRUCTURE_HEALTH_REPORT.md"
|
||||
["Monitoring-Architecture"]="MONITORING_ARCHITECTURE.md"
|
||||
["GitOps-Deployment-Guide"]="GITOPS_DEPLOYMENT_GUIDE.md"
|
||||
["Add-New-Service"]="docs/runbooks/add-new-service.md"
|
||||
)
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}📚 Uploading documentation files...${NC}"
|
||||
|
||||
for wiki_title in "${!wiki_files[@]}"; do
|
||||
file_path="${wiki_files[$wiki_title]}"
|
||||
|
||||
if [[ -f "$file_path" ]]; then
|
||||
echo ""
|
||||
echo -e "${YELLOW}📄 Processing: $file_path → $wiki_title${NC}"
|
||||
total_count=$((total_count + 1))
|
||||
|
||||
if create_wiki_page "$wiki_title" "$file_path" "Updated $wiki_title from repository"; then
|
||||
success_count=$((success_count + 1))
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}⚠️ File not found: $file_path${NC}"
|
||||
total_count=$((total_count + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}🎯 Upload Summary:${NC}"
|
||||
echo -e "${GREEN}✅ Successful: $success_count/$total_count${NC}"
|
||||
echo -e "${RED}❌ Failed: $((total_count - success_count))/$total_count${NC}"
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}🌐 Gitea Wiki available at:${NC}"
|
||||
echo -e " ${BLUE}https://git.vish.gg/$REPO_OWNER/$REPO_NAME/wiki${NC}"
|
||||
echo -e " ${BLUE}https://git.vish.gg/$REPO_OWNER/$REPO_NAME/wiki/Home${NC}"
|
||||
|
||||
if [[ $success_count -eq $total_count ]]; then
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ Gitea Wiki upload completed successfully!${NC}"
|
||||
exit 0
|
||||
else
|
||||
echo ""
|
||||
echo -e "${YELLOW}⚠️ Gitea Wiki upload completed with some failures.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user