ParallelLLC/algorithmic_trading
2732
1#!/bin/bash2 3# Colors for output4RED='\033[0;31m'5GREEN='\033[0;32m'6YELLOW='\033[1;33m'7BLUE='\033[0;34m'8NC='\033[0m' # No Color9 10# Function to print colored output11print_status() {12 echo -e "${BLUE}[INFO]${NC} $1"13}14 15print_success() {16 echo -e "${GREEN}[SUCCESS]${NC} $1"17}18 19print_warning() {20 echo -e "${YELLOW}[WARNING]${NC} $1"21}22 23print_error() {24 echo -e "${RED}[ERROR]${NC} $1"25}26 27# Default values28DOCKER_USERNAME=""29IMAGE_NAME="algorithmic-trading"30TAG="latest"31REGISTRY="docker.io"32 33# Function to show help34show_help() {35 echo "Usage: $0 [OPTIONS]"36 echo ""37 echo "Options:"38 echo " -u, --username USERNAME Docker Hub username (required)"39 echo " -i, --image IMAGE_NAME Image name (default: algorithmic-trading)"40 echo " -t, --tag TAG Tag (default: latest)"41 echo " -r, --registry REGISTRY Registry URL (default: docker.io)"42 echo " -h, --help Show this help message"43 echo ""44 echo "Examples:"45 echo " $0 -u myusername"46 echo " $0 -u myusername -i my-trading-system -t v1.0.0"47 echo ""48 echo "Environment Variables:"49 echo " DOCKER_USERNAME Set your Docker Hub username"50 echo " DOCKER_PASSWORD Set your Docker Hub password/token"51}52 53# Parse command line arguments54while [[ $# -gt 0 ]]; do55 case $1 in56 -u|--username)57 DOCKER_USERNAME="$2"58 shift 259 ;;60 -i|--image)61 IMAGE_NAME="$2"62 shift 263 ;;64 -t|--tag)65 TAG="$2"66 shift 267 ;;68 -r|--registry)69 REGISTRY="$2"70 shift 271 ;;72 -h|--help)73 show_help74 exit 075 ;;76 *)77 print_error "Unknown option: $1"78 show_help79 exit 180 ;;81 esac82done83 84# Check if username is provided85if [ -z "$DOCKER_USERNAME" ]; then86 if [ -n "$DOCKER_USERNAME" ]; then87 DOCKER_USERNAME="$DOCKER_USERNAME"88 else89 print_error "Docker Hub username is required!"90 echo "Use -u option or set DOCKER_USERNAME environment variable"91 show_help92 exit 193 fi94fi95 96# Function to build the image97build_image() {98 print_status "Building Docker image..."99 docker build -t ${IMAGE_NAME}:${TAG} .100 if [ $? -eq 0 ]; then101 print_success "Docker image built successfully"102 else103 print_error "Failed to build Docker image"104 exit 1105 fi106}107 108# Function to login to Docker Hub109login_to_dockerhub() {110 print_status "Logging in to Docker Hub..."111 if [ -n "$DOCKER_PASSWORD" ]; then112 echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin113 else114 docker login -u "$DOCKER_USERNAME"115 fi116 117 if [ $? -eq 0 ]; then118 print_success "Successfully logged in to Docker Hub"119 else120 print_error "Failed to login to Docker Hub"121 exit 1122 fi123}124 125# Function to tag the image126tag_image() {127 local full_image_name="${REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${TAG}"128 print_status "Tagging image as: $full_image_name"129 docker tag ${IMAGE_NAME}:${TAG} "$full_image_name"130 if [ $? -eq 0 ]; then131 print_success "Image tagged successfully"132 echo "$full_image_name"133 else134 print_error "Failed to tag image"135 exit 1136 fi137}138 139# Function to push the image140push_image() {141 local full_image_name="${REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${TAG}"142 print_status "Pushing image to Docker Hub: $full_image_name"143 docker push "$full_image_name"144 if [ $? -eq 0 ]; then145 print_success "Image pushed successfully to Docker Hub!"146 print_status "You can now pull it with:"147 echo " docker pull $full_image_name"148 print_status "Or use it in docker-compose with:"149 echo " image: $full_image_name"150 else151 print_error "Failed to push image to Docker Hub"152 exit 1153 fi154}155 156# Function to run tests before pushing157run_tests() {158 print_status "Running tests before deployment..."159 docker run --rm -v $(pwd):/app ${IMAGE_NAME}:${TAG} pytest -v --tb=short160 if [ $? -eq 0 ]; then161 print_success "Tests passed"162 else163 print_warning "Some tests failed, but continuing with deployment..."164 fi165}166 167# Function to clean up local images168cleanup() {169 print_status "Cleaning up local images..."170 docker rmi ${IMAGE_NAME}:${TAG} 2>/dev/null || true171 print_success "Cleanup completed"172}173 174# Main deployment process175main() {176 print_status "Starting Docker Hub deployment..."177 print_status "Username: $DOCKER_USERNAME"178 print_status "Image: $IMAGE_NAME"179 print_status "Tag: $TAG"180 print_status "Registry: $REGISTRY"181 echo ""182 183 # Build the image184 build_image185 186 # Run tests (optional)187 read -p "Run tests before deployment? (y/n): " -n 1 -r188 echo189 if [[ $REPLY =~ ^[Yy]$ ]]; then190 run_tests191 fi192 193 # Login to Docker Hub194 login_to_dockerhub195 196 # Tag the image197 local full_image_name=$(tag_image)198 199 # Push the image200 push_image201 202 # Cleanup203 read -p "Clean up local images? (y/n): " -n 1 -r204 echo205 if [[ $REPLY =~ ^[Yy]$ ]]; then206 cleanup207 fi208 209 print_success "Deployment completed successfully!"210 print_status "Your image is now available at:"211 echo " https://hub.docker.com/r/${DOCKER_USERNAME}/${IMAGE_NAME}"212}213 214# Run main function215main "$@" 