109 lines
3.3 KiB
Bash
Executable File
109 lines
3.3 KiB
Bash
Executable File
#!/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
|