#!/usr/bin/env bash # Retention cleanup: read PV directly, no git-pages API. # Removes old commit-level report dirs based on branch existence + age rules. set -euo pipefail DATA_ROOT="${DATA_ROOT:-/app/data}" CONFIG="${RETENTION_CONFIG:-/etc/retention/retention.json}" GITEA_API_URL="${GITEA_API_URL:-}" GITEA_TOKEN="${GITEA_TOKEN:-}" [ -f "$CONFIG" ] || { echo "ERROR: config missing: $CONFIG" >&2; exit 1; } SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/retention-lib.sh" DELETED_COUNT=0 ERROR_COUNT=0 for owner_dir in "$DATA_ROOT"/*/; do [ -d "$owner_dir" ] || continue owner=$(basename "$owner_dir") for repo_dir in "$owner_dir"*/; do [ -d "$repo_dir" ] || continue repo=$(basename "$repo_dir") for branch_dir in "$repo_dir"*/; do [ -d "$branch_dir" ] || continue branch=$(basename "$branch_dir") echo "=== ${owner}/${repo}/${branch} ===" if ! branch_exists "$owner" "$repo" "$branch"; then echo " Branch does not exist in Gitea -> DELETE ALL" rm -rf "$branch_dir" DELETED_COUNT=$((DELETED_COUNT + 1)) continue fi rules=$(jq -r ".branches.\"$branch\" // .branches.default" "$CONFIG") keep_min=$(echo "$rules" | jq -r '.keepMin // 5') min_age=$(echo "$rules" | jq -r '.minAgeDays // 7') commits=$(ls -1t "$branch_dir" 2>/dev/null || true) count=0 for sha8 in $commits; do [ -d "$branch_dir/$sha8" ] || continue count=$((count + 1)) [ "$count" -le "$keep_min" ] && continue age=$(age_days_from_stat "$branch_dir/$sha8") [ "$age" -lt "$min_age" ] && continue echo " DELETE: ${owner}/${repo}/${branch}/${sha8} (age=${age}d, keepMin=${keep_min})" rm -rf "$branch_dir/$sha8" DELETED_COUNT=$((DELETED_COUNT + 1)) done done done done echo "" echo "=== Summary ===" echo " Deleted: ${DELETED_COUNT}" echo " Errors: ${ERROR_COUNT}"