Sanitized mirror from private repository - 2026-04-05 09:50:13 UTC
Some checks failed
Documentation / Build Docusaurus (push) Failing after 5m3s
Documentation / Deploy to GitHub Pages (push) Has been skipped

This commit is contained in:
Gitea Mirror Bot
2026-04-05 09:50:13 +00:00
commit 9e9084034f
1391 changed files with 354960 additions and 0 deletions

142
scripts/setup-dev-environment.sh Executable file
View File

@@ -0,0 +1,142 @@
#!/bin/bash
# Development Environment Setup Script
# Sets up linting, validation, and pre-commit hooks for the homelab repository
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to log messages
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_step() {
echo -e "${BLUE}[STEP]${NC} $1"
}
# Check if we're in the right directory
if [[ ! -f "README.md" ]] || [[ ! -d "hosts" ]]; then
log_error "This script must be run from the homelab repository root directory"
exit 1
fi
log_info "Setting up development environment for Homelab repository..."
# Step 1: Check Python installation
log_step "1. Checking Python installation..."
if ! command -v python3 &> /dev/null; then
log_error "Python 3 is required but not installed"
exit 1
fi
log_info "Python 3 found: $(python3 --version)"
# Step 2: Install Python dependencies
log_step "2. Installing Python dependencies..."
if [[ -f "requirements.txt" ]]; then
python3 -m pip install --user -r requirements.txt
log_info "Python dependencies installed"
else
log_warn "requirements.txt not found, skipping Python dependencies"
fi
# Step 3: Install pre-commit hooks
log_step "3. Setting up pre-commit hooks..."
if command -v pre-commit &> /dev/null; then
pre-commit install
log_info "Pre-commit hooks installed"
# Run pre-commit on all files to check setup
log_info "Running initial pre-commit check (this may take a while)..."
if pre-commit run --all-files; then
log_info "All pre-commit checks passed!"
else
log_warn "Some pre-commit checks failed. This is normal for the first run."
log_info "The hooks will now catch issues before commits."
fi
else
log_warn "pre-commit not found, skipping hook installation"
fi
# Step 4: Check Docker availability
log_step "4. Checking Docker availability..."
if command -v docker &> /dev/null; then
log_info "Docker found: $(docker --version)"
# Check if docker-compose is available
if command -v docker-compose &> /dev/null; then
log_info "Docker Compose found: $(docker-compose --version)"
elif docker compose version &> /dev/null; then
log_info "Docker Compose (plugin) found: $(docker compose version)"
else
log_warn "Docker Compose not found. Some validation features may not work."
fi
else
log_warn "Docker not found. Docker Compose validation will be skipped."
fi
# Step 5: Create .env file if it doesn't exist
log_step "5. Setting up environment configuration..."
if [[ ! -f ".env" ]]; then
if [[ -f ".env.example" ]]; then
cp .env.example .env
log_info "Created .env file from template"
log_warn "Please edit .env file with your actual configuration values"
else
log_warn ".env.example not found, skipping .env creation"
fi
else
log_info ".env file already exists"
fi
# Step 6: Test validation script
log_step "6. Testing validation script..."
if [[ -x "scripts/validate-compose.sh" ]]; then
log_info "Testing Docker Compose validation on a sample file..."
# Find a sample compose file to test
sample_file=$(find hosts/ -name "*.yml" -o -name "*.yaml" | head -1)
if [[ -n "$sample_file" ]]; then
if ./scripts/validate-compose.sh "$sample_file"; then
log_info "Validation script working correctly"
else
log_warn "Validation script test failed, but this may be expected"
fi
else
log_warn "No sample compose files found for testing"
fi
else
log_warn "Validation script not found or not executable"
fi
# Step 7: Summary and next steps
log_step "7. Setup complete!"
echo
log_info "Development environment setup completed successfully!"
echo
echo -e "${BLUE}Next steps:${NC}"
echo "1. Edit .env file with your actual configuration values"
echo "2. Run 'yamllint hosts/' to check YAML files"
echo "3. Run './scripts/validate-compose.sh' to validate Docker Compose files"
echo "4. Make a test commit to see pre-commit hooks in action"
echo
echo -e "${BLUE}Available commands:${NC}"
echo "• yamllint hosts/ - Lint YAML files"
echo "• ./scripts/validate-compose.sh - Validate Docker Compose files"
echo "• pre-commit run --all-files - Run all pre-commit checks"
echo "• pre-commit run --files <file> - Run checks on specific files"
echo
log_info "Happy coding! 🚀"