sharenet/scripts/deploy-local.sh
continuist 41f0bd8c4f
Some checks are pending
CI/CD Pipeline / Test Backend (push) Waiting to run
CI/CD Pipeline / Test Frontend (push) Waiting to run
CI/CD Pipeline / Build and Push Docker Images (push) Blocked by required conditions
CI/CD Pipeline / Deploy to Production (push) Blocked by required conditions
Refactored to add various scripts to repository instead of have user manually create them
2025-06-28 11:43:57 -04:00

197 lines
No EOL
5.3 KiB
Bash
Executable file

#!/bin/bash
# Sharenet Local Deployment Script
# This script handles local development deployments
set -e
# Configuration
APP_NAME="sharenet"
DOCKER_COMPOSE_FILE="docker-compose.yml"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# Pre-deployment checks
pre_deployment_checks() {
log_info "Running pre-deployment checks..."
# Check if docker-compose.yml exists
if [ ! -f "$DOCKER_COMPOSE_FILE" ]; then
log_error "docker-compose.yml not found in current directory"
log_error "Current directory: $(pwd)"
exit 1
fi
# Check if Docker is running
if ! docker info >/dev/null 2>&1; then
log_error "Docker is not running or not accessible"
exit 1
fi
# Check if docker-compose is available
if ! command -v docker-compose >/dev/null 2>&1; then
log_error "docker-compose is not installed or not in PATH"
exit 1
fi
log_success "Pre-deployment checks passed"
}
# Pull latest code (if in git repository)
pull_latest_code() {
if [ -d ".git" ]; then
log_info "Pulling latest code from repository..."
if git pull origin main 2>/dev/null || git pull origin master 2>/dev/null; then
log_success "Code updated successfully"
else
log_warning "Could not pull latest code (not a git repository or no remote configured)"
fi
else
log_info "Not a git repository, skipping code pull"
fi
}
# Pull latest images
pull_images() {
log_info "Pulling latest Docker images..."
if docker-compose pull; then
log_success "Images pulled successfully"
else
log_error "Failed to pull images"
exit 1
fi
}
# Stop existing containers
stop_containers() {
log_info "Stopping existing containers..."
if docker-compose down; then
log_success "Containers stopped successfully"
else
log_warning "Some containers may not have stopped cleanly"
fi
}
# Start new containers
start_containers() {
log_info "Starting new containers..."
if docker-compose up -d; then
log_success "Containers started successfully"
else
log_error "Failed to start containers"
log_error "Recent logs:"
docker-compose logs --tail=20
exit 1
fi
}
# Verify deployment
verify_deployment() {
log_info "Verifying deployment..."
# Wait for containers to start
sleep 10
# Check if containers are running
if docker-compose ps | grep -q "Up"; then
log_success "Deployment successful! All containers are running."
docker-compose ps
else
log_error "Deployment failed! Some containers are not running."
docker-compose ps
log_error "Recent logs:"
docker-compose logs --tail=20
exit 1
fi
}
# Clean up old images
cleanup_images() {
log_info "Cleaning up old Docker images..."
if docker image prune -f; then
log_success "Old images cleaned up successfully"
else
log_warning "Image cleanup had some issues"
fi
}
# Show service status
show_status() {
log_info "Current service status:"
docker-compose ps
echo
log_info "Recent logs:"
docker-compose logs --tail=10
}
# Main deployment process
main() {
local command="${1:-deploy}"
case "$command" in
deploy)
log_info "Starting local deployment for $APP_NAME..."
pre_deployment_checks
pull_latest_code
pull_images
stop_containers
start_containers
verify_deployment
cleanup_images
log_success "Local deployment completed successfully"
;;
status)
log_info "Checking service status..."
if [ -f "$DOCKER_COMPOSE_FILE" ]; then
show_status
else
log_error "docker-compose.yml not found in current directory"
exit 1
fi
;;
restart)
log_info "Restarting services..."
pre_deployment_checks
stop_containers
start_containers
verify_deployment
log_success "Services restarted successfully"
;;
logs)
log_info "Showing recent logs..."
if [ -f "$DOCKER_COMPOSE_FILE" ]; then
docker-compose logs --tail=50 -f
else
log_error "docker-compose.yml not found in current directory"
exit 1
fi
;;
*)
log_error "Unknown command: $command"
echo "Usage: $0 {deploy|status|restart|logs}"
echo ""
echo "Commands:"
echo " deploy - Deploy the application (default)"
echo " status - Show current service status"
echo " restart - Restart all services"
echo " logs - Show and follow recent logs"
exit 1
;;
esac
}
# Handle interrupts gracefully
trap 'log_error "Deployment interrupted"; exit 1' INT TERM
# Run main function
main "$@"