390 lines
11 KiB
Bash
390 lines
11 KiB
Bash
#!/bin/bash
|
|
|
|
# CI/CD Chaos Engine Container Entry Point
|
|
# Over-engineered entry point with excessive initialization
|
|
|
|
set -euo pipefail
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
PURPLE='\033[0;35m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Logging function
|
|
log() {
|
|
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
|
|
}
|
|
|
|
warn() {
|
|
echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
|
|
}
|
|
|
|
error() {
|
|
echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
|
|
}
|
|
|
|
chaos_log() {
|
|
echo -e "${PURPLE}[CHAOS]${NC} $1"
|
|
}
|
|
|
|
# Function to display ASCII art banner
|
|
display_banner() {
|
|
echo ""
|
|
echo "🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪"
|
|
echo "🎪 🎪"
|
|
echo "🎪 CI/CD CHAOS ENGINE CONTAINER 🎪"
|
|
echo "🎪 🎪"
|
|
echo "🎪 Over-engineered DevOps Satire 🎪"
|
|
echo "🎪 🎪"
|
|
echo "🎪 Chaos Level: ${CHAOS_LEVEL:-5} 🎪"
|
|
echo "🎪 Roast Intensity: ${ROAST_INTENSITY:-7} 🎪"
|
|
echo "🎪 Celebration Mode: ${CELEBRATION_MODE:-full} 🎪"
|
|
echo "🎪 🎪"
|
|
echo "🎪 Professional DevOps with Humor 🎪"
|
|
echo "🎪 🎪"
|
|
echo "🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪"
|
|
echo ""
|
|
}
|
|
|
|
# Function to perform container initialization
|
|
initialize_container() {
|
|
log "🚀 Initializing CI/CD Chaos Engine Container..."
|
|
|
|
# Create necessary directories
|
|
log "📁 Creating directory structure..."
|
|
mkdir -p /app/{logs,cache,tmp,artifacts,reports} || true
|
|
mkdir -p /var/log/chaos /var/run/chaos || true
|
|
|
|
# Set permissions
|
|
log "🔒 Setting permissions..."
|
|
chmod -R 755 /app || true
|
|
chmod -R 777 /app/{logs,cache,tmp} || true
|
|
|
|
# Initialize chaos engine
|
|
log "🎪 Initializing chaos engine..."
|
|
if [[ -f /app/scripts/chaos-engine.sh ]]; then
|
|
chmod +x /app/scripts/chaos-engine.sh || true
|
|
fi
|
|
|
|
# Initialize Python scripts
|
|
log "🐍 Setting up Python scripts..."
|
|
for script in /app/scripts/*.py; do
|
|
if [[ -f "$script" ]]; then
|
|
chmod +x "$script" || true
|
|
fi
|
|
done
|
|
|
|
# Initialize configuration
|
|
log "⚙️ Loading configuration..."
|
|
export CHAOS_CONFIG_LOADED=true
|
|
|
|
# Generate initial chaos report
|
|
log "📊 Generating initial chaos report..."
|
|
if command -v python3 &> /dev/null && [[ -f /app/scripts/chaos-engine.sh ]]; then
|
|
/app/scripts/chaos-engine.sh report 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
# Function to perform health checks
|
|
perform_health_checks() {
|
|
log "🏥 Performing container health checks..."
|
|
|
|
# Check basic functionality
|
|
if ! command -v python3 &> /dev/null; then
|
|
error "❌ Python3 not found"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v bash &> /dev/null; then
|
|
error "❌ Bash not found"
|
|
exit 1
|
|
fi
|
|
|
|
# Check application files
|
|
if [[ ! -f /app/README.md ]]; then
|
|
warn "⚠️ README.md not found"
|
|
fi
|
|
|
|
if [[ ! -f /app/.gitlab-ci.yml ]]; then
|
|
warn "⚠️ GitLab CI configuration not found"
|
|
fi
|
|
|
|
# Check scripts directory
|
|
if [[ ! -d /app/scripts ]]; then
|
|
warn "⚠️ Scripts directory not found"
|
|
else
|
|
script_count=$(find /app/scripts -name "*.sh" -o -name "*.py" | wc -l)
|
|
log "📜 Found $script_count scripts"
|
|
fi
|
|
|
|
# Check configuration
|
|
if [[ ! -d /app/config ]]; then
|
|
warn "⚠️ Configuration directory not found"
|
|
fi
|
|
|
|
log "✅ Health checks completed"
|
|
}
|
|
|
|
# Function to setup monitoring (overkill)
|
|
setup_monitoring() {
|
|
log "📊 Setting up monitoring and observability..."
|
|
|
|
# Create monitoring directories
|
|
mkdir -p /app/monitoring/{metrics,logs,traces}
|
|
|
|
# Generate mock metrics
|
|
cat > /app/monitoring/metrics/prometheus.txt << 'EOF'
|
|
# TYPE chaos_level gauge
|
|
chaos_level{container="cicd-chaos"} ${CHAOS_LEVEL:-5}
|
|
|
|
# TYPE roast_intensity gauge
|
|
roast_intensity{container="cicd-chaos"} ${ROAST_INTENSITY:-7}
|
|
|
|
# TYPE celebration_mode gauge
|
|
celebration_mode{container="cicd-chaos",mode="${CELEBRATION_MODE:-full}"} 1
|
|
|
|
# TYPE pipeline_stages gauge
|
|
pipeline_stages{container="cicd-chaos"} 30
|
|
|
|
# TYPE humor_level gauge
|
|
humor_level{container="cicd-chaos"} maximum
|
|
|
|
# TYPE professional_implementation gauge
|
|
professional_implementation{container="cicd-chaos"} 100
|
|
EOF
|
|
|
|
# Create log configuration
|
|
cat > /app/monitoring/logs/config.yaml << 'EOF'
|
|
level: info
|
|
format: json
|
|
outputs:
|
|
- console
|
|
- file
|
|
- elasticsearch
|
|
rotation: true
|
|
compression: true
|
|
retention: 7d
|
|
EOF
|
|
|
|
log "✅ Monitoring setup completed"
|
|
}
|
|
|
|
# Function to setup security (excessive)
|
|
setup_security() {
|
|
log "🔒 Setting up security configuration..."
|
|
|
|
# Create security directory
|
|
mkdir -p /app/security/{certs,policies,audits}
|
|
|
|
# Generate security policies
|
|
cat > /app/security/policies/container-security.yaml << 'EOF'
|
|
security:
|
|
container:
|
|
runtime: "runc"
|
|
seccomp: true
|
|
apparmor: true
|
|
no_new_privs: true
|
|
read_only_rootfs: false
|
|
run_as_non_root: true
|
|
capabilities:
|
|
drop:
|
|
- ALL
|
|
add:
|
|
- CHOWN
|
|
- NET_BIND_SERVICE
|
|
resources:
|
|
limits:
|
|
memory: "512Mi"
|
|
cpu: "500m"
|
|
requests:
|
|
memory: "256Mi"
|
|
cpu: "250m"
|
|
network:
|
|
disabled: false
|
|
readonly_rootfs: false
|
|
EOF
|
|
|
|
# Generate audit configuration
|
|
cat > /app/security/audits/audit.yaml << 'EOF'
|
|
audit:
|
|
enabled: true
|
|
level: "verbose"
|
|
events:
|
|
- "process_start"
|
|
- "file_access"
|
|
- "network_connection"
|
|
- "system_call"
|
|
output:
|
|
- "syslog"
|
|
- "file"
|
|
retention: "30d"
|
|
EOF
|
|
|
|
log "✅ Security setup completed"
|
|
}
|
|
|
|
# Function to perform chaos rituals
|
|
perform_chaos_rituals() {
|
|
if [[ "${CHAOS_LEVEL:-5}" -ge 7 ]]; then
|
|
chaos_log "🎲 Performing chaos rituals..."
|
|
|
|
# Random chaos event
|
|
local chaos_events=(
|
|
"Cosmic alignment check"
|
|
"Developer coffee level verification"
|
|
"Git commit graph analysis"
|
|
"Code quality divination"
|
|
"Build speed optimization ritual"
|
|
"Documentation completeness blessing"
|
|
"Test coverage enhancement ceremony"
|
|
"Security scan purification"
|
|
"Performance tuning meditation"
|
|
"Deployment success prayer"
|
|
)
|
|
|
|
local random_event=${chaos_events[$((RANDOM % ${#chaos_events[@]}))]}
|
|
chaos_log "🔮 Performing: $random_event"
|
|
sleep 1
|
|
chaos_log "✨ Chaos ritual completed successfully"
|
|
fi
|
|
}
|
|
|
|
# Function to display container information
|
|
display_container_info() {
|
|
log "📋 Container Information:"
|
|
echo " 🏷️ Version: ${CONTAINER_VERSION:-unknown}"
|
|
echo " 🔧 Build: ${CONTAINER_BUILD:-production}"
|
|
echo " 🎪 Chaos Level: ${CHAOS_LEVEL:-5}"
|
|
echo " 🔥 Roast Intensity: ${ROAST_INTENSITY:-7}"
|
|
echo " 🎉 Celebration Mode: ${CELEBRATION_MODE:-full}"
|
|
echo " 🎮 Developer Challenge: ${DEVELOPER_CHALLENGE:-true}"
|
|
echo " 📅 Build Date: ${BUILD_DATE:-unknown}"
|
|
echo " 🔀 Git Commit: ${GIT_COMMIT:-unknown}"
|
|
echo " 🌿 Git Branch: ${GIT_BRANCH:-unknown}"
|
|
echo " 🐍 Python Version: $(python3 --version 2>/dev/null || echo 'unknown')"
|
|
echo " 🐳 Docker Version: $(docker --version 2>/dev/null | head -1 || echo 'unknown')"
|
|
echo ""
|
|
}
|
|
|
|
# Function to start the application
|
|
start_application() {
|
|
log "🚀 Starting CI/CD Chaos Engine..."
|
|
|
|
# Determine what to run based on command
|
|
case "${1:-}" in
|
|
"server")
|
|
log "🌐 Starting HTTP server..."
|
|
python3 -m http.server 8080 --directory /app
|
|
;;
|
|
"chaos-engine")
|
|
log "🎪 Starting chaos engine..."
|
|
if [[ -f /app/scripts/chaos-engine.sh ]]; then
|
|
/app/scripts/chaos-engine.sh "${2:-report}"
|
|
else
|
|
error "❌ Chaos engine script not found"
|
|
exit 1
|
|
fi
|
|
;;
|
|
"roast-bot")
|
|
log "🤖 Starting roast bot..."
|
|
if [[ -f /app/scripts/roast-bot.py ]]; then
|
|
python3 /app/scripts/roast-bot.py "${2:-/app}"
|
|
else
|
|
error "❌ Roast bot script not found"
|
|
exit 1
|
|
fi
|
|
;;
|
|
"commit-judge")
|
|
log "👨⚖️ Starting commit message judge..."
|
|
if [[ -f /app/scripts/commit-judge.py ]]; then
|
|
python3 /app/scripts/commit-judge.py "${2:- --help}"
|
|
else
|
|
error "❌ Commit judge script not found"
|
|
exit 1
|
|
fi
|
|
;;
|
|
"pr-challenge")
|
|
log "🎮 Starting PR challenge system..."
|
|
if [[ -f /app/scripts/pr-challenge.py ]]; then
|
|
python3 /app/scripts/pr-challenge.py "${2:- --help}"
|
|
else
|
|
error "❌ PR challenge script not found"
|
|
exit 1
|
|
fi
|
|
;;
|
|
"shell")
|
|
log "🐚 Starting interactive shell..."
|
|
exec /bin/bash
|
|
;;
|
|
*)
|
|
log "🎪 Starting default mode..."
|
|
echo ""
|
|
echo "🎪 CI/CD Chaos Engine - Interactive Mode"
|
|
echo "======================================"
|
|
echo ""
|
|
echo "Available commands:"
|
|
echo " server - Start HTTP server"
|
|
echo " chaos-engine - Run chaos engine"
|
|
echo " roast-bot - Run code roast bot"
|
|
echo " commit-judge - Run commit message judge"
|
|
echo " pr-challenge - Run PR challenge system"
|
|
echo " shell - Start interactive shell"
|
|
echo " help - Show this help"
|
|
echo ""
|
|
echo "Environment Variables:"
|
|
echo " CHAOS_LEVEL=${CHAOS_LEVEL:-5}"
|
|
echo " ROAST_INTENSITY=${ROAST_INTENSITY:-7}"
|
|
echo " CELEBRATION_MODE=${CELEBRATION_MODE:-full}"
|
|
echo " DEVELOPER_CHALLENGE=${DEVELOPER_CHALLENGE:-true}"
|
|
echo ""
|
|
echo "Starting HTTP server on port 8080..."
|
|
python3 -m http.server 8080 --directory /app
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Main execution
|
|
main() {
|
|
# Display banner
|
|
display_banner
|
|
|
|
# Initialize container
|
|
initialize_container
|
|
|
|
# Perform health checks
|
|
perform_health_checks
|
|
|
|
# Setup monitoring
|
|
setup_monitoring
|
|
|
|
# Setup security
|
|
setup_security
|
|
|
|
# Perform chaos rituals
|
|
perform_chaos_rituals
|
|
|
|
# Display container information
|
|
display_container_info
|
|
|
|
# Show startup celebration
|
|
if [[ "${CELEBRATION_MODE:-full}" == "full" ]]; then
|
|
log "🎉 Container initialization complete!"
|
|
log "🚀 CI/CD Chaos Engine is ready for maximum over-engineering!"
|
|
echo ""
|
|
echo "🎊🎊🎊 SUCCESS! 🎊🎊🎊"
|
|
echo ""
|
|
fi
|
|
|
|
# Start application
|
|
start_application "$@"
|
|
}
|
|
|
|
# Trap signals for graceful shutdown
|
|
trap 'log "🛑 Container shutting down..."; exit 0' SIGTERM SIGINT
|
|
|
|
# Execute main function with all arguments
|
|
main "$@" |