#!/bin/sh set -eu script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) repo_dir=$(CDPATH= cd -- "$script_dir/../.." && pwd) compose_file="$repo_dir/deploy/docker-compose.review.yml" env_file="$repo_dir/deploy/importarr.review.env" env_example="$repo_dir/deploy/importarr.review.env.example" data_dir="$repo_dir/.review-data" repo_name=$(printf '%s' "${repo_dir##*/}" | tr '[:upper:]' '[:lower:]' | tr -c 'a-z0-9_-' '-') repo_id=$(printf '%s' "$repo_dir" | cksum | awk '{print $1}') project_name="importarr-review-${repo_name}-${repo_id}" review_image="${project_name}-importarr:review" usage() { echo "Usage: $0 {up|update|status|logs|stop|down|reset}" >&2 exit 2 } command -v docker >/dev/null 2>&1 || { echo "docker is required" >&2 exit 1 } if docker info >/dev/null 2>&1; then docker_with_sudo=false elif command -v sudo >/dev/null 2>&1 && sudo -n docker info >/dev/null 2>&1; then docker_with_sudo=true else echo "cannot access the Docker daemon with docker or sudo -n docker" >&2 exit 1 fi compose() { selected_env_file=$env_example if [ -f "$env_file" ]; then selected_env_file=$env_file fi if [ "$docker_with_sudo" = true ]; then sudo -n env REVIEW_IMAGE="$review_image" REVIEW_SERVICE_ENV_FILE="$selected_env_file" \ docker compose --project-name "$project_name" --project-directory "$repo_dir/deploy" \ --env-file "$selected_env_file" -f "$compose_file" "$@" else REVIEW_IMAGE="$review_image" REVIEW_SERVICE_ENV_FILE="$selected_env_file" \ docker compose --project-name "$project_name" --project-directory "$repo_dir/deploy" \ --env-file "$selected_env_file" -f "$compose_file" "$@" fi } ensure_env_file() { if [ ! -f "$env_file" ]; then cp "$env_example" "$env_file" echo "Created $env_file from the safe review defaults." fi } remove_data() { if rm -rf "$data_dir" 2>/dev/null && [ ! -e "$data_dir" ]; then return fi if [ "$docker_with_sudo" = true ]; then sudo -n rm -rf "$data_dir" else echo "cannot remove root-owned review data without passwordless sudo: $data_dir" >&2 exit 1 fi } case "${1:-}" in up|update) ensure_env_file mkdir -p "$data_dir/config" "$data_dir/downloads" "$data_dir/movies" "$data_dir/tv" compose up --detach --build --wait ;; status) compose ps container_id=$(compose ps --quiet importarr) [ -n "$container_id" ] || { echo "review service is not running" >&2 exit 1 } health=$(if [ "$docker_with_sudo" = true ]; then sudo -n docker inspect --format '{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}' "$container_id" else docker inspect --format '{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}' "$container_id" fi) [ "$health" = healthy ] || { echo "review service is not healthy (status: $health)" >&2 exit 1 } ;; logs) compose logs --follow --tail=200 ;; stop) compose stop ;; down) compose down --remove-orphans ;; reset) compose down --remove-orphans remove_data echo "Removed review data: $data_dir" ;; *) usage ;; esac