103 lines
2.7 KiB
Bash
103 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Path: Commands/Local/Dev/scripts/dev-stack.sh
|
|
set -euo pipefail
|
|
|
|
action=${1:-up}
|
|
|
|
script_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
|
|
project_root=$(cd -- "$script_dir/../../../.." && pwd)
|
|
frontend_dir="$project_root/Frontend"
|
|
frontend_bake="$frontend_dir/docker-bake.hcl"
|
|
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"
|
|
frontend_image="moku/work-frontend:dev"
|
|
backend_image="moku/work-backend:dev"
|
|
frontend_volume="moku_work_frontend_node_modules"
|
|
backend_go_pkg_volume="moku_work_backend_go_pkg"
|
|
backend_go_build_volume="moku_work_backend_go_build"
|
|
backend_runtime_dir="$backend_dir/tmp/dev"
|
|
|
|
source "$script_dir/docker.sh"
|
|
source "$script_dir/env.sh"
|
|
|
|
build_frontend() {
|
|
cd "$frontend_dir"
|
|
docker buildx bake -f "$frontend_bake" dev
|
|
}
|
|
|
|
build_backend() {
|
|
cd "$backend_dir"
|
|
docker buildx bake -f "$backend_bake" dev
|
|
}
|
|
|
|
build_images() {
|
|
build_frontend
|
|
build_backend
|
|
}
|
|
|
|
up_stack() {
|
|
docker compose -f "$compose_file" up -d --remove-orphans --force-recreate
|
|
}
|
|
|
|
down_stack() {
|
|
docker compose -f "$compose_file" down --remove-orphans --volumes
|
|
}
|
|
|
|
follow_logs() {
|
|
docker compose -f "$compose_file" logs -f
|
|
}
|
|
|
|
clean_stack() {
|
|
docker compose -f "$compose_file" down --remove-orphans --volumes >/dev/null 2>&1 || true
|
|
remove_docker_image_if_present "$frontend_image"
|
|
remove_docker_image_if_present "$backend_image"
|
|
remove_docker_volume_if_present "$frontend_volume"
|
|
remove_docker_volume_if_present "$backend_go_pkg_volume"
|
|
remove_docker_volume_if_present "$backend_go_build_volume"
|
|
rm -rf "$backend_runtime_dir"
|
|
}
|
|
|
|
start_stack() {
|
|
build_images
|
|
up_stack
|
|
}
|
|
|
|
case "$action" in
|
|
build)
|
|
ensure_docker 'docker is required for the local development stack. Install Docker first.'
|
|
build_images
|
|
;;
|
|
up|start|rebuild)
|
|
ensure_docker 'docker is required for the local development stack. Install Docker first.'
|
|
ensure_local_env_file "$env_dir"
|
|
start_stack
|
|
;;
|
|
down)
|
|
ensure_docker 'docker is required for the local development stack. Install Docker first.'
|
|
ensure_local_env_file "$env_dir"
|
|
down_stack
|
|
;;
|
|
restart)
|
|
ensure_docker 'docker is required for the local development stack. Install Docker first.'
|
|
ensure_local_env_file "$env_dir"
|
|
docker compose -f "$compose_file" restart
|
|
;;
|
|
logs)
|
|
ensure_docker 'docker is required for the local development stack. Install Docker first.'
|
|
ensure_local_env_file "$env_dir"
|
|
follow_logs
|
|
;;
|
|
clean)
|
|
ensure_docker 'docker is required for the local development stack. Install Docker first.'
|
|
ensure_local_env_file "$env_dir"
|
|
clean_stack
|
|
;;
|
|
*)
|
|
printf 'Unsupported dev stack action: %s\n' "$action" >&2
|
|
exit 1
|
|
;;
|
|
esac
|