rd13_tile_server/scripts/planetiler-build-control.sh

118 lines
2.9 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
set -euo pipefail
# Control script for deterministic Planetiler disk usage.
# Modes:
# resume Keep sources + reuse DB, clean only work temp, then start build.
# fresh Keep sources, delete work+reuse+output, then start build.
# fresh-all Delete output+sources+work+reuse, then start build.
# clean-work Delete only work temp.
# clean-all Delete output+sources+work+reuse (no start).
# status Show disk usage and reuse readiness.
MODE="${1:-status}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
OUTPUT_DIR="${REPO_ROOT}/build/output"
SOURCES_DIR="${REPO_ROOT}/build/sources"
WORK_DIR="${REPO_ROOT}/build/tmp/work"
REUSE_DIR="${REPO_ROOT}/build/tmp/reuse"
FEATURE_DB_DIR="${REUSE_DIR}/feature.db"
STRINGS_FILE="${FEATURE_DB_DIR}/feature.db.strings"
MANIFEST_FILE="${FEATURE_DB_DIR}/feature.db.manifest"
ensure_dirs() {
mkdir -p "${OUTPUT_DIR}" "${SOURCES_DIR}" "${WORK_DIR}" "${REUSE_DIR}"
}
clear_dir() {
local dir="$1"
mkdir -p "${dir}"
rm -rf "${dir}"/*
}
stop_build_container() {
(cd "${REPO_ROOT}" && docker compose -f docker-compose.build.yml down)
}
start_build_container() {
(cd "${REPO_ROOT}" && docker compose -f docker-compose.build.yml up -d)
}
reuse_ready() {
[[ -d "${FEATURE_DB_DIR}" && -f "${STRINGS_FILE}" && -f "${MANIFEST_FILE}" ]]
}
print_status() {
echo "== Disk Status =="
(cd "${REPO_ROOT}" && df -h .)
echo "---"
du -sh "${REPO_ROOT}/build" "${OUTPUT_DIR}" "${SOURCES_DIR}" "${WORK_DIR}" "${REUSE_DIR}" 2>/dev/null || true
echo "---"
if reuse_ready; then
echo "Reuse DB: READY (${FEATURE_DB_DIR} + strings + manifest)"
else
echo "Reuse DB: NOT READY"
echo "Missing at least one of:"
echo " ${FEATURE_DB_DIR}"
echo " ${STRINGS_FILE}"
echo " ${MANIFEST_FILE}"
fi
}
case "${MODE}" in
resume)
stop_build_container
ensure_dirs
clear_dir "${WORK_DIR}"
print_status
start_build_container
;;
fresh)
stop_build_container
ensure_dirs
clear_dir "${WORK_DIR}"
clear_dir "${REUSE_DIR}"
clear_dir "${OUTPUT_DIR}"
print_status
start_build_container
;;
fresh-all)
stop_build_container
ensure_dirs
clear_dir "${WORK_DIR}"
clear_dir "${REUSE_DIR}"
clear_dir "${OUTPUT_DIR}"
clear_dir "${SOURCES_DIR}"
print_status
start_build_container
;;
clean-work)
stop_build_container
ensure_dirs
clear_dir "${WORK_DIR}"
print_status
;;
clean-all)
stop_build_container
ensure_dirs
clear_dir "${WORK_DIR}"
clear_dir "${REUSE_DIR}"
clear_dir "${OUTPUT_DIR}"
clear_dir "${SOURCES_DIR}"
print_status
;;
status)
ensure_dirs
print_status
;;
*)
echo "Unknown mode: ${MODE}"
echo "Usage: $0 [resume|fresh|fresh-all|clean-work|clean-all|status]"
exit 1
;;
esac
echo "Done: ${MODE}"