#!/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}"