diff --git a/docker/build_and_push_eveai.sh b/docker/build_and_push_eveai.sh index 980d197..1ae329b 100755 --- a/docker/build_and_push_eveai.sh +++ b/docker/build_and_push_eveai.sh @@ -3,7 +3,7 @@ # Exit on any error set -e -. ./docker_env_switch.sh dev +source ./docker_env_switch.sh dev # Load environment variables source .env diff --git a/docker/docker_env_switch.sh b/docker/docker_env_switch.sh index 8dc8517..00bc8e9 100755 --- a/docker/docker_env_switch.sh +++ b/docker/docker_env_switch.sh @@ -1,59 +1,129 @@ -#!/bin/bash +#!/bin/zsh +# or use #!/usr/bin/env zsh # Function to display usage information usage() { - echo "Usage: source $0 [dev|prod]" - echo " dev : Switch to development environment" - echo " prod : Switch to production environment" + echo "Usage: source $0 [version]" + echo " environment: The environment to use (dev, prod, test, integration, bugfix)" + echo " version : (Optional) Specific release version to deploy" + echo " If not specified, uses 'latest' (except for dev environment)" } +# Replace the existing check at the beginning of docker_env_switch.sh # Check if the script is sourced if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then + # Script is being executed directly from terminal echo "Error: This script must be sourced, not executed directly." - echo "Please run: source $0 [dev|prod]" + echo "Please run: source $0 [version]" exit 1 fi +# If we reach here, script is being sourced (either by terminal or another script) -# Check if an argument is provided +# Check if an environment is provided if [ $# -eq 0 ]; then usage return 1 fi +ENVIRONMENT=$1 +VERSION=${2:-latest} # Default to latest if not specified + # Set variables based on the environment -case $1 in +case $ENVIRONMENT in dev) DOCKER_CONTEXT="default" COMPOSE_FILE="compose_dev.yaml" + VERSION="latest" # Always use latest for dev ;; prod) DOCKER_CONTEXT="mxz536.stackhero-network.com" COMPOSE_FILE="compose_stackhero.yaml" ;; + test) + DOCKER_CONTEXT="test-environment" # Change to your actual test Docker context + COMPOSE_FILE="compose_test.yaml" + ;; + integration) + DOCKER_CONTEXT="integration-environment" # Change to your actual integration Docker context + COMPOSE_FILE="compose_integration.yaml" + ;; + bugfix) + DOCKER_CONTEXT="bugfix-environment" # Change to your actual bugfix Docker context + COMPOSE_FILE="compose_bugfix.yaml" + ;; *) - echo "Invalid environment. Use 'dev' or 'prod'." + echo "Invalid environment: $ENVIRONMENT" usage return 1 ;; esac +# Set Docker account +DOCKER_ACCOUNT="josakola" + +# Check if Docker context exists +if ! docker context ls --format '{{.Name}}' | grep -q "^$DOCKER_CONTEXT$"; then + echo "Warning: Docker context '$DOCKER_CONTEXT' does not exist." + + # Prompt user if they want to create the context + if [[ "$DOCKER_CONTEXT" != "default" ]]; then + echo "Do you want to set up this context now? (y/n): " + read CREATE_CONTEXT + if [[ "$CREATE_CONTEXT" == "y" || "$CREATE_CONTEXT" == "Y" ]]; then + # You would add here the specific code to create each context type + # For example, for remote contexts you might need SSH settings + echo "Please specify the Docker host URL (e.g., ssh://user@remote_host or tcp://remote_host:2375):" + read DOCKER_HOST + + docker context create "$DOCKER_CONTEXT" --docker "host=$DOCKER_HOST" + if [ $? -ne 0 ]; then + echo "Failed to create Docker context. Please create it manually." + return 1 + fi + else + echo "Using default context instead." + DOCKER_CONTEXT="default" + fi + fi +fi + +# Check if compose file exists +if [ ! -f "$COMPOSE_FILE" ]; then + echo "Warning: Compose file '$COMPOSE_FILE' does not exist." + echo "Do you want to create it based on compose_dev.yaml? (y/n): " + read CREATE_FILE + if [[ "$CREATE_FILE" == "y" || "$CREATE_FILE" == "Y" ]]; then + # Create new compose file based on compose_dev.yaml with version variables + sed 's/\(image: josakola\/[^:]*\):latest/\1:${EVEAI_VERSION:-latest}/g' compose_dev.yaml > "$COMPOSE_FILE" + echo "Created $COMPOSE_FILE with version placeholders." + else + echo "Cannot proceed without a valid compose file." + return 1 + fi +fi + # Switch Docker context echo "Switching to Docker context: $DOCKER_CONTEXT" docker context use $DOCKER_CONTEXT -# Set the COMPOSE_FILE environment variable +# Set environment variables export COMPOSE_FILE=$COMPOSE_FILE +export EVEAI_VERSION=$VERSION +export DOCKER_ACCOUNT=$DOCKER_ACCOUNT + echo "Set COMPOSE_FILE to $COMPOSE_FILE" +echo "Set EVEAI_VERSION to $VERSION" +echo "Set DOCKER_ACCOUNT to $DOCKER_ACCOUNT" # Define aliases for common Docker commands alias docker-compose="docker compose -f $COMPOSE_FILE" alias dc="docker compose -f $COMPOSE_FILE" -alias dcup="docker compose -f $COMPOSE_FILE up -d --no-build --remove-orphans" +alias dcup="docker compose -f $COMPOSE_FILE up -d --remove-orphans" alias dcdown="docker compose -f $COMPOSE_FILE down" alias dcps="docker compose -f $COMPOSE_FILE ps" alias dclogs="docker compose -f $COMPOSE_FILE logs" alias dcpull="docker compose -f $COMPOSE_FILE pull" -alias dcrefresh="docker compose -f $COMPOSE_FILE pull" +alias dcrefresh="docker compose -f $COMPOSE_FILE pull && docker compose -f $COMPOSE_FILE up -d --remove-orphans" -echo "Docker environment switched to $1" -echo "You can now use 'docker-compose', 'dc', 'dcup', 'dcdown', 'dcps', 'dclogs' , dcpull or dcrefresh commands" \ No newline at end of file +echo "Docker environment switched to $ENVIRONMENT with version $VERSION" +echo "You can now use 'docker-compose', 'dc', 'dcup', 'dcdown', 'dcps', 'dclogs', 'dcpull' or 'dcrefresh' commands" \ No newline at end of file