#!/bin/bash # COMMON FUNCTIONS # JDE # 2025-04-25 # This file is not required if you write your own template. # Print error message and exit with code 1 # Usage: die "error message" die() { echo -e "\033[91mError: $1\033[0m" exit 1 } # Load environment variables from .env file # Usage: load_env [path_to_env_file] # If no path is provided, looks for .env in the same directory as the script load_env() { local script_dir="$(dirname "${BASH_SOURCE[0]}")" local env_file # first load basic.env for the template defaults if [ -f "$script_dir/_basic.env" ]; then set -a source "$script_dir/_basic.env" set +a else echo "Warning: _basic.env file not found at $script_dir/_basic.env. Broken template?" return 1 fi # now load the server specific env file if [ -z "$1" ]; then echo "Usage: $0 [path_to_env_file]" return 1 fi env_file="$1/service.env" if [ ! -f "$env_file" ]; then echo "Warning: service.env file not found at $1" return 1 fi set -a source "$env_file" set +a } grey_start() { echo -e -n "\033[90m" } grey_end() { echo -e -n "\033[0m" } create_and_start_container() { if [ -z "$1" ] || [ -z "$2" ]; then die "Template error: create_and_start_container " fi local run_cmd="$1" local container_name="$2" if _is_container_exists $container_name; then _is_container_running $container_name && return 0 _start_container $container_name else grey_start $run_cmd grey_end fi if ! _is_container_running $container_name; then die "Container ${container_name} failed to start" fi ID=$(_get_container_id $container_name) echo "Container ${container_name} is running with ID ${ID}" } function create_folder() { local folder="$1" if [ -d "$folder" ]; then return 0 fi if ! mkdir -p "$folder"; then die "Failed to create folder: $folder" fi chmod 777 "$folder" echo "Folder created: $folder" } # Check if docker is installed _check_docker_installed() { if ! command -v docker &> /dev/null; then echo "Docker is not installed" return 1 fi # check if docker daemon is running if ! docker info &> /dev/null; then echo "Docker daemon is not running" return 1 fi # check if user has permission to run docker if ! docker run --rm hello-world &> /dev/null; then echo "User does not have permission to run docker" return 1 fi return 0 } # Check if a container exists _is_container_exists() { if ! docker ps -a --format "{{.Names}}" | grep -q "^$1$"; then return 1 fi return 0 } # Check if a container is running _is_container_running() { if ! docker ps --format "{{.Names}}" | grep -q "^$1$"; then return 1 fi return 0 } # get contianer ID _get_container_id() { docker ps --format "{{.ID}}" --filter "name=$1" } # get container status _get_container_status() { docker ps --format "{{.Status}}" --filter "name=$1" } # start container that exists _start_container() { _is_container_exists $1 || return 1 _is_container_running $1 && return 0 docker start $1 } # stop container that exists _stop_container() { _is_container_running $1 || return 0; docker stop $1 } # remove container that exists _remove_container() { _stop_container $1 _is_container_exists $1 || return 0; docker rm $1 } # get container logs _get_container_logs() { if ! _is_container_exists $1; then echo "Container $1 does not exist" return 1 fi docker logs $1 } check_required_env_vars() { local required_vars=("$@") for var in "${required_vars[@]}"; do if [ -z "${!var}" ]; then die "Required environment variable $var is not set in your service.env file" fi done }