Update .gitea/actions/cleanup/action.yml

This commit is contained in:
2025-11-23 15:46:01 +01:00
parent 2ea06a6fa8
commit 9645bad12e

View File

@@ -21,12 +21,24 @@ runs:
exit 1
fi
# Load skins array
readarray -t skins < <(jq -r '.[]' "$all_skins_file")
# Remove known static extras
[ -f how-to-use.md ] && rm -f -- how-to-use.md
[ -f src/replay.osr ] && rm -f -- src/replay.osr
[ -d src/default-skin ] && rm -rf -- src/default-skin
##############################################
# NORMALIZATION FIX — KEY TO SOLVING PROBLEM #
##############################################
normalize() {
printf "%s" "$1" | \
tr '[:upper:]' '[:lower:]' | \
sed 's/[][{}()<>|\/:*?"'"'"' ]/-/g' | \
tr -s '-' | sed 's/^-//; s/-$//'
}
sanitize_filename() {
echo "$1" | \
tr -d '\000-\037' | \
@@ -36,31 +48,47 @@ runs:
skins_raw=()
skins_clean=()
skins_norm=()
for s in "${skins[@]}"; do
skins_raw+=("$s")
skins_clean+=("$(sanitize_filename "$s")")
raw="$s"
clean="$(sanitize_filename "$s")"
norm="$(normalize "$s")"
skins_raw+=("$raw")
skins_clean+=("$clean")
skins_norm+=("$norm")
done
##################################################
# SAFE SKIN MATCHING → FIXES ALL FALSE DELETIONS #
##################################################
is_known_skin() {
local name="$1"
for i in "${!skins_raw[@]}"; do
if [[ "$name" == "${skins_raw[$i]}" ]] || [[ "$name" == "${skins_clean[$i]}" ]]; then
local norm="$(normalize "$name")"
for i in "${!skins_norm[@]}"; do
if [[ "$norm" == "${skins_norm[$i]}" ]]; then
return 0
fi
done
return 1
}
#############################################
# PRUNE HELPERS (unchanged except matching) #
#############################################
prune_dir() {
local root="$1"
local skin_raw="$2"
local expected="$3"
# Remove unexpected root-level files
for f in "$root"/*; do
[ -f "$f" ] || continue
basename_f="$(basename "$f")"
# Root-level files must exactly match one of the skins
if printf '%s\n' "${skins_raw[@]}" | grep -Fxq -- "$basename_f"; then
continue
fi
@@ -69,6 +97,7 @@ runs:
rm -f -- "$f"
done
# Now prune inside per-skin directories
local folder="$root/$skin_raw"
[ -d "$folder" ] || return
@@ -81,6 +110,9 @@ runs:
done
}
################################################
# DELETE DIRECTORIES THAT ARE NOT VALID SKINS #
################################################
for root in "$REPO_SCREENSHOT_DIR" "$REPO_RANKING_PANEL_DIR" "$REPO_MOD_ICONS_DIR" "$REPO_THUMBNAIL_DIR" "$OSK_PATH" "$DOC_DIR"; do
[ -d "$root" ] || continue
for dir in "$root"/*; do
@@ -88,16 +120,20 @@ runs:
name="$(basename "$dir")"
if ! is_known_skin "$name"; then
echo " → Skin '$name' deletedremoving directory $dir"
echo " → Skin '$name' deletedremoving directory $dir"
rm -rf -- "$dir" || true
fi
done
done
################################################
# FILE PRUNING FOR EACH VALID SKIN #
################################################
for idx in "${!skins_raw[@]}"; do
skin="${skins_raw[$idx]}"
header="${skins_clean[$idx]}"
# Try reading Name from skin.ini
ini=$(find "$DANSER_SKINS_DIR/$skin" -maxdepth 1 -type f -iname "skin.ini" -print -quit || true)
if [[ -f "$ini" ]]; then
raw=$(grep -i '^[[:space:]]*Name:' "$ini" | head -n1 || true)