Stage 0: migrate pipeline scripts from /opt/sldl, scaffold repo
Moves all ~30 pipeline scripts, configs, and the vendored sldl binary into this repo (source /opt/sldl left untouched). Removes all docker exec/docker compose dependencies now that beets and sldl run in-process/as a subprocess of this container instead of via soulbeet/on-demand sldl containers. Replaces hardcoded host paths, Navidrome credentials, and Spotify credential sourcing with env-var-driven paths and shared credential loaders. Adds Dockerfile, entrypoint.sh, requirements.txt, docker-compose.snippet.yml, and the initial app DB schema.
This commit is contained in:
Executable
+49
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
# regen.sh — regenerate per-playlist sldl configs from _template.conf.
|
||||
#
|
||||
# Source of truth is $ALEMBIC_CONFIG_DIR/pipeline/playlists.json, written by
|
||||
# the alembic app's playlist_service whenever a playlist is added/edited/
|
||||
# removed via the UI. This script never edits that source of truth — it only
|
||||
# renders it. Run automatically by the app before each playlist sync, or
|
||||
# manually: regen.sh
|
||||
#
|
||||
# playlists.json shape: a JSON array of objects, each with at least
|
||||
# {"name": "...", "spotify_url": "...", "active": true, "no_m3u": false}.
|
||||
# Inactive playlists still get a .conf rendered (so a manual run is always
|
||||
# possible) but are skipped by the scheduler.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
ALEMBIC_CONFIG_DIR="${ALEMBIC_CONFIG_DIR:-/config}"
|
||||
MUSIC_DATA_DIR="${MUSIC_DATA_DIR:-/data/music}"
|
||||
PIPELINE_DIR="${PIPELINE_DIR:-/app/pipeline}"
|
||||
|
||||
CONFIG_OUT_DIR="$ALEMBIC_CONFIG_DIR/pipeline"
|
||||
PLAYLISTS_JSON="$CONFIG_OUT_DIR/playlists.json"
|
||||
TEMPLATE="$PIPELINE_DIR/configs/_template.conf"
|
||||
SLDL_DROPBOX_ROOT="$MUSIC_DATA_DIR/sldl-dropbox"
|
||||
|
||||
if [[ ! -f "$PLAYLISTS_JSON" ]]; then
|
||||
echo "ERROR: $PLAYLISTS_JSON not found — nothing to regenerate." >&2
|
||||
echo " This file is written by the alembic app; run its playlist" >&2
|
||||
echo " import/seed step first if this is a fresh setup." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$CONFIG_OUT_DIR"
|
||||
|
||||
# One "name<TAB>spotify_url" line per playlist, active or not (see header).
|
||||
python3 -c '
|
||||
import json, sys
|
||||
with open(sys.argv[1]) as f:
|
||||
playlists = json.load(f)
|
||||
for p in playlists:
|
||||
print(f"{p[\"name\"]}\t{p[\"spotify_url\"]}")
|
||||
' "$PLAYLISTS_JSON" | while IFS=$'\t' read -r name url; do
|
||||
[[ -z "$name" ]] && continue
|
||||
sed -e "s|PLAYLIST_NAME|${name}|g" \
|
||||
-e "s|SPOTIFY_URL|${url}|g" \
|
||||
-e "s|SLDL_DROPBOX_ROOT|${SLDL_DROPBOX_ROOT}|g" \
|
||||
"$TEMPLATE" > "$CONFIG_OUT_DIR/${name}.conf"
|
||||
echo "Generated $CONFIG_OUT_DIR/${name}.conf"
|
||||
done
|
||||
Reference in New Issue
Block a user