#! /usr/bin/env bash RPH_UID=${RPH_UID:-${UID}} # Identify source path (even if symlinked) SOURCE=${BASH_SOURCE[0]} while [ -L "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink DIR=$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd ) SOURCE=$(readlink "$SOURCE") [[ $SOURCE != /* ]] && SOURCE=$DIR/$SOURCE # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located done SCRIPT_DIR=$( cd -- "$( dirname -- "${SOURCE}" )" &> /dev/null && pwd ) BASE_NAME="$(basename -- "$0")" BASE_BASE_NAME="${BASE_NAME%.*}" RUNTIPI_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" RUNTIPI_CLI="${RUNTIPI_ROOT}/runtipi-cli" set -e cd "${RUNTIPI_ROOT}" > /dev/null runtipi-cli() { if ! [ -x "${RUNTIPI_CLI}" ]; then >&2 printf '%s\n' \ "ERROR: ${RUNTIPI_CLI} not found or not executable!" return 1 fi "${RUNTIPI_CLI}" "${@}" } append_file_param() { [ -e "${2:?File name missing}" ] || return echo "${*}" } runtipi-app-docker-compose() { local APP="${1:-Must supply app name}" docker compose \ $(append_file_param --env-file user-config/.env.local) \ $(append_file_param --env-file app-data/${APP}/app.env) \ $(append_file_param --env-file user-config/${APP}/app.env) \ --project-name ${APP} \ $(if [ "$APP" != "runtipi" ]; then echo --file apps/${APP}/docker-compose.yml append_file_param --file repos/29ca930bfdaffa1dfabf5726336380ede7066bc53297e3c0c868b27c97282903/apps/docker-compose.common.yml append_file_param --file "user-config/${APP}/docker-compose.yml" else append_file_param --file "docker-compose.yml" append_file_param --file "user-config/tipi-compose.yml" fi) \ ${@:2} } dls() { local base='{{.Status}}\t{{.ID}}\t{{.Names}}\t{{.Image}}' #'\t{{.Networks}}\t{{.Ports}}\t{{.Mounts}}' local compose='{{.Label "com.docker.compose.project"}}\t{{.Label "com.docker.compose.service"}}' local format="table $compose\t$base" docker container ls --all --format "$format" | ( sed -u '1s/.*/\U&/; q'; sed -Ee 's|^|555|; s|^555runtipi|000runtipi|;' | sort | sed -Ee 's/^[[:digit:]]{3}//' ) } case "${1}" in cli) runtipi-cli "${@:2}" ;; log|logs) POSTGRES_PASSWORD=_ TIPI_VERSION=_ LOCAL_DOMAIN=_ DOMAIN=_ runtipi-app-docker-compose "${2:-runtipi}" logs ${3:+"${@:3}"} ;; start) runtipi-cli start --env-file user-config/.env.local --no-permissions ;; update) if [ -z "${2}" ]; then ${SCRIPT_DIR}/checkver.sh else runtipi-cli update --env-file user-config/.env.local --no-permissions "${2:?Must supply version}" "${@:3}" fi ;; docker) docker "${@:2}" ;; dls) dls "${@:2}" ;; dcoapp) runtipi-app-docker-compose "${@:2}" ;; dockge) cd "${RUNTIPI_ROOT}/../dockge/stacks/${2:?Must supply stack name}" > /dev/null docker compose "${@:3}" ;; shell) runtipi-app-docker-compose "${2:?}" exec ${5:+"${@:5}"} -it "${4:-${2}}" "${3:-bash}" ;; setup) ln -s $2 "$(cd -- "${SCRIPT_DIR}" && pwd)/${BASE_NAME}" "${3:-$HOME/.local/bin/}" ;; edit) ${VISUAL:-${EDITOR:-vi}} $0 ;; *) printf '%s %-12s %s\n' \ "" "" ""\ "Usage:" "" ""\ " ${BASE_NAME} [args...]" "" ""\ "" "" "" \ "Available commands:" "" ""\ "" "" "" \ "runtipi" "" ""\ "" "cli" "runtipi-cli" \ "" "log" "runtipi docker stack logs" \ "" "start" "start runtipi" \ "" "update" "update runtipi to a specific version" \ "" "" "" \ "docker/docker-compose" "" ""\ "" "dcoapp" "docker compose for runtipi apps" \ "" "dls" "stylized docker ls" \ "" "docker" "docker" \ "" "dockge" "docker compose for dockge stacks" \ "" "shell" "enter an insteractive shell" \ "" "" "" \ "misc." "" ""\ "" "exec" "execute within the shell, START_DIR env applies" \ "" "" "" \ "" "setup" "setup runtipictl in user's .local/bin dir" \ "" "" "${BASE_NAME} setup" \ "" "" "${BASE_NAME} setup '' ~/.local/bin/${BASE_BASE_NAME}" \ "" "" "${BASE_NAME} setup '' ~/.local/bin/runtipictl" \ "" "" "" \ "Related env. vars:" "" "" \ "" "VISUAL EDITOR RPH_UID QUIET START_DIR ROOT_EXEC" "" ;; esac # vim: set ft=sh expandtab tabstop=4 shiftwidth=4: