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 readarray -t skins < <(jq -r '.[]' "$all_skins_file") [ -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 sanitize_filename() { echo "$1" | \ tr -d '\000-\037' | \ sed -e 's#[][\/:*?"<>|]#-#g' | \ sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' } skins_raw=() skins_clean=() for s in "${skins[@]}"; do skins_raw+=("$s") skins_clean+=("$(sanitize_filename "$s")") done is_known_skin() { local name="$1" for i in "${!skins_raw[@]}"; do if [[ "$name" == "${skins_raw[$i]}" ]] || [[ "$name" == "${skins_clean[$i]}" ]]; then return 0 fi done return 1 } prune_dir() { local root="$1" local skin_raw="$2" local expected="$3" for f in "$root"/*; do [ -f "$f" ] || continue basename_f="$(basename "$f")" if printf '%s\n' "${skins_raw[@]}" | grep -Fxq -- "$basename_f"; then continue fi echo " → Removing unexpected root file: $f" rm -f -- "$f" done 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 } 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 directory $dir" rm -rf -- "$dir" || true fi done done for idx in "${!skins_raw[@]}"; do skin="${skins_raw[$idx]}" header="${skins_clean[$idx]}" 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) raw="${raw#*:}" raw="$(echo "$raw" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//')" tmp="$(sanitize_filename "$raw")" [[ -n "$tmp" ]] && header="$tmp" fi 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]"