#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" usage() { cat <<'EOF' Usage: scripts/clean [options] Removes local build artifacts that commonly cause disk pressure and flaky Docker builds. Options: --tmp Remove .tmp (default) --target Remove target (default) --docker Prune Docker builder cache (docker builder prune -f) --docker-system Prune Docker system objects (requires --dangerous) --volumes With --docker-system, also prune volumes --dangerous Required for --docker-system (destructive) --all Equivalent to --tmp --target --docker -h, --help Show this help EOF } DO_TMP=0 DO_TARGET=0 DO_DOCKER=0 DO_DOCKER_SYSTEM=0 DO_VOLUMES=0 DANGEROUS=0 if [ "$#" -eq 0 ]; then DO_TMP=1 DO_TARGET=1 fi while [ "$#" -gt 0 ]; do case "$1" in --tmp) DO_TMP=1; shift ;; --target) DO_TARGET=1; shift ;; --docker) DO_DOCKER=1; shift ;; --docker-system) DO_DOCKER_SYSTEM=1; shift ;; --volumes) DO_VOLUMES=1; shift ;; --dangerous) DANGEROUS=1; shift ;; --all) DO_TMP=1; DO_TARGET=1; DO_DOCKER=1; shift ;; -h|--help) usage; exit 0 ;; *) echo "Unknown argument: $1" >&2; usage; exit 2 ;; esac done echo "Workspace: ${ROOT_DIR}" if [ "${DO_TMP}" -eq 1 ]; then echo "==> Removing ${ROOT_DIR}/.tmp" rm -rf "${ROOT_DIR}/.tmp" fi if [ "${DO_TARGET}" -eq 1 ]; then echo "==> Removing ${ROOT_DIR}/target" rm -rf "${ROOT_DIR}/target" fi if [ "${DO_DOCKER}" -eq 1 ]; then if command -v docker >/dev/null 2>&1; then echo "==> Pruning Docker builder cache" docker builder prune -f >/dev/null echo "==> Docker builder cache pruned" else echo "WARN: docker not found; skipping Docker prune" >&2 fi fi if [ "${DO_DOCKER_SYSTEM}" -eq 1 ]; then if [ "${DANGEROUS}" -ne 1 ]; then echo "ERROR: --docker-system requires --dangerous" >&2 exit 2 fi if command -v docker >/dev/null 2>&1; then echo "==> Pruning Docker system objects" if [ "${DO_VOLUMES}" -eq 1 ]; then docker system prune -af --volumes >/dev/null else docker system prune -af >/dev/null fi echo "==> Docker system prune complete" else echo "WARN: docker not found; skipping Docker system prune" >&2 fi fi echo "Done."