diff --git a/devbox/devbox.local/devbox b/devbox/devbox.local/devbox index e2731dc..6d77294 100644 --- a/devbox/devbox.local/devbox +++ b/devbox/devbox.local/devbox @@ -178,18 +178,18 @@ devbox_init_usage() { echo # :flag.usage freeleaps username - printf " %s\n" "--freeleaps-username FREELEAPS_USERNAME (required)" - printf " Specifies the Freeleaps.com repository username (Required).\n" + printf " %s\n" "--freeleaps-username FREELEAPS_USERNAME (optional)" + printf " Specifies the Freeleaps.com repository username (Optional).\n" echo # :flag.usage freeleaps password - printf " %s\n" "--freeleaps-password FREELEAPS_PASSWORD (required)" - printf " Specifies the Freeleaps.com password repository (Required).\n" + printf " %s\n" "--freeleaps-password FREELEAPS_PASSWORD (optional)" + printf " Specifies the Freeleaps.com password repository (Optional).\n" echo # :flag.usage use local component printf " %s\n" "--use-local-component USE_LOCAL_COMPONENT" - printf " Check if use local component or use online dev environment. (Default: false, use online service) (Optional)\n" + printf " Check if use local component or use online dev environment. (Optional, default=false)\n" echo # :flag.usage devsvc image repo @@ -204,7 +204,7 @@ devbox_init_usage() { # :flag.usage devsvc image tag printf " %s\n" "--devsvc-image-tag DEVSVC_IMAGE_TAG" - printf " Specifies the image tag for devsvc component. (Optional, default=latest-)\n" + printf " Specifies the image tag for devsvc component. (Optional, default=latest-linux-arm64)\n" printf " %s\n" "Default: latest" echo @@ -220,7 +220,7 @@ devbox_init_usage() { # :flag.usage notification image tag printf " %s\n" "--notification-image-tag NOTIFICATION_IMAGE_TAG" - printf " Specifies the image tag for notification component. (Optional, default=latest)\n" + printf " Specifies the image tag for notification component. (Optional, default=latest-linux-arm64)\n" printf " %s\n" "Default: latest" echo @@ -236,7 +236,7 @@ devbox_init_usage() { # :flag.usage content image tag printf " %s\n" "--content-image-tag CONTENT_IMAGE_TAG" - printf " Specifies the image tag for content component. (Optional, default=latest)\n" + printf " Specifies the image tag for content component. (Optional, default=latest-linux-arm64)\n" printf " %s\n" "Default: latest" echo @@ -252,7 +252,7 @@ devbox_init_usage() { # :flag.usage central storage image tag printf " %s\n" "--central_storage-image-tag CENTRAL_STORAGE_IMAGE_TAG" - printf " Specifies the image tag for central_storage component. (Optional, default=latest)\n" + printf " Specifies the image tag for central_storage component. (Optional, default=latest-linux-arm64)\n" printf " %s\n" "Default: latest" echo @@ -268,7 +268,7 @@ devbox_init_usage() { # :flag.usage authentication image tag printf " %s\n" "--authentication-image-tag AUTHENTICATION_IMAGE_TAG" - printf " Specifies the image tag for authentication component. (Optional, default=latest)\n" + printf " Specifies the image tag for authentication component. (Optional, default=latest-linux-arm64)\n" printf " %s\n" "Default: latest" echo @@ -725,11 +725,10 @@ devbox_init_command() { local DEVBOX_IMAGE="$args_devbox_image_name" # --devbox-image-name local DEVBOX_TAG="$args_devbox_image_tag" # --devbox-image-tag local WORKING_HOME="${args_working_home:-${WORKING_HOME:-${HOME}/.devbox}}" - + local FREELEAPS_USERNAME="$args_freeleaps_username" # --freeleaps-username - local FREELEAPS_PASSWORD="$args_freeleaps_password" # --freeleaps-password + local FREELEAPS_PASSWORD="$args_freeleaps_password" # --freeleaps-password - local USE_LOCAL_COMPONENT="$args_use_local_component" # --use-local-component local DEVSVC_REPO="$args_devsvc_image_repo" # --devsvc-image-repo @@ -796,11 +795,8 @@ devbox_init_command() { echo "==> Checking parameters..." for component in "${components[@]}"; do - echo "==> Checking ${component} image repo...value: $(get_arg "--${component}-image-repo")" if [[ -n "$(get_arg "--${component}-image-repo")" ]]; then is_pull_all_components=false - - else start_components+=("${component}") fi @@ -836,10 +832,12 @@ devbox_init_command() { fi done - echo "==> is_pull_all_components: $is_pull_all_components" + # If is_pull_all_components is true, then pull all components + if [[ "$is_pull_all_components" == true ]]; then + start_components=("${components[@]}") + fi echo " ===================================================== " - echo "Parameters:" echo " OS = $OS" echo " ARCH = $ARCH" @@ -898,8 +896,7 @@ devbox_init_command() { exit 1 fi fi - - echo "==> Detected OS: $OS, ARCH: $ARCH" + # Default arch tag value if Arch is amd64 then latest-linux-amd64 else latest-linux-arm64 local arch_tag="latest-linux-${ARCH}" @@ -934,15 +931,21 @@ devbox_init_command() { exit 1 fi - # ------------------------------------------------------------------- - # 4. If .devbox-instance exists, --force,use it - # ------------------------------------------------------------------- if [[ -f "$WORKING_HOME/.devbox-instance" && -z "$FORCE_INIT" ]]; then - echo "ERROR: DevBox already initialized. Use --force to overwrite." - exit 1 + # Echo all start_components + if [[ "${#start_components[@]}" -gt 0 ]]; then + for component in "${start_components[@]}"; do + if [[ -f "$WORKING_HOME/.${component}-instance" ]]; then + echo "ERROR: Container named $component already exists. Use --force to remove it." + exit 1 + fi + done + else + echo "ERROR: Container named $DEVBOX_NAME already exists. Use --force to remove it." + exit 1 + fi fi - # ------------------------------------------------------------------- # 5.install docker and check docker running # ------------------------------------------------------------------- @@ -972,13 +975,20 @@ devbox_init_command() { echo "==> Removing existing container named $DEVBOX_NAME ..." docker stop "$DEVBOX_NAME" &>/dev/null || true docker rm "$DEVBOX_NAME" &>/dev/null || true + + # Remove .devbox-instance file + rm -f "$WORKING_HOME/.devbox-instance" + + # Remove .backend.pid .frontend.pid + rm -f "$WORKING_HOME/.backend.pid" + rm -f "$WORKING_HOME/.frontend.pid" else echo "ERROR: Container named $DEVBOX_NAME already exists. Use --force to remove it." exit 1 fi fi - + # Create Docker network for DevBox container. TODO: if the network need to be configured in the docker-compose file add some logic to load it from the file DEVBOX_FREELEAPS2_NETWORK="devbox_freeleaps2-network" echo '==> [INIT] Starting DevBox environment initialization...' @@ -1068,7 +1078,6 @@ else fi # Save MongoDB and RabbitMQ container ids to .mongodb-instance and .rabbitmq-instance - mongo_container_id=$(docker ps -a --format '{{.Names}}' | grep "^freeleaps2-mongodb\$") echo "$mongo_container_id" > "$WORKING_HOME/.mongodb-instance" @@ -1081,6 +1090,7 @@ echo "$USE_LOCAL_COMPONENT" > "$WORKING_HOME/.use-local-component" pushd $WORKING_HOME + # Make a user input (Y/N) to continue pull freeleaps.com code and start if N then exit read -p "Do you want to continue to pull freeleaps.com code and start the services? (Y/N): " user_input if [[ "$user_input" == "N" || "$user_input" == "n" ]]; then @@ -1089,6 +1099,13 @@ if [[ "$user_input" == "N" || "$user_input" == "n" ]]; then exit 0 fi +# Check if username and password are set +if [[ -z "$FREELEAPS_USERNAME" || -z "$FREELEAPS_PASSWORD" ]]; then + echo "Warining: Username and password are required to pull freeleaps.com code." + echo "==> [INIT] DevBox environment initialization completed." + exit 1 +fi + # Check if freeleaps2-frontend exists, if not git clone it if [ ! -d $WORKING_HOME/freeleaps ]; then echo "Git cloning freeleaps.com:3443/products/freeleaps.git" @@ -1462,21 +1479,6 @@ devbox_start_command() { local devbox_container_id=$(cat "$devbox_container_id_file_path") - echo "==> Starting DevBox services..." - - # Check if DevBox container is running - if ! docker ps --no-trunc --format '{{.ID}}' | grep -q "^${devbox_container_id}\$"; then - echo "==> DevBox container is not running, starting container..." - # Start the container - if ! docker start "${devbox_container_id}"; then - echo "ERROR: Failed to start DevBox container." - exit 1 - fi - echo "==> DevBox container started successfully." - else - echo "==> DevBox container is already running." - fi - # Check if use local component if [[ -f "$WORKING_HOME/.use-local-component" ]]; then USE_LOCAL_COMPONENT=$(cat "$WORKING_HOME/.use-local-component") @@ -1487,7 +1489,7 @@ devbox_start_command() { if [[ "$USE_LOCAL_COMPONENT" == "true" ]]; then # If no component is specified, start all components if [[ -z "$COMPONENT" ]]; then - COMPONENTS=("mongodb" "rabbitmq" "devbox" "devsvc" "notification" "content" "central_storage" "authentication") + COMPONENTS=( "gitea" "mongodb" "rabbitmq" "devbox" "devsvc" "notification" "content" "central_storage" "authentication") else COMPONENTS=("$COMPONENT") fi @@ -1509,91 +1511,7 @@ devbox_start_command() { # Start the specified components for comp in "${COMPONENTS[@]}"; do case "$comp" in - "gitea") - echo "==> Starting Gitea..." - # Check if Gitea container file path - local gitea_container_id_file_path="${WORKING_HOME}/.gitea-instance" - if [[ ! -f "$gitea_container_id_file_path" ]]; then - echo "ERROR: Gitea container is not running. Please run 'devbox init' first." - else - local gitea_container_id=$(cat "$gitea_container_id_file_path") - if ! docker ps --no-trunc --format '{{.ID}}' | grep -q "^${gitea_container_id}\$"; then - echo "==> Gitea container is not running, starting container..." - # Start the container - if ! docker start "${gitea_container_id}"; then - echo "ERROR: Failed to start Gitea container." - exit 1 - fi - echo "==> Gitea container started successfully." - else - echo "==> Gitea container is already running." - fi - fi - ;; - "mongodb") - echo "==> Starting MongoDB..." - # Check if MongoDB container file path - local mongodb_container_id_file_path="${WORKING_HOME}/.mongodb-instance" - if [[ ! -f "$mongodb_container_id_file_path" ]]; then - echo "ERROR: MongoDB container is not running. Please run 'devbox init' first." - else - local mongodb_container_id=$(cat "$mongodb_container_id_file_path") - if ! docker ps --no-trunc --format '{{.ID}}' | grep -q "^${mongodb_container_id}\$"; then - echo "==> MongoDB container is not running, starting container..." - # Start the container - if ! docker start "${mongodb_container_id}"; then - echo "ERROR: Failed to start MongoDB container." - exit 1 - fi - echo "==> MongoDB container started successfully." - else - echo "==> MongoDB container is already running." - fi - fi - ;; - "rabbitmq") - echo "==> Starting RabbitMQ..." - # Check if RabbitMQ container file path - local rabbitmq_container_id_file_path="${WORKING_HOME}/.rabbitmq-instance" - if [[ ! -f "$rabbitmq_container_id_file_path" ]]; then - echo "ERROR: RabbitMQ container is not running. Please run 'devbox init' first." - else - local rabbitmq_container_id=$(cat "$rabbitmq_container_id_file_path") - if ! docker ps --no-trunc --format '{{.ID}}' | grep -q "^${rabbitmq_container_id}\$"; then - echo "==> RabbitMQ container is not running, starting container..." - # Start the container - if ! docker start "${rabbitmq_container_id}"; then - echo "ERROR: Failed to start RabbitMQ container." - exit 1 - fi - echo "==> RabbitMQ container started successfully." - else - echo "==> RabbitMQ container is already running." - fi - fi - ;; - "devbox") - echo "==> Starting DevBox..." - # Check if DevBox container file path - local devbox_container_id_file_path="${WORKING_HOME}/.devbox-instance" - if [[ ! -f "$devbox_container_id_file_path" ]]; then - echo "ERROR: DevBox container is not running. Please run 'devbox init' first." - else - local devbox_container_id=$(cat "$devbox_container_id_file_path") - if ! docker ps --no-trunc --format '{{.ID}}' | grep -q "^${devbox_container_id}\$"; then - echo "==> DevBox container is not running, starting container..." - # Start the container - if ! docker start "${devbox_container_id}"; then - echo "ERROR: Failed to start DevBox container." - exit 1 - fi - echo "==> DevBox container started successfully." - else - echo "==> DevBox container is already running." - fi - fi - ;; - "devsvc" | "notification" | "content" | "central_storage" | "authentication") + "gitea" | "mongodb" | "rabbitmq" | "devbox" | "devsvc" | "notification" | "content" | "central_storage" | "authentication") echo "==> Starting $comp service..." # Check if the component container file exists local component_container_id_file_path="${WORKING_HOME}/.${comp}-instance" @@ -1621,7 +1539,20 @@ devbox_start_command() { esac done + + if [[ "$FREELEAPS_ENDPOINT" == "true" ]]; then + # Sleep for 10 seconds to allow the services to start and echo 10 seconds increase from 1 to 10 in each second + for i in {1..20}; do + if docker ps --no-trunc --format '{{.ID}}' | grep -q "^${devbox_container_id}\$"; then + break + fi + echo -n "-" + sleep 1 + done + + if docker ps --no-trunc --format '{{.ID}}' | grep -q "^${devbox_container_id}\$"; then + echo "==> Starting Freeleaps frontend and backend services..." # Start the backend and frontend services docker exec -i "$devbox_container_id" bash < Stopping MongoDB..." - if [[ -f "${WORKING_HOME}/.mongodb-instance" ]]; then - local container_id - container_id=$(cat "${WORKING_HOME}/.mongodb-instance") - docker stop "$container_id" &>/dev/null || true - else - echo "==> MongoDB container is not running." - fi - ;; - "rabbitmq") - echo "==> Stopping RabbitMQ..." - if [[ -f "${WORKING_HOME}/.rabbitmq-instance" ]]; then - local container_id - container_id=$(cat "${WORKING_HOME}/.rabbitmq-instance") - docker stop "$container_id" &>/dev/null || true - else - echo "==> RabbitMQ container is not running." - fi - ;; "devbox") - echo "==> Stopping devbox..." if [[ -f "${WORKING_HOME}/.devbox-instance" ]]; then local container_id container_id=$(cat "${WORKING_HOME}/.devbox-instance") - docker stop "$container_id" &>/dev/null || true - # Remove the frontend and backend pid files - rm -f "${WORKING_HOME}/.backend.pid" - rm -f "${WORKING_HOME}/.frontend.pid" + if docker ps --no-trunc --format '{{.ID}}' | grep -q "^${container_id}\$"; then + echo "==> Stopping devbox..." + docker stop "$container_id" &>/dev/null || true + # Remove the frontend and backend pid files + rm -f "${WORKING_HOME}/.backend.pid" + rm -f "${WORKING_HOME}/.frontend.pid" + else + echo "==> DevBox container is not running." + fi else echo "==> Backend service is not running." fi ;; - "devsvc" | "notification" | "content" | "central_storage" | "authentication") - echo "==> Stopping $comp service..." + "gitea"| "mongodb"| "rabbitmq" | "devsvc" | "notification" | "content" | "central_storage" | "authentication") if [[ -f "${WORKING_HOME}/.${comp}-instance" ]]; then local container_id container_id=$(cat "${WORKING_HOME}/.${comp}-instance") - docker stop "$container_id" &>/dev/null || true + if docker ps --no-trunc --format '{{.ID}}' | grep -q "^${container_id}\$"; then + echo "==> Stopping $comp service..." + docker stop "$container_id" &>/dev/null || true + else + echo "==> $comp service is not running." + fi else echo "==> $comp service is not running." fi @@ -1775,9 +1699,8 @@ devbox_stop_command() { exit 1 ;; esac - echo "==> $comp service stopped successfully." done - echo "==> DevBox services stopped successfully." + echo "==> All conponent services stopped successfully." } # :command.function @@ -1895,19 +1818,6 @@ devbox_restart_command() { fi local devbox_container_id=$(cat "$devbox_container_id_file_path") - if ! docker ps -a --no-trunc --format '{{.ID}}' | grep -q "^${devbox_container_id}\$"; then - echo "ERROR: DevBox container is not running. Please run 'devbox init' first." - rm -f "$devbox_container_id_file_path" - exit 1 - fi - - if docker ps --no-trunc --format '{{.ID}}' | grep -q "^${devbox_container_id}\$"; then - echo "==> DevBox container is running." - else - echo "==> DevBox container is not running." - docker start "$devbox_container_id" &>/dev/null || true - sleep 20 - fi # Check if current environment is using local components USE_LOCAL_COMPONENT=$(cat "${WORKING_HOME}/.use-local-component" 2>/dev/null || true) @@ -1935,41 +1845,11 @@ devbox_restart_command() { # Stop the specified components for comp in "${COMPONENTS[@]}"; do case "$comp" in - "gitea") - echo "==> Stopping Gitea..." - if [[ -f "${WORKING_HOME}/.gitea-instance" ]]; then - local container_id - container_id=$(cat "${WORKING_HOME}/.gitea-instance") - docker stop "$container_id" &>/dev/null || true - else - echo "==> Gitea container is not running." - fi - ;; - "mongodb") - echo "==> Stopping MongoDB..." - if [[ -f "${WORKING_HOME}/.mongodb-instance" ]]; then - local container_id - container_id=$(cat "${WORKING_HOME}/.mongodb-instance") - docker stop "$container_id" &>/dev/null || true - else - echo "==> MongoDB container is not running." - fi - ;; - "rabbitmq") - echo "==> Stopping RabbitMQ..." - if [[ -f "${WORKING_HOME}/.rabbitmq-instance" ]]; then - local container_id - container_id=$(cat "${WORKING_HOME}/.rabbitmq-instance") - docker stop "$container_id" &>/dev/null || true - else - echo "==> RabbitMQ container is not running." - fi - ;; "devbox") - echo "==> Stopping devbox service..." if [[ -f "${WORKING_HOME}/.devbox-instance" ]]; then local container_id container_id=$(cat "${WORKING_HOME}/.devbox-instance") + echo "==> Stopping devbox service..." docker stop "$container_id" &>/dev/null || true # Remove the frontend and backend pid files @@ -1980,11 +1860,12 @@ devbox_restart_command() { fi ;; - "devsvc" | "notification" | "content" | "central_storage" | "authentication") - echo "==> Stopping $comp service..." + "gitea" | "mongodb" | "rabbitmq" | "devsvc" | "notification" | "content" | "central_storage" | "authentication") + if [[ -f "${WORKING_HOME}/.${comp}-instance" ]]; then local container_id container_id=$(cat "${WORKING_HOME}/.${comp}-instance") + echo "==> Stopping $comp service..." docker stop "$container_id" &>/dev/null || true else echo "==> $comp service is not running." @@ -2000,47 +1881,7 @@ devbox_restart_command() { # Start the specified components for comp in "${COMPONENTS[@]}"; do case "$comp" in - "gitea") - echo "==> Restarting Gitea..." - if [[ -f "${WORKING_HOME}/.gitea-instance" ]]; then - local container_id - container_id=$(cat "${WORKING_HOME}/.gitea-instance") - docker start "$container_id" &>/dev/null || true - else - echo "==> Gitea container is not running." - fi - ;; - "mongodb") - echo "==> Restarting MongoDB..." - if [[ -f "${WORKING_HOME}/.mongodb-instance" ]]; then - local container_id - container_id=$(cat "${WORKING_HOME}/.mongodb-instance") - docker start "$container_id" &>/dev/null || true - else - echo "==> MongoDB container is not running." - fi - ;; - "rabbitmq") - echo "==> Restarting RabbitMQ..." - if [[ -f "${WORKING_HOME}/.rabbitmq-instance" ]]; then - local container_id - container_id=$(cat "${WORKING_HOME}/.rabbitmq-instance") - docker start "$container_id" &>/dev/null || true - else - echo "==> RabbitMQ container is not running." - fi - ;; - "devbox") - echo "==> Restarting devbox service..." - if [[ -f "${WORKING_HOME}/.devbox-instance" ]]; then - local container_id - container_id=$(cat "${WORKING_HOME}/.devbox-instance") - docker start "$container_id" &>/dev/null || true - else - echo "==> Devbox is not running." - fi - ;; - "devsvc" | "notification" | "content" | "central_storage" | "authentication") + "gitea" | "mongodb" | "rabbitmq" | "devbox" | "devsvc" | "notification" | "content" | "central_storage" | "authentication") echo "==> Restarting $comp service..." if [[ -f "${WORKING_HOME}/.${comp}-instance" ]]; then local container_id @@ -2058,6 +1899,14 @@ devbox_restart_command() { done if [[ "$FREELEAPS_ENDPOINT" == "true" ]]; then + # Sleep for 10 seconds to allow the services to start and echo 10 seconds increase from 1 to 10 in each second + for i in {1..20}; do + if docker ps --no-trunc --format '{{.ID}}' | grep -q "^${devbox_container_id}\$"; then + break + fi + echo -n "-" + sleep 1 + done # Start the backend and frontend services docker exec -i "$devbox_container_id" bash <