This commit is contained in:
2025-10-28 21:40:05 -05:00
parent 8511882653
commit 8f37c46310
9 changed files with 179 additions and 88 deletions

View File

@@ -7,20 +7,76 @@ set -e # Exit on any error
# Load environment settings
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_DIR="$(dirname "$SCRIPT_DIR")/config"
ENV_FILE="${CONFIG_DIR}/TSYSDevStack-SupportStack-Demo-Settings"
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
CONFIG_DIR="${ROOT_DIR}/config"
COMPOSE_DIR="${ROOT_DIR}/docker-compose"
ROOT_ENV_FILE="${ROOT_DIR}/TSYSDevStack-SupportStack-Demo-Settings"
CONFIG_ENV_FILE="${CONFIG_DIR}/TSYSDevStack-SupportStack-Demo-Settings"
if [ ! -f "$ENV_FILE" ]; then
echo "Error: Environment settings file not found at $ENV_FILE"
if [ -f "$ROOT_ENV_FILE" ]; then
ENV_FILE="$ROOT_ENV_FILE"
elif [ -f "$CONFIG_ENV_FILE" ]; then
ENV_FILE="$CONFIG_ENV_FILE"
else
echo "Error: Environment settings file not found. Expected at $ROOT_ENV_FILE or $CONFIG_ENV_FILE"
exit 1
fi
# Set UID and GID before sourcing the environment file
export TSYSDEVSTACK_UID=$(id -u)
export TSYSDEVSTACK_DOCKER_GID=$(getent group docker > /dev/null 2>&1 && getent group docker | cut -d: -f3 || echo "999")
# Set UID/GID defaults prior to sourcing environment file so runtime values override placeholders
export TSYSDEVSTACK_UID="$(id -u)"
export TSYSDEVSTACK_GID="$(id -g)"
export TSYSDEVSTACK_DOCKER_GID="$(getent group docker >/dev/null 2>&1 && getent group docker | cut -d: -f3 || echo "996")"
# Source the environment file to get all variables
source "$ENV_FILE"
# Explicitly export all environment variables for docker compose
export TSYSDEVSTACK_ENVIRONMENT
export TSYSDEVSTACK_PROJECT_NAME
export TSYSDEVSTACK_NETWORK_NAME
export DOCKER_SOCKET_PROXY_NAME
export DOCKER_SOCKET_PROXY_IMAGE
export DOCKER_SOCKET_PROXY_SOCKET_PATH
export DOCKER_SOCKET_PROXY_NETWORK
export DOCKER_SOCKET_PROXY_CONTAINERS
export DOCKER_SOCKET_PROXY_IMAGES
export DOCKER_SOCKET_PROXY_NETWORKS
export DOCKER_SOCKET_PROXY_VOLUMES
export DOCKER_SOCKET_PROXY_BUILD
export DOCKER_SOCKET_PROXY_MANIFEST
export DOCKER_SOCKET_PROXY_PLUGINS
export DOCKER_SOCKET_PROXY_VERSION
export HOMEPAGE_NAME
export HOMEPAGE_IMAGE
export HOMEPAGE_PORT
export HOMEPAGE_NETWORK
export HOMEPAGE_CONFIG_PATH
export WAKAAPI_NAME
export WAKAAPI_IMAGE
export WAKAAPI_PORT
export WAKAAPI_NETWORK
export WAKAAPI_CONFIG_PATH
export WAKAAPI_WAKATIME_API_KEY
export WAKAAPI_DATABASE_PATH
export DOCKER_SOCKET_PROXY_MEM_LIMIT
export DOCKER_SOCKET_PROXY_CPU_LIMIT
export HOMEPAGE_MEM_LIMIT
export HOMEPAGE_CPU_LIMIT
export WAKAAPI_MEM_LIMIT
export WAKAAPI_CPU_LIMIT
export HEALTH_CHECK_INTERVAL
export HEALTH_CHECK_TIMEOUT
export HEALTH_CHECK_START_PERIOD
export HEALTH_CHECK_RETRIES
export DOCKER_SOCKET_PROXY_CONNECTION_TIMEOUT
export HOMEPAGE_STARTUP_TIMEOUT
export WAKAAPI_INITIALIZATION_TIMEOUT
export DOCKER_COMPOSE_STARTUP_TIMEOUT
export BIND_ADDRESS
export TSYSDEVSTACK_UID
export TSYSDEVSTACK_GID
export TSYSDEVSTACK_DOCKER_GID
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
@@ -45,6 +101,10 @@ log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
compose() {
docker compose -p "$TSYSDEVSTACK_PROJECT_NAME" "$@"
}
# Function to check if docker is available
check_docker() {
if ! command -v docker &> /dev/null; then
@@ -61,8 +121,12 @@ check_docker() {
# Function to create the shared network
create_network() {
log "Creating shared network: $TSYSDEVSTACK_NETWORK_NAME"
if ! docker network ls | grep -q "$TSYSDEVSTACK_NETWORK_NAME"; then
docker network create "$TSYSDEVSTACK_NETWORK_NAME" --driver bridge
if ! docker network inspect "$TSYSDEVSTACK_NETWORK_NAME" >/dev/null 2>&1; then
docker network create \
--driver bridge \
--label tsysdevstack.component="supportstack-demo" \
--label tsysdevstack.environment="$TSYSDEVSTACK_ENVIRONMENT" \
"$TSYSDEVSTACK_NETWORK_NAME"
log_success "Network created: $TSYSDEVSTACK_NETWORK_NAME"
else
log "Network already exists: $TSYSDEVSTACK_NETWORK_NAME"
@@ -72,7 +136,7 @@ create_network() {
# Function to remove the shared network
remove_network() {
log "Removing shared network: $TSYSDEVSTACK_NETWORK_NAME"
if docker network ls | grep -q "$TSYSDEVSTACK_NETWORK_NAME"; then
if docker network inspect "$TSYSDEVSTACK_NETWORK_NAME" >/dev/null 2>&1; then
docker network rm "$TSYSDEVSTACK_NETWORK_NAME"
log_success "Network removed: $TSYSDEVSTACK_NETWORK_NAME"
else
@@ -85,13 +149,13 @@ start() {
log "Starting TSYSDevStack SupportStack Demo MVP"
check_docker
log "Using environment file: $ENV_FILE"
create_network
# Start docker-socket-proxy first (dependency for homepage)
log "Starting docker-socket-proxy..."
COMPOSE_DIR="$(dirname "$SCRIPT_DIR")/docker-compose"
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" ]; then
docker compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" up -d
compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" up -d
log_success "docker-socket-proxy started"
else
log_warning "docker-socket-proxy compose file not found, skipping..."
@@ -103,9 +167,8 @@ start() {
# Start homepage
log "Starting homepage..."
COMPOSE_DIR="$(dirname "$SCRIPT_DIR")/docker-compose"
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" ]; then
docker compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" up -d
compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" up -d
log_success "homepage started"
else
log_warning "homepage compose file not found, skipping..."
@@ -117,9 +180,8 @@ start() {
# Start wakaapi
log "Starting wakaapi..."
COMPOSE_DIR="$(dirname "$SCRIPT_DIR")/docker-compose"
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" ]; then
docker compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" up -d
compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" up -d
log_success "wakaapi started"
else
log_warning "wakaapi compose file not found, skipping..."
@@ -141,10 +203,9 @@ stop() {
check_docker
# Stop wakaapi first
COMPOSE_DIR="$(dirname "$SCRIPT_DIR")/docker-compose"
log "Stopping wakaapi..."
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" ]; then
docker compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" down
compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" down
log_success "wakaapi stopped"
else
log_warning "wakaapi compose file not found, skipping..."
@@ -153,7 +214,7 @@ stop() {
# Stop homepage
log "Stopping homepage..."
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" ]; then
docker compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" down
compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" down
log_success "homepage stopped"
else
log_warning "homepage compose file not found, skipping..."
@@ -162,7 +223,7 @@ stop() {
# Stop docker-socket-proxy last
log "Stopping docker-socket-proxy..."
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" ]; then
docker compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" down
compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" down
log_success "docker-socket-proxy stopped"
else
log_warning "docker-socket-proxy compose file not found, skipping..."
@@ -182,17 +243,16 @@ uninstall() {
# Remove containers, volumes, and networks
log "Removing containers and volumes..."
COMPOSE_DIR="$(dirname "$SCRIPT_DIR")/docker-compose"
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" ]; then
docker compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" down -v
compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" down -v
fi
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" ]; then
docker compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" down -v
compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" down -v
fi
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" ]; then
docker compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" down -v
compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" down -v
fi
# Remove the shared network
@@ -209,20 +269,19 @@ update() {
# Pull the latest images
log "Pulling latest images..."
COMPOSE_DIR="$(dirname "$SCRIPT_DIR")/docker-compose"
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" ]; then
docker compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" pull
compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" pull
log_success "docker-socket-proxy images updated"
fi
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" ]; then
docker compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" pull
compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" pull
log_success "homepage images updated"
fi
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" ]; then
docker compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" pull
compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" pull
log_success "wakaapi images updated"
fi
@@ -241,11 +300,9 @@ test() {
# Add test functions here
log "Checking if services are running..."
COMPOSE_DIR="$(dirname "$SCRIPT_DIR")/docker-compose"
# Check docker-socket-proxy
if [ -f "${COMPOSE_DIR}/TSYSDevStack-SupportStack-Demo-DockerCompose-docker-socket-proxy.yml" ]; then
if docker compose -f "${COMPOSE_DIR}/TSYSDevStack-SupportStack-Demo-DockerCompose-docker-socket-proxy.yml" ps | grep -q "Up"; then
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" ]; then
if compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-docker-socket-proxy.yml" ps | grep -q "Up"; then
log_success "docker-socket-proxy is running"
else
log_error "docker-socket-proxy is not running"
@@ -253,8 +310,8 @@ test() {
fi
# Check homepage
if [ -f "${COMPOSE_DIR}/TSYSDevStack-SupportStack-Demo-DockerCompose-homepage.yml" ]; then
if docker compose -f "${COMPOSE_DIR}/TSYSDevStack-SupportStack-Demo-DockerCompose-homepage.yml" ps | grep -q "Up"; then
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" ]; then
if compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-homepage.yml" ps | grep -q "Up"; then
log_success "homepage is running"
else
log_error "homepage is not running"
@@ -262,8 +319,8 @@ test() {
fi
# Check wakaapi
if [ -f "${COMPOSE_DIR}/TSYSDevStack-SupportStack-Demo-DockerCompose-wakaapi.yml" ]; then
if docker compose -f "${COMPOSE_DIR}/TSYSDevStack-SupportStack-Demo-DockerCompose-wakaapi.yml" ps | grep -q "Up"; then
if [ -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" ]; then
if compose -f "${COMPOSE_DIR}/tsysdevstack-supportstack-demo-DockerCompose-wakaapi.yml" ps | grep -q "Up"; then
log_success "wakaapi is running"
else
log_error "wakaapi is not running"
@@ -271,12 +328,24 @@ test() {
fi
# Run any unit/integration tests if available
if [ -d "${SCRIPT_DIR}/tests" ]; then
log "Running specific tests..."
# Add specific test commands here when test files exist
TESTS_DIR="$(dirname "$SCRIPT_DIR")/tests"
if [ -d "$TESTS_DIR" ]; then
log "Running specific tests from $TESTS_DIR..."
# Run individual test scripts
for test_script in "$TESTS_DIR"/*.sh; do
if [ -f "$test_script" ] && [ -r "$test_script" ] && [ -x "$test_script" ]; then
log "Running test: $test_script"
"$test_script"
if [ $? -eq 0 ]; then
log_success "Test completed: $(basename "$test_script")"
else
log_error "Test failed: $(basename "$test_script")"
fi
fi
done
log_success "Tests completed"
else
log_warning "No tests directory found"
log_warning "No tests directory found at $TESTS_DIR"
fi
log_success "Test execution completed"
@@ -336,4 +405,4 @@ case "$1" in
show_help
exit 1
;;
esac
esac