From 834955d09d9229e8c6ec65d93be2f438888a57c3 Mon Sep 17 00:00:00 2001 From: Arlind Date: Mon, 16 Jun 2025 10:48:47 +0200 Subject: [PATCH] Update .gitea/workflows/ci.yml --- .gitea/workflows/ci.yml | 136 ++++++++++------------------------------ 1 file changed, 33 insertions(+), 103 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 4bcc705..783611a 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -241,79 +241,6 @@ jobs: mv "$SKINS_DIR"/* "$DANSER_SKINS_DIR" echo "Skin files moved." - - - name: Check for Duplicate skin.ini Names - shell: bash - run: | - set -euo pipefail - - echo "[Duplicate Skin Name Check Started]" - - # Guard: ensure DANSER_SKINS_DIR is set and exists - if [ -z "${DANSER_SKINS_DIR:-}" ] || [ ! -d "${DANSER_SKINS_DIR}" ]; then - echo "DANSER_SKINS_DIR is not set or not a directory. Exiting." - exit 1 - fi - - sanitize_filename() { - local filename="$1" - echo "$filename" \ - | sed -e 's#[\\/:\*\?"<>|]#-#g' -e 's#%#_#g' \ - | tr -s ' ' \ - | sed 's/^ *//;s/ *$//' - } - - declare -A name_counts=() - declare -A name_dirs=() - duplicates=() - - shopt -s nullglob - for dir in "${DANSER_SKINS_DIR}"/*; do - [ -d "$dir" ] || continue - - dir_base=$(basename "$dir" | tr -d $'\r\n') - name="$dir_base" - - ini=$(find "$dir" -maxdepth 1 -iname "skin.ini" | head -n1 || true) - if [ -f "$ini" ]; then - line=$(grep -i '^[[:space:]]*Name:' "$ini" | head -n1 || true) - if [ -n "${line:-}" ]; then - val="${line#*:}" - val=$(echo "$val" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') - name=$(sanitize_filename "$val") - fi - fi - - name_counts["$name"]=$(( ${name_counts["$name"]:-0} + 1 )) - if [ -z "${name_dirs[$name]:-}" ]; then - name_dirs["$name"]="$dir_base" - else - name_dirs["$name"]+=",${dir_base}" - fi - done - shopt -u nullglob - - for nm in "${!name_counts[@]}"; do - if [ "${name_counts[$nm]}" -gt 1 ]; then - duplicates+=("$nm") - fi - done - - if [ "${#duplicates[@]}" -gt 0 ]; then - echo "⚠️ Duplicate skin.ini Names found:" - for nm in "${duplicates[@]}"; do - IFS=',' read -r -a dirs <<< "${name_dirs[$nm]}" - echo " • $nm (${name_counts[$nm]} skins):" - for d in "${dirs[@]}"; do - echo " - $d" - done - done - else - echo "✓ No duplicate skin.ini Names detected." - fi - - echo "[Duplicate Skin Name Check Completed]" - - name: Generate Danser videos and screenshots shell: bash run: | @@ -403,10 +330,10 @@ jobs: INDEX=1 sanitize_filename() { - echo "$1" \ - | sed -e 's#[\\/:\*\?"<>|]#-#g' -e 's#%#_#g' \ - | tr -s ' ' \ - | sed 's/^ *//;s/ *$//' + echo "$1" | \ + tr -d '\000-\037' | \ + sed -e 's#[\\/:\*\?"<>|]#-#g' | \ + sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' } for skin_path in "${skins[@]}"; do @@ -467,10 +394,10 @@ jobs: [ "${#skin_dirs[@]}" -eq 0 ] && { echo "No skins to process. Exiting."; exit 0; } sanitize_filename() { - echo "$1" \ - | sed -e 's#[\\/:\*\?"<>|]#-#g' -e 's#%#_#g' \ - | tr -s ' ' \ - | sed 's/^ *//;s/ *$//' + echo "$1" | \ + tr -d '\000-\037' | \ + sed -e 's#[\\/:\*\?"<>|]#-#g' | \ + sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' } ICONS_JSON_FILE="${{ github.workspace }}/.gitea/workflows/icons.json" @@ -558,10 +485,10 @@ jobs: [ "${#skin_dirs[@]}" -eq 0 ] && { echo "No skins to process. Exiting."; exit 0; } sanitize_filename() { - echo "$1" \ - | sed -e 's#[\\/:\*\?"<>|]#-#g' -e 's#%#_#g' \ - | tr -s ' ' \ - | sed 's/^ *//;s/ *$//' + echo "$1" | \ + tr -d '\000-\037' | \ + sed -e 's#[\\/:\*\?"<>|]#-#g' | \ + sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' } FIXED_TIMESTAMP="2025-01-01 00:00:00" @@ -612,7 +539,7 @@ jobs: echo "$1" | \ tr -d '\000-\037' | \ sed -e 's#[\\/:\*\?"<>|]#-#g' | \ - sed 's/^[[:space:]]*//;s/[[:space:]]*$//' + sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' } url_encode_path() { @@ -764,13 +691,11 @@ jobs: set -euo pipefail echo "[Migration of flat assets started]" - # helper to sanitize header sanitize() { - echo "$1" \ - | tr -d '\r\n' \ - | sed -e 's#[\\/:\*\?"<>|]#-#g' -e 's#%#_#g' \ - | tr -s ' ' \ - | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' + echo "$1" | \ + tr -d '\000-\037' | \ + sed -e 's#[\\/:\*\?"<>|]#-#g' | \ + sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' } readarray -t skins <<< "$ALL_SKINS_DIR" @@ -782,6 +707,12 @@ jobs: raw=$(grep -i '^[[:space:]]*Name:' "$ini" | head -n1 || true) raw="${raw#*:}" header=$(sanitize "$raw") + if [[ -z "$header" ]]; then + header=$(sanitize "$skin") + fi + echo "DEBUG: raw='$raw' sanitized='$header' for skin='$skin'" + else + echo "DEBUG: no skin.ini found, using fallback: sanitized='$header' for skin='$skin'" fi [[ -n "$header" ]] && hdr2fld["$header"]="$skin" done @@ -825,20 +756,16 @@ jobs: set -euo pipefail echo "[Cleanup Extra Files Started]" - # Remove legacy docs [ -d src/docs ] && rm -rf src/docs [ -f how-to-use.md ] && rm -f how-to-use.md - # Read the current list of skins readarray -t skins <<< "$ALL_SKINS_DIR" - # Helper to sanitize header (for pruning inside) - sanitize() { - echo "$1" \ - | tr -d '\r\n' \ - | sed -e 's#[\\/:\*\?"<>|]#-#g' -e 's#%#_#g' \ - | tr -s ' ' \ - | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' + sanitize_filename() { + echo "$1" | \ + tr -d '\000-\037' | \ + sed -e 's#[\\/:\*\?"<>|]#-#g' | \ + sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' } for root in "$REPO_SCREENSHOT_DIR" "$REPO_RANKING_PANEL_DIR" "$REPO_MOD_ICONS_DIR" "$OSK_PATH"; do @@ -853,12 +780,15 @@ jobs: done for skin in "${skins[@]}"; do - header=$(sanitize "$skin") + header=$(sanitize_filename "$skin") 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#*:}" - header=$(sanitize "$raw") + tmp_header=$(sanitize_filename "$raw") + if [[ -n "$tmp_header" ]]; then + header="$tmp_header" + fi fi expect_gif="$header.gif"