#!/usr/bin/env bash # Path: Commands/Local/Dev/scripts/backend-stack.sh set -euo pipefail action=${1:-up} script_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) project_root=$(cd -- "$script_dir/../../../.." && pwd) backend_dir="$project_root/Backend" backend_bake="$backend_dir/docker-bake.hcl" env_dir="$project_root/Env" compose_file="$project_root/Docker/docker-compose.local.dev.yaml" runtime_dir="$backend_dir/tmp/dev" backend_image="moku/work-backend:dev" backend_go_pkg_volume="moku_work_backend_go_pkg" backend_go_build_volume="moku_work_backend_go_build" services=(web api worker) source "$script_dir/docker.sh" source "$script_dir/env.sh" build_backend() { cd "$backend_dir" docker buildx bake -f "$backend_bake" dev } up_backend() { docker compose -f "$compose_file" up -d --remove-orphans --force-recreate "${services[@]}" } down_backend() { docker compose -f "$compose_file" stop "${services[@]}" >/dev/null 2>&1 || true docker compose -f "$compose_file" rm -f "${services[@]}" >/dev/null 2>&1 || true } restart_backend() { docker compose -f "$compose_file" restart "${services[@]}" } follow_logs() { docker compose -f "$compose_file" logs -f "${services[@]}" } clean_runtime() { rm -rf "$runtime_dir" } case "$action" in check) ensure_docker 'docker is required for the local backend dev runtime. Install Docker first.' ;; build) ensure_docker 'docker is required for the local backend dev runtime. Install Docker first.' build_backend ;; up) ensure_docker 'docker is required for the local backend dev runtime. Install Docker first.' ensure_local_env_file "$env_dir" up_backend ;; down) ensure_docker 'docker is required for the local backend dev runtime. Install Docker first.' ensure_local_env_file "$env_dir" down_backend ;; restart) ensure_docker 'docker is required for the local backend dev runtime. Install Docker first.' ensure_local_env_file "$env_dir" restart_backend ;; logs) ensure_docker 'docker is required for the local backend dev runtime. Install Docker first.' ensure_local_env_file "$env_dir" follow_logs ;; clean) ensure_docker 'docker is required for the local backend dev runtime. Install Docker first.' ensure_local_env_file "$env_dir" down_backend remove_docker_image_if_present "$backend_image" remove_docker_volume_if_present "$backend_go_pkg_volume" remove_docker_volume_if_present "$backend_go_build_volume" clean_runtime ;; *) printf 'Unsupported backend stack action: %s\n' "$action" >&2 exit 1 ;; esac