Files
mcma-bootstrap/lib/env_gen.sh
T
Senko-san 3a63ced4d4 feat: optional YouTube Music source (cookies volume + wizard step)
Adds a step_youtube wizard prompt (enable + cookies host folder), the @YOUTUBE_VOLUME@ token in templates/compose/backend.yml substituted in compose_gen, a YOUTUBE_ENABLED/cookies env block, ensure_youtube_dir in lifecycle, en/ru strings, and a README step.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 14:04:49 +03:00

117 lines
4.3 KiB
Bash

# .env.deploy generation. Renders templates/env/env.template (token
# substitution) and appends conditional blocks for the chosen options.
# The file is written with mode 600 and never echoed to stdout.
# render_template FILE — substitutes @KEY@ tokens from the RENDER assoc array.
# Prints the result to stdout.
render_template() {
local file="$1" content key
content="$(cat "$file")"
for key in "${!RENDER[@]}"; do
content="${content//@${key}@/${RENDER[$key]}}"
done
printf '%s\n' "$content"
}
# build_database_url — sets CFG_DATABASE_URL from the collected DB config.
build_database_url() {
if [[ "$CFG_DB_MODE" == "embedded" ]]; then
CFG_DATABASE_URL="postgresql+asyncpg://${CFG_DB_USER}:${CFG_DB_PASS}@db:5432/${CFG_DB_NAME}"
else
CFG_DATABASE_URL="postgresql+asyncpg://${CFG_DB_USER}:${CFG_DB_PASS}@${CFG_DB_HOST}:${CFG_DB_PORT}/${CFG_DB_NAME}"
fi
}
# generate_env — writes $ENV_FILE from template + conditional sections.
generate_env() {
build_database_url
declare -A RENDER=(
[MCMA_IMAGE_TAG]="$CFG_TAG"
[DATABASE_URL]="$CFG_DATABASE_URL"
[REDIS_URL]="$CFG_REDIS_URL"
[JWT_SECRET]="$CFG_JWT_SECRET"
[MEDIA_HOST_PATH]="$CFG_MEDIA_HOST_PATH"
[STORAGE_BACKEND]="$CFG_STORAGE"
[PUBLIC_API_BASE_URL]="$CFG_PUBLIC_API_BASE_URL"
[HTTP_PORT]="$CFG_HTTP_PORT"
[API_PORT]="$CFG_API_PORT"
[WEBUI_PORT]="$CFG_WEBUI_PORT"
)
umask 077
render_template "${BOOTSTRAP_DIR}/templates/env/env.template" >"$ENV_FILE"
# -- embedded Postgres credentials (needed by the db service) ---------
if [[ "$CFG_DB_MODE" == "embedded" ]]; then
{
echo ""
echo "# -- built-in Postgres --------------------------------------------------"
echo "POSTGRES_USER=${CFG_DB_USER}"
echo "POSTGRES_PASSWORD=${CFG_DB_PASS}"
echo "POSTGRES_DB=${CFG_DB_NAME}"
} >>"$ENV_FILE"
fi
# -- S3 storage -------------------------------------------------------
if [[ "$CFG_STORAGE" == "s3" ]]; then
{
echo ""
echo "# -- S3 storage ---------------------------------------------------------"
echo "S3_ENDPOINT_URL=${CFG_S3_ENDPOINT}"
echo "S3_BUCKET=${CFG_S3_BUCKET}"
echo "S3_REGION=${CFG_S3_REGION}"
echo "S3_ACCESS_KEY=${CFG_S3_KEY}"
echo "S3_SECRET_KEY=${CFG_S3_SECRET}"
} >>"$ENV_FILE"
fi
# -- optional ML service ----------------------------------------------
if [[ -n "${CFG_ML_URL:-}" ]]; then
{
echo ""
echo "# -- optional ML service ------------------------------------------------"
echo "ML_SERVICE_URL=${CFG_ML_URL}"
} >>"$ENV_FILE"
fi
# -- optional AcoustID key (metadata enrichment §1D) ------------------
if [[ -n "${CFG_ACOUSTID_KEY:-}" ]]; then
{
echo ""
echo "# -- metadata enrichment (AcoustID) -------------------------------------"
echo "ACOUSTID_API_KEY=${CFG_ACOUSTID_KEY}"
} >>"$ENV_FILE"
fi
# -- MusicBrainz/AcoustID contact (required by their usage policy) ----
if [[ -n "${CFG_MUSICBRAINZ_OWNER_EMAIL:-}" ]]; then
{
echo ""
echo "# -- MusicBrainz/AcoustID contact ----------------------------------------"
echo "MUSICBRAINZ_OWNER_EMAIL=${CFG_MUSICBRAINZ_OWNER_EMAIL}"
} >>"$ENV_FILE"
fi
# -- YouTube Music source ---------------------------------------------
# COOKIES_HOST_PATH is consumed by the compose volume; COOKIES_PATH is the
# in-container path the backend reads (only used when the file is present).
if [[ "${CFG_YOUTUBE:-no}" == "yes" ]]; then
{
echo ""
echo "# -- YouTube Music source -----------------------------------------------"
echo "YOUTUBE_ENABLED=true"
echo "YOUTUBE_COOKIES_HOST_PATH=${CFG_YOUTUBE_COOKIES_HOST_PATH}"
echo "YOUTUBE_COOKIES_PATH=/data/youtube/cookies.txt"
} >>"$ENV_FILE"
else
{
echo ""
echo "# -- YouTube Music source (disabled) ------------------------------------"
echo "YOUTUBE_ENABLED=false"
} >>"$ENV_FILE"
fi
chmod 600 "$ENV_FILE"
}