118 lines
2.9 KiB
Bash
118 lines
2.9 KiB
Bash
|
|
#!/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}"
|