lidarr-spotify-frontend/scripts/run-unraid.sh

155 lines
7.3 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
set -euo pipefail
FORCE_UPDATE_TEMPLATE=0
for arg in "$@"; do
case "${arg}" in
--forceUpdateTemplate)
FORCE_UPDATE_TEMPLATE=1
;;
esac
done
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
TEMPLATE_DIR="${TEMPLATE_DIR:-/boot/config/plugins/dockerMan/templates-user}"
TEMPLATE_NAME="${TEMPLATE_NAME:-my-lidarr-spotify-frontend.xml}"
TEMPLATE_PATH="${TEMPLATE_DIR}/${TEMPLATE_NAME}"
CONTAINER_NAME="${CONTAINER_NAME:-lidarr-spotify-frontend}"
IMAGE_REPO="${IMAGE_REPO:-forgejo.tailef61c0.ts.net/openclaw/lidarr-spotify-frontend}"
IMAGE_TAG="${IMAGE_TAG:-latest}"
IMAGE="${IMAGE_REPO}:${IMAGE_TAG}"
PUSH_IMAGE="${PUSH_IMAGE:-0}"
REGISTRY_URL="${REGISTRY_URL:-forgejo.tailef61c0.ts.net}"
REGISTRY_USER="${REGISTRY_USER:-}"
REGISTRY_TOKEN="${REGISTRY_TOKEN:-}"
HOST_PORT="${HOST_PORT:-3000}"
APPDATA_PATH="${APPDATA_PATH:-/mnt/user/appdata/lidarr-spotify-frontend}"
MUSIC_PATH="${MUSIC_PATH:-/mnt/user/music}"
TZ_VALUE="${TZ_VALUE:-Europe/Berlin}"
SPOTIFY_CLIENT_ID="${SPOTIFY_CLIENT_ID:-}"
SPOTIFY_CLIENT_SECRET="${SPOTIFY_CLIENT_SECRET:-}"
YOUTUBE_API_KEY="${YOUTUBE_API_KEY:-}"
LIDARR_URL="${LIDARR_URL:-http://lidarr:8686}"
LIDARR_API_KEY="${LIDARR_API_KEY:-}"
LIDARR_ROOT_FOLDER="${LIDARR_ROOT_FOLDER:-/music}"
LIDARR_QUALITY_PROFILE_ID="${LIDARR_QUALITY_PROFILE_ID:-1}"
LIDARR_METADATA_PROFILE_ID="${LIDARR_METADATA_PROFILE_ID:-1}"
xml_escape() {
local s="${1:-}"
s="${s//&/&}"
s="${s//</&lt;}"
s="${s//>/&gt;}"
s="${s//\"/&quot;}"
s="${s//\'/&apos;}"
printf '%s' "${s}"
}
HOST_PORT_ESCAPED="$(xml_escape "${HOST_PORT}")"
APPDATA_PATH_ESCAPED="$(xml_escape "${APPDATA_PATH}")"
MUSIC_PATH_ESCAPED="$(xml_escape "${MUSIC_PATH}")"
TZ_VALUE_ESCAPED="$(xml_escape "${TZ_VALUE}")"
SPOTIFY_CLIENT_ID_ESCAPED="$(xml_escape "${SPOTIFY_CLIENT_ID}")"
SPOTIFY_CLIENT_SECRET_ESCAPED="$(xml_escape "${SPOTIFY_CLIENT_SECRET}")"
YOUTUBE_API_KEY_ESCAPED="$(xml_escape "${YOUTUBE_API_KEY}")"
LIDARR_URL_ESCAPED="$(xml_escape "${LIDARR_URL}")"
LIDARR_API_KEY_ESCAPED="$(xml_escape "${LIDARR_API_KEY}")"
LIDARR_ROOT_FOLDER_ESCAPED="$(xml_escape "${LIDARR_ROOT_FOLDER}")"
LIDARR_QUALITY_PROFILE_ID_ESCAPED="$(xml_escape "${LIDARR_QUALITY_PROFILE_ID}")"
LIDARR_METADATA_PROFILE_ID_ESCAPED="$(xml_escape "${LIDARR_METADATA_PROFILE_ID}")"
if ! command -v docker >/dev/null 2>&1; then
echo "Fehler: docker wurde nicht gefunden."
exit 1
fi
echo "==> Build image ${IMAGE}"
docker build -t "${IMAGE}" "${PROJECT_ROOT}"
if [[ "${PUSH_IMAGE}" == "1" ]]; then
if [[ -n "${REGISTRY_USER}" && -n "${REGISTRY_TOKEN}" ]]; then
echo "==> Login registry ${REGISTRY_URL} als ${REGISTRY_USER}"
echo "${REGISTRY_TOKEN}" | docker login "${REGISTRY_URL}" --username "${REGISTRY_USER}" --password-stdin
fi
echo "==> Push image ${IMAGE}"
docker push "${IMAGE}"
fi
mkdir -p "${TEMPLATE_DIR}"
if [[ "${FORCE_UPDATE_TEMPLATE}" != "1" ]]; then
echo "==> Template-Schritt übersprungen (nutze --forceUpdateTemplate)"
echo "==> Fertig"
echo "Image: ${IMAGE}"
echo "Template (unveraendert): ${TEMPLATE_PATH}"
exit 0
fi
TMP_TEMPLATE="$(mktemp)"
trap 'rm -f "${TMP_TEMPLATE}"' EXIT
cat > "${TMP_TEMPLATE}" <<EOF
<?xml version="1.0"?>
<Container version="2">
<Name>${CONTAINER_NAME}</Name>
<Repository>${IMAGE}</Repository>
<Registry>https://${REGISTRY_URL}/</Registry>
<Network>bridge</Network>
<MyIP/>
<Shell>sh</Shell>
<Privileged>false</Privileged>
<Support/>
<Project>https://github.com/</Project>
<Overview>Frontend fuer Spotify Album-Suche und Uebergabe an Lidarr.</Overview>
<Category>Downloader:</Category>
<WebUI>http://[IP]:[PORT:3000]/</WebUI>
<TemplateURL/>
<Icon>https://raw.githubusercontent.com/homarr-labs/dashboard-icons/main/svg/lidarr.svg</Icon>
<ExtraParams/>
<PostArgs/>
<CPUset/>
<DonateText/>
<DonateLink/>
<Description>Spotify Albumsuche, Track-Auswahl und Uebergabe an Lidarr.</Description>
<Config Name="WebUI Port" Target="3000" Default="3000" Mode="tcp" Description="Container Port: 3000" Type="Port" Display="always" Required="true" Mask="false">${HOST_PORT_ESCAPED}</Config>
<Config Name="AppData Path" Target="/config" Default="/mnt/user/appdata/lidarr-spotify-frontend" Mode="rw" Description="Container Path: /config" Type="Path" Display="always" Required="true" Mask="false">${APPDATA_PATH_ESCAPED}</Config>
<Config Name="Music Path (optional)" Target="/music" Default="/mnt/user/music" Mode="rw" Description="Container Path: /music" Type="Path" Display="advanced" Required="false" Mask="false">${MUSIC_PATH_ESCAPED}</Config>
<Config Name="Timezone" Target="TZ" Default="Europe/Berlin" Mode="" Description="Container Variable: TZ" Type="Variable" Display="advanced" Required="false" Mask="false">${TZ_VALUE_ESCAPED}</Config>
<Config Name="Spotify Client ID" Target="SPOTIFY_CLIENT_ID" Default="" Mode="" Description="Container Variable: SPOTIFY_CLIENT_ID" Type="Variable" Display="always" Required="true" Mask="false">${SPOTIFY_CLIENT_ID_ESCAPED}</Config>
<Config Name="Spotify Client Secret" Target="SPOTIFY_CLIENT_SECRET" Default="" Mode="" Description="Container Variable: SPOTIFY_CLIENT_SECRET" Type="Variable" Display="always" Required="true" Mask="true">${SPOTIFY_CLIENT_SECRET_ESCAPED}</Config>
<Config Name="YouTube API Key" Target="YOUTUBE_API_KEY" Default="" Mode="" Description="Container Variable: YOUTUBE_API_KEY (optional)" Type="Variable" Display="advanced" Required="false" Mask="true">${YOUTUBE_API_KEY_ESCAPED}</Config>
<Config Name="Lidarr URL" Target="LIDARR_URL" Default="http://lidarr:8686" Mode="" Description="Container Variable: LIDARR_URL" Type="Variable" Display="always" Required="true" Mask="false">${LIDARR_URL_ESCAPED}</Config>
<Config Name="Lidarr API Key" Target="LIDARR_API_KEY" Default="" Mode="" Description="Container Variable: LIDARR_API_KEY" Type="Variable" Display="always" Required="true" Mask="true">${LIDARR_API_KEY_ESCAPED}</Config>
<Config Name="Lidarr Root Folder" Target="LIDARR_ROOT_FOLDER" Default="/music" Mode="" Description="Container Variable: LIDARR_ROOT_FOLDER" Type="Variable" Display="always" Required="true" Mask="false">${LIDARR_ROOT_FOLDER_ESCAPED}</Config>
<Config Name="Lidarr Quality Profile ID" Target="LIDARR_QUALITY_PROFILE_ID" Default="1" Mode="" Description="Container Variable: LIDARR_QUALITY_PROFILE_ID" Type="Variable" Display="advanced" Required="true" Mask="false">${LIDARR_QUALITY_PROFILE_ID_ESCAPED}</Config>
<Config Name="Lidarr Metadata Profile ID" Target="LIDARR_METADATA_PROFILE_ID" Default="1" Mode="" Description="Container Variable: LIDARR_METADATA_PROFILE_ID" Type="Variable" Display="advanced" Required="true" Mask="false">${LIDARR_METADATA_PROFILE_ID_ESCAPED}</Config>
</Container>
EOF
if command -v xmllint >/dev/null 2>&1; then
xmllint --noout "${TMP_TEMPLATE}"
fi
if [[ -f "${TEMPLATE_PATH}" ]]; then
if cmp -s "${TMP_TEMPLATE}" "${TEMPLATE_PATH}"; then
echo "==> Template unveraendert, kein Überschreiben: ${TEMPLATE_PATH}"
else
echo "==> Aktualisiere vorhandenes Template: ${TEMPLATE_PATH}"
mv "${TMP_TEMPLATE}" "${TEMPLATE_PATH}"
TMP_TEMPLATE=""
fi
else
echo "==> Erstelle neues Template: ${TEMPLATE_PATH}"
mv "${TMP_TEMPLATE}" "${TEMPLATE_PATH}"
TMP_TEMPLATE=""
fi
echo "==> Fertig"
echo "Image: ${IMAGE}"
echo "Template: ${TEMPLATE_PATH}"
echo "Import in Unraid ueber: Docker -> Add Container -> Template -> ${TEMPLATE_NAME}"