#!/usr/bin/env bash set -euo pipefail # launch.sh - helper wrapper around `docker compose` for this repo # # Features: # - sets a stable Compose project name (defaults to peddlers-of-ketran) # - supports multiple compose files (docker-compose.yml and docker-compose.dev.yml) # - convenience commands: up, down, restart, ps, logs, build # - supports --production to switch profiles DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Default values (can be overridden by environment or .env) PROJECT_NAME="${COMPOSE_PROJECT_NAME:-peddlers-of-ketran}" COMPOSE_FILES="${COMPOSE_FILE:-docker-compose.yml:docker-compose.dev.yml}" PRODUCTION=${PRODUCTION:-0} COMMAND="up" SERVICE="" usage() { cat </dev/null 2>&1; then DOCKER_COMPOSE_CMD=(docker compose) elif command -v docker-compose >/dev/null 2>&1; then DOCKER_COMPOSE_CMD=(docker-compose) else echo "Error: neither 'docker compose' nor 'docker-compose' is available on PATH." exit 1 fi compose_base=("${DOCKER_COMPOSE_CMD[@]}" -p "$PROJECT_NAME" "${FILES_ARGS[@]}") echo "Using compose project: $PROJECT_NAME" echo "Compose files: ${FILES_ARGS[*]}" case "$COMMAND" in up) echo "Bringing containers up (detached) with profile '$PROFILE'..." "${compose_base[@]}" --profile "$PROFILE" up -d ;; down) echo "Querying compose-managed containers for project '$PROJECT_NAME'..." # Show containers that will be affected so users know what's being removed "${compose_base[@]}" ps --services --quiet || true echo "Bringing containers down (profile: $PROFILE)..." "${compose_base[@]}" --profile "$PROFILE" down --remove-orphans ;; restart) echo "Restarting containers (down + up -d) with profile '$PROFILE'..." "${compose_base[@]}" --profile "$PROFILE" down --remove-orphans "${compose_base[@]}" --profile "$PROFILE" up -d ;; ps) echo "Compose ps for project '$PROJECT_NAME'" "${compose_base[@]}" ps ;; logs) echo "Tailing logs for project '$PROJECT_NAME'${SERVICE:+, service: $SERVICE}" if [ -n "$SERVICE" ]; then "${compose_base[@]}" logs -f --tail=200 "$SERVICE" else "${compose_base[@]}" logs -f --tail=200 fi ;; build) echo "Building images for project '$PROJECT_NAME'${SERVICE:+, service: $SERVICE}" if [ -n "$SERVICE" ]; then "${compose_base[@]}" build --no-cache "$SERVICE" else "${compose_base[@]}" build --no-cache fi ;; *) echo "Unknown command: $COMMAND" usage exit 1 ;; esac