quick commit
Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Failing after 6m9s
CI/CD Pipeline / Security Scanning (push) Successful in 26s
CI/CD Pipeline / Tests (3.11) (push) Failing after 5m24s
CI/CD Pipeline / Tests (3.12) (push) Failing after 5m23s
CI/CD Pipeline / Build Docker Image (push) Has been skipped
CI/CD Pipeline / Deploy to Staging (push) Has been skipped
CI/CD Pipeline / Deploy to Production (push) Has been skipped
CI/CD Pipeline / Notification (push) Successful in 1s

This commit is contained in:
2026-01-17 20:24:43 +01:00
parent 95cc3cdb8f
commit 831eed8dbc
82 changed files with 8860 additions and 167 deletions

338
scripts/dev.sh Executable file
View File

@@ -0,0 +1,338 @@
#!/bin/bash
# Development helper script for GuardDen
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
# Print colored output
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Check if command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Show help
show_help() {
cat << EOF
GuardDen Development Helper Script
Usage: $0 [COMMAND]
Commands:
setup Set up development environment
test Run all tests with coverage
lint Run code quality checks (ruff, mypy)
format Format code with ruff
security Run security scans (safety, bandit)
build Build Docker images
up Start development environment with Docker Compose
down Stop development environment
logs Show development logs
clean Clean up development artifacts
db Database management commands
health Run health checks
help Show this help message
Examples:
$0 setup # Set up development environment
$0 test # Run tests
$0 lint # Check code quality
$0 up # Start development environment
$0 db migrate # Run database migrations
$0 health check # Run health checks
EOF
}
# Set up development environment
setup_dev() {
print_status "Setting up development environment..."
# Check Python version
if ! command_exists python3; then
print_error "Python 3 is required but not installed"
exit 1
fi
python_version=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
if [[ $(echo "$python_version < 3.11" | bc -l) -eq 1 ]]; then
print_warning "Python 3.11+ is recommended, you have $python_version"
fi
# Install dependencies
print_status "Installing dependencies..."
pip install -e ".[dev,monitoring]"
# Set up pre-commit hooks
if command_exists pre-commit; then
print_status "Installing pre-commit hooks..."
pre-commit install
fi
# Copy environment file if it doesn't exist
if [[ ! -f .env ]]; then
print_status "Creating .env file from template..."
cp .env.example .env
print_warning "Please edit .env file with your configuration"
fi
# Create data directories
mkdir -p data logs
print_success "Development environment setup complete!"
print_status "Next steps:"
echo " 1. Edit .env file with your Discord bot token and other settings"
echo " 2. Run '$0 up' to start the development environment"
echo " 3. Run '$0 test' to ensure everything is working"
}
# Run tests
run_tests() {
print_status "Running tests with coverage..."
export GUARDDEN_DISCORD_TOKEN="test_token_12345678901234567890123456789012345"
export GUARDDEN_DATABASE_URL="sqlite+aiosqlite:///:memory:"
export GUARDDEN_AI_PROVIDER="none"
export GUARDDEN_LOG_LEVEL="DEBUG"
pytest --cov=src/guardden --cov-report=term-missing --cov-report=html
print_success "Tests completed! Coverage report saved to htmlcov/"
}
# Run linting
run_lint() {
print_status "Running code quality checks..."
echo "🔍 Running ruff (linting)..."
ruff check src tests
echo "🎨 Checking code formatting..."
ruff format src tests --check
echo "🔤 Running mypy (type checking)..."
mypy src
print_success "Code quality checks completed!"
}
# Format code
format_code() {
print_status "Formatting code..."
echo "🎨 Formatting with ruff..."
ruff format src tests
echo "🔧 Fixing auto-fixable issues..."
ruff check src tests --fix
print_success "Code formatting completed!"
}
# Run security scans
run_security() {
print_status "Running security scans..."
echo "🔒 Checking dependencies for vulnerabilities..."
safety check --json --output safety-report.json || true
echo "🛡️ Running security linting..."
bandit -r src/ -f json -o bandit-report.json || true
print_success "Security scans completed! Reports saved as *-report.json"
}
# Build Docker images
build_docker() {
print_status "Building Docker images..."
echo "🐳 Building base image..."
docker build -t guardden:latest .
echo "🧠 Building image with AI dependencies..."
docker build --build-arg INSTALL_AI=true -t guardden:ai .
echo "🔧 Building development image..."
docker build --target development -t guardden:dev .
print_success "Docker images built successfully!"
}
# Start development environment
start_dev() {
print_status "Starting development environment..."
if [[ ! -f .env ]]; then
print_error ".env file not found. Run '$0 setup' first."
exit 1
fi
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d
print_success "Development environment started!"
echo "📊 Services available:"
echo " - Bot: Running in development mode"
echo " - Dashboard: http://localhost:8080"
echo " - Database: localhost:5432"
echo " - Redis: localhost:6379"
echo " - PgAdmin: http://localhost:5050"
echo " - Redis Commander: http://localhost:8081"
echo " - MailHog: http://localhost:8025"
}
# Stop development environment
stop_dev() {
print_status "Stopping development environment..."
docker-compose -f docker-compose.yml -f docker-compose.dev.yml down
print_success "Development environment stopped!"
}
# Show logs
show_logs() {
if [[ $# -eq 0 ]]; then
docker-compose -f docker-compose.yml -f docker-compose.dev.yml logs -f
else
docker-compose -f docker-compose.yml -f docker-compose.dev.yml logs -f "$1"
fi
}
# Clean up
clean_up() {
print_status "Cleaning up development artifacts..."
# Python cache
find . -type f -name "*.pyc" -delete
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
# Test artifacts
rm -rf .coverage htmlcov/ .pytest_cache/
# Build artifacts
rm -rf build/ dist/ *.egg-info/
# Security reports
rm -f *-report.json
print_success "Cleanup completed!"
}
# Database management
manage_db() {
case "${2:-help}" in
"migrate"|"upgrade")
print_status "Running database migrations..."
python -m alembic upgrade head
;;
"downgrade")
print_status "Downgrading database..."
python -m alembic downgrade -1
;;
"revision")
if [[ -z "$3" ]]; then
print_error "Please provide a revision message"
echo "Usage: $0 db revision 'message'"
exit 1
fi
print_status "Creating new migration..."
python -m alembic revision --autogenerate -m "$3"
;;
"reset")
print_warning "This will reset the database. Are you sure? (y/N)"
read -r response
if [[ "$response" =~ ^[Yy]$ ]]; then
print_status "Resetting database..."
python -m alembic downgrade base
python -m alembic upgrade head
fi
;;
*)
echo "Database management commands:"
echo " migrate - Run pending migrations"
echo " downgrade - Downgrade one migration"
echo " revision - Create new migration"
echo " reset - Reset database (WARNING: destructive)"
;;
esac
}
# Health checks
run_health() {
case "${2:-check}" in
"check")
print_status "Running health checks..."
python -m guardden.health --check
;;
"json")
python -m guardden.health --check --json
;;
*)
echo "Health check commands:"
echo " check - Run health checks"
echo " json - Run health checks with JSON output"
;;
esac
}
# Main script logic
case "${1:-help}" in
"setup")
setup_dev
;;
"test")
run_tests
;;
"lint")
run_lint
;;
"format")
format_code
;;
"security")
run_security
;;
"build")
build_docker
;;
"up")
start_dev
;;
"down")
stop_dev
;;
"logs")
show_logs "${@:2}"
;;
"clean")
clean_up
;;
"db")
manage_db "$@"
;;
"health")
run_health "$@"
;;
"help"|*)
show_help
;;
esac