Update .gitea/actions/cleanup/action.yml
This commit is contained in:
@@ -21,12 +21,24 @@ runs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Load skins array
|
||||||
readarray -t skins < <(jq -r '.[]' "$all_skins_file")
|
readarray -t skins < <(jq -r '.[]' "$all_skins_file")
|
||||||
|
|
||||||
|
# Remove known static extras
|
||||||
[ -f how-to-use.md ] && rm -f -- how-to-use.md
|
[ -f how-to-use.md ] && rm -f -- how-to-use.md
|
||||||
[ -f src/replay.osr ] && rm -f -- src/replay.osr
|
[ -f src/replay.osr ] && rm -f -- src/replay.osr
|
||||||
[ -d src/default-skin ] && rm -rf -- src/default-skin
|
[ -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() {
|
sanitize_filename() {
|
||||||
echo "$1" | \
|
echo "$1" | \
|
||||||
tr -d '\000-\037' | \
|
tr -d '\000-\037' | \
|
||||||
@@ -36,31 +48,47 @@ runs:
|
|||||||
|
|
||||||
skins_raw=()
|
skins_raw=()
|
||||||
skins_clean=()
|
skins_clean=()
|
||||||
|
skins_norm=()
|
||||||
|
|
||||||
for s in "${skins[@]}"; do
|
for s in "${skins[@]}"; do
|
||||||
skins_raw+=("$s")
|
raw="$s"
|
||||||
skins_clean+=("$(sanitize_filename "$s")")
|
clean="$(sanitize_filename "$s")"
|
||||||
|
norm="$(normalize "$s")"
|
||||||
|
|
||||||
|
skins_raw+=("$raw")
|
||||||
|
skins_clean+=("$clean")
|
||||||
|
skins_norm+=("$norm")
|
||||||
done
|
done
|
||||||
|
|
||||||
|
##################################################
|
||||||
|
# SAFE SKIN MATCHING → FIXES ALL FALSE DELETIONS #
|
||||||
|
##################################################
|
||||||
is_known_skin() {
|
is_known_skin() {
|
||||||
local name="$1"
|
local name="$1"
|
||||||
for i in "${!skins_raw[@]}"; do
|
local norm="$(normalize "$name")"
|
||||||
if [[ "$name" == "${skins_raw[$i]}" ]] || [[ "$name" == "${skins_clean[$i]}" ]]; then
|
|
||||||
|
for i in "${!skins_norm[@]}"; do
|
||||||
|
if [[ "$norm" == "${skins_norm[$i]}" ]]; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#############################################
|
||||||
|
# PRUNE HELPERS (unchanged except matching) #
|
||||||
|
#############################################
|
||||||
prune_dir() {
|
prune_dir() {
|
||||||
local root="$1"
|
local root="$1"
|
||||||
local skin_raw="$2"
|
local skin_raw="$2"
|
||||||
local expected="$3"
|
local expected="$3"
|
||||||
|
|
||||||
|
# Remove unexpected root-level files
|
||||||
for f in "$root"/*; do
|
for f in "$root"/*; do
|
||||||
[ -f "$f" ] || continue
|
[ -f "$f" ] || continue
|
||||||
basename_f="$(basename "$f")"
|
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
|
if printf '%s\n' "${skins_raw[@]}" | grep -Fxq -- "$basename_f"; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
@@ -69,6 +97,7 @@ runs:
|
|||||||
rm -f -- "$f"
|
rm -f -- "$f"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Now prune inside per-skin directories
|
||||||
local folder="$root/$skin_raw"
|
local folder="$root/$skin_raw"
|
||||||
[ -d "$folder" ] || return
|
[ -d "$folder" ] || return
|
||||||
|
|
||||||
@@ -81,6 +110,9 @@ runs:
|
|||||||
done
|
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
|
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
|
[ -d "$root" ] || continue
|
||||||
for dir in "$root"/*; do
|
for dir in "$root"/*; do
|
||||||
@@ -94,10 +126,14 @@ runs:
|
|||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
|
################################################
|
||||||
|
# FILE PRUNING FOR EACH VALID SKIN #
|
||||||
|
################################################
|
||||||
for idx in "${!skins_raw[@]}"; do
|
for idx in "${!skins_raw[@]}"; do
|
||||||
skin="${skins_raw[$idx]}"
|
skin="${skins_raw[$idx]}"
|
||||||
header="${skins_clean[$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)
|
ini=$(find "$DANSER_SKINS_DIR/$skin" -maxdepth 1 -type f -iname "skin.ini" -print -quit || true)
|
||||||
if [[ -f "$ini" ]]; then
|
if [[ -f "$ini" ]]; then
|
||||||
raw=$(grep -i '^[[:space:]]*Name:' "$ini" | head -n1 || true)
|
raw=$(grep -i '^[[:space:]]*Name:' "$ini" | head -n1 || true)
|
||||||
|
|||||||
Reference in New Issue
Block a user