94 lines
2.7 KiB
Bash
94 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
APP_HOME="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
CONFIG_FILE="${APP_HOME}/config/catalogsync.env"
|
|
# shellcheck source=./load_env.sh
|
|
source "${SCRIPT_DIR}/load_env.sh"
|
|
|
|
fail() {
|
|
echo "[upload_all.sh] ERROR: $*" >&2
|
|
exit 1
|
|
}
|
|
|
|
require_var() {
|
|
local var_name="$1"
|
|
if [[ -z "${!var_name:-}" ]]; then
|
|
fail "Missing required config variable: ${var_name} (from ${CONFIG_FILE})"
|
|
fi
|
|
}
|
|
|
|
if [[ -f "${CONFIG_FILE}" ]]; then
|
|
load_env_file "${CONFIG_FILE}"
|
|
else
|
|
fail "Config file not found: ${CONFIG_FILE}. Copy catalogsync.env.example to catalogsync.env first."
|
|
fi
|
|
|
|
for required_var in DB_PATH LOG_DIR PYTHON_BIN VENV_DIR OBJECT_BACKEND_NAME OBJECT_BUCKET OBJECT_ENDPOINT OBJECT_CREDENTIAL_ENV_PREFIX; do
|
|
require_var "${required_var}"
|
|
done
|
|
|
|
if [[ -n "${VENV_DIR:-}" && -x "${VENV_DIR}/bin/python" ]]; then
|
|
PYTHON_BIN="${VENV_DIR}/bin/python"
|
|
fi
|
|
|
|
if ! command -v "${PYTHON_BIN}" >/dev/null 2>&1; then
|
|
fail "PYTHON_BIN is not executable or not found in PATH: ${PYTHON_BIN}"
|
|
fi
|
|
|
|
ACCESS_KEY_VAR="${OBJECT_CREDENTIAL_ENV_PREFIX}_ACCESS_KEY_ID"
|
|
SECRET_KEY_VAR="${OBJECT_CREDENTIAL_ENV_PREFIX}_SECRET_ACCESS_KEY"
|
|
require_var "${ACCESS_KEY_VAR}"
|
|
require_var "${SECRET_KEY_VAR}"
|
|
|
|
mkdir -p "${APP_HOME}/data" "${LOG_DIR}" "$(dirname "${DB_PATH}")"
|
|
export PYTHONPATH="${APP_HOME}/app${PYTHONPATH:+:${PYTHONPATH}}"
|
|
|
|
LOG_FILE="${LOG_DIR}/upload_all_$(date +%Y%m%d_%H%M%S).log"
|
|
exec > >(tee -a "${LOG_FILE}") 2>&1
|
|
echo "[upload_all.sh] logging to ${LOG_FILE}"
|
|
|
|
REGISTER_ARGS=(
|
|
-m musicdl.catalogsync.cli register-object-backend
|
|
--db "${DB_PATH}"
|
|
--backend "${OBJECT_BACKEND_NAME}"
|
|
--bucket "${OBJECT_BUCKET}"
|
|
--endpoint "${OBJECT_ENDPOINT}"
|
|
--credential-env-prefix "${OBJECT_CREDENTIAL_ENV_PREFIX}"
|
|
)
|
|
|
|
if [[ -n "${OBJECT_REGION:-}" ]]; then
|
|
REGISTER_ARGS+=(--region "${OBJECT_REGION}")
|
|
fi
|
|
if [[ -n "${OBJECT_BASE_PREFIX:-}" ]]; then
|
|
REGISTER_ARGS+=(--base-prefix "${OBJECT_BASE_PREFIX}")
|
|
fi
|
|
if [[ -n "${OBJECT_ADDRESSING_STYLE:-}" ]]; then
|
|
REGISTER_ARGS+=(--addressing-style "${OBJECT_ADDRESSING_STYLE}")
|
|
fi
|
|
if [[ -n "${OBJECT_PUBLIC_BASE_URL:-}" ]]; then
|
|
REGISTER_ARGS+=(--public-base-url "${OBJECT_PUBLIC_BASE_URL}")
|
|
fi
|
|
|
|
"${PYTHON_BIN}" "${REGISTER_ARGS[@]}"
|
|
|
|
UPLOAD_ARGS=(
|
|
-m musicdl.catalogsync.cli upload
|
|
--db "${DB_PATH}"
|
|
--backend "${OBJECT_BACKEND_NAME}"
|
|
--workers "${UPLOAD_WORKERS:-4}"
|
|
)
|
|
|
|
if [[ -n "${UPLOAD_SOURCES:-}" ]]; then
|
|
UPLOAD_ARGS+=(--sources "${UPLOAD_SOURCES}")
|
|
fi
|
|
if [[ -n "${UPLOAD_PLAYLIST_IDS:-}" ]]; then
|
|
UPLOAD_ARGS+=(--playlist-ids "${UPLOAD_PLAYLIST_IDS}")
|
|
fi
|
|
if [[ -n "${UPLOAD_LIMIT:-}" ]]; then
|
|
UPLOAD_ARGS+=(--limit "${UPLOAD_LIMIT}")
|
|
fi
|
|
|
|
"${PYTHON_BIN}" "${UPLOAD_ARGS[@]}" "$@"
|