146 lines
5.0 KiB
YAML
146 lines
5.0 KiB
YAML
name: "Cleanup Extra Files"
|
|
description: "Remove leftover or outdated assets from repository"
|
|
|
|
inputs:
|
|
all_skins:
|
|
description: "JSON array of all skins"
|
|
required: true
|
|
|
|
runs:
|
|
using: "composite"
|
|
steps:
|
|
- name: Cleanup Extra Files
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
echo "[Cleanup Extra Files Started]"
|
|
|
|
all_skins_file="/tmp/all_skins_shared.json"
|
|
if [ ! -f "$all_skins_file" ]; then
|
|
echo "Error: $all_skins_file not found"
|
|
exit 1
|
|
fi
|
|
|
|
# Load all skins from JSON
|
|
readarray -t skins < <(jq -r '.[]' "$all_skins_file")
|
|
|
|
# Remove known stray files
|
|
[ -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
|
|
|
|
############################################################
|
|
# 1. Normalization for matching (lenient, consistent)
|
|
############################################################
|
|
normalize() {
|
|
printf "%s" "$1" | \
|
|
tr '[:upper:]' '[:lower:]' | \
|
|
sed 's/[][{}()<>|\/:*?"'"'"' ]/-/g' | \
|
|
tr -s '-' | sed 's/^-//; s/-$//'
|
|
}
|
|
|
|
skins_raw=()
|
|
skins_norm=()
|
|
|
|
for s in "${skins[@]}"; do
|
|
skins_raw+=("$s")
|
|
skins_norm+=("$(normalize "$s")")
|
|
done
|
|
|
|
############################################################
|
|
# 2. Matching logic — FIXED (no false deletions)
|
|
############################################################
|
|
is_known_skin() {
|
|
local name="$1"
|
|
local norm="$(normalize "$name")"
|
|
|
|
for i in "${!skins_norm[@]}"; do
|
|
[[ "$norm" == "${skins_norm[$i]}" ]] && return 0
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
############################################################
|
|
# 3. Pruning helper (unchanged except matching logic)
|
|
############################################################
|
|
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 filename must be exactly one of the skins
|
|
if printf '%s\n' "${skins_raw[@]}" | grep -Fxq -- "$basename_f"; then
|
|
continue
|
|
fi
|
|
|
|
echo " → Removing unexpected root file: $f"
|
|
rm -f -- "$f"
|
|
done
|
|
|
|
# Now prune inside each skin directory
|
|
local folder="$root/$skin_raw"
|
|
[ -d "$folder" ] || return
|
|
|
|
for f in "$folder"/*; do
|
|
[ -e "$f" ] || continue
|
|
if [[ "$(basename "$f")" != "$expected" ]]; then
|
|
echo " → Removing unexpected file: $f"
|
|
rm -f -- "$f"
|
|
fi
|
|
done
|
|
}
|
|
|
|
############################################################
|
|
# 4. Remove directories for skins that do not exist anymore
|
|
############################################################
|
|
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
|
|
[ -d "$dir" ] || continue
|
|
name="$(basename "$dir")"
|
|
|
|
if ! is_known_skin "$name"; then
|
|
echo " → Skin '$name' deleted — removing $dir"
|
|
rm -rf -- "$dir" || true
|
|
fi
|
|
done
|
|
done
|
|
|
|
############################################################
|
|
# 5. Expected filenames must use RAW names — FIXED
|
|
############################################################
|
|
for idx in "${!skins_raw[@]}"; do
|
|
skin="${skins_raw[$idx]}"
|
|
|
|
# Expected base filename = RAW name (FIX)
|
|
header="$skin"
|
|
|
|
# Override using skin.ini if available
|
|
ini=$(find "$DANSER_SKINS_DIR/$skin" -maxdepth 1 -type f -iname "skin.ini" -print -quit || true)
|
|
if [[ -f "$ini" ]]; then
|
|
ini_raw=$(grep -i '^[[:space:]]*Name:' "$ini" | head -n1 || true)
|
|
ini_raw="${ini_raw#*:}"
|
|
ini_raw="$(echo "$ini_raw" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//')"
|
|
|
|
# If INI name is not empty, use it directly as the filename
|
|
[[ -n "$ini_raw" ]] && header="$ini_raw"
|
|
fi
|
|
|
|
# Prune directories using expected filenames
|
|
prune_dir "$REPO_SCREENSHOT_DIR" "$skin" "$header.mp4"
|
|
prune_dir "$REPO_RANKING_PANEL_DIR" "$skin" "$header.webp"
|
|
prune_dir "$REPO_MOD_ICONS_DIR" "$skin" "$header.webp"
|
|
prune_dir "$REPO_THUMBNAIL_DIR" "$skin" "$header.webp"
|
|
prune_dir "$OSK_PATH" "$skin" "$header.osk"
|
|
prune_dir "$DOC_DIR" "$skin" "$header.md"
|
|
done
|
|
|
|
echo "[Cleanup Extra Files Complete]"
|