From 4a8c2fb2cf754c523736317e6592f9b72fdde91d Mon Sep 17 00:00:00 2001 From: Arlind Date: Sat, 22 Nov 2025 22:51:37 +0100 Subject: [PATCH] Update .gitea/actions/discover-skins/action.yml --- .gitea/actions/discover-skins/action.yml | 88 +++++------------------- 1 file changed, 17 insertions(+), 71 deletions(-) diff --git a/.gitea/actions/discover-skins/action.yml b/.gitea/actions/discover-skins/action.yml index a4179c1..5c66fc2 100644 --- a/.gitea/actions/discover-skins/action.yml +++ b/.gitea/actions/discover-skins/action.yml @@ -33,33 +33,23 @@ runs: - name: Fetch tags manually shell: bash run: | - echo "Manually fetching tags from Gitea…" git fetch origin --tags --force --prune - echo "Tags after fetch:" git tag -l - name: Discover all skins id: discover_all shell: bash run: | - echo "Discovering all skins in $SKINS_DIR…" - - # Find all skins and create JSON, write to shared file all_skins_file="/tmp/all_skins_shared.json" find "$SKINS_DIR" -mindepth 1 -maxdepth 1 -type d -print0 \ - | while IFS= read -r -d '' dir; do - basename "$dir" - done \ + | while IFS= read -r -d '' dir; do basename "$dir"; done \ | jq -R . | jq -cs . > "$all_skins_file" - json=$(cat "$all_skins_file") - { echo "all_skins<> "$GITHUB_OUTPUT" - echo "all_skins_file=$all_skins_file" >> "$GITHUB_OUTPUT" - name: Detect Changed Skin Directories @@ -67,9 +57,7 @@ runs: shell: bash run: | set -e - echo "[Detect Changed Skin Directories Started]" - # Read from shared file instead of using GitHub Actions output all_skins_file="/tmp/all_skins_shared.json" temp_all_skins="/tmp/all_skins_raw_$RANDOM.txt" jq -r '.[]' "$all_skins_file" > "$temp_all_skins" @@ -81,89 +69,50 @@ runs: skins=() deleted_skins=() - echo "→ Force rebuild flag: $force_rebuild" - echo "→ Target skins input: $target_skins" - if [[ "$force_rebuild" == "true" ]]; then - echo "→ Force rebuild is enabled. Using ALL_SKINS_DIR for full list…" skins=("${all_skins[@]}") - echo " ✓ Found ${#skins[@]} skin directories (from ALL_SKINS_DIR)" - elif [[ -n "$target_skins" ]]; then - echo "→ Target skins specified. Using target_skins input…" - # Use a temporary file to safely handle special characters + elif [[ -n "$target_skins" && "$target_skins" != "" ]]; then temp_target_file="/tmp/target_skins_$RANDOM.json" printf '%s' "$target_skins" > "$temp_target_file" - temp_target_raw="/tmp/target_skins_raw_$RANDOM.txt" - jq -r '.[]' "$temp_target_file" > "$temp_target_raw" - mapfile -t skins < "$temp_target_raw" - rm -f "$temp_target_file" "$temp_target_raw" - echo " ✓ Found ${#skins[@]} skin(s) from target_skins input" + mapfile -t skins < <(jq -r '.[]' "$temp_target_file") + rm -f "$temp_target_file" else - echo "→ No rebuild flags set. Finding latest git tag..." - git tag --sort=-creatordate | head -n 1 > /tmp/latest_tag_$RANDOM.txt || true - latest_tag="" - if [ -s /tmp/latest_tag_$RANDOM.txt ]; then - latest_tag="$(cat /tmp/latest_tag_$RANDOM.txt)" - rm -f /tmp/latest_tag_$RANDOM.txt - fi + latest_tag=$(git tag --sort=-version:refname | head -n 1) if [[ -n "$latest_tag" ]]; then - echo "→ Latest tag found: $latest_tag" - echo "→ Finding added/modified skins since $latest_tag…" + mapfile -t skins < <( + git diff --name-only -z --diff-filter=AM "$latest_tag" HEAD \ + | while IFS= read -r -d '' file; do + [[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1 + done | sort -u + ) - temp_skins_am="/tmp/skins_am_$RANDOM.txt" - git diff --name-only -z --diff-filter=AM "$latest_tag" HEAD \ - | while IFS= read -r -d '' file; do - [[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1 - done | sort -u > "$temp_skins_am" - mapfile -t skins < "$temp_skins_am" - rm -f "$temp_skins_am" - echo " ✓ Found ${#skins[@]} added/modified skins" - - echo "→ Finding deleted skins since $latest_tag…" - temp_skins_del="/tmp/skins_del_$RANDOM.txt" - git diff --name-only -z --diff-filter=D "$latest_tag" HEAD \ - | while IFS= read -r -d '' file; do - [[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1 - done | sort -u > "$temp_skins_del" - mapfile -t deleted_skins < "$temp_skins_del" - rm -f "$temp_skins_del" - if [ "${#deleted_skins[@]}" -gt 0 ]; then - for d in "${deleted_skins[@]}"; do - echo "→ Skin '$d' was deleted" - done - else - echo " ✓ No skins deleted" - fi + mapfile -t deleted_skins < <( + git diff --name-only -z --diff-filter=D "$latest_tag" HEAD \ + | while IFS= read -r -d '' file; do + [[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1 + done | sort -u + ) else - echo "→ No tag found. Falling back to ALL_SKINS_DIR for full list…" skins=("${all_skins[@]}") - echo " ✓ Found ${#skins[@]} skin directories (from ALL_SKINS_DIR)" fi fi - echo "" - echo "[Cleaning Skin Names]" uniq_skins=() for skin in "${skins[@]}"; do skin="${skin#"${skin%%[![:space:]]*}"}" skin="${skin%"${skin##*[![:space:]]}"}" [[ -n "$skin" ]] && uniq_skins+=("$skin") done - echo " ✓ ${#uniq_skins[@]} valid skin names after cleaning" - echo "" - echo "[Writing Changed Skins to File]" changed_skins_file="/tmp/changed_skins_$RANDOM.txt" if [ "${#uniq_skins[@]}" -eq 0 ]; then - echo "→ No added/modified skins detected." echo "[]" > "$changed_skins_file" else printf '%s\n' "${uniq_skins[@]}" | jq -R . | jq -cs . > "$changed_skins_file" - echo " ✓ Skins written to $changed_skins_file (JSON array)" fi { @@ -171,6 +120,3 @@ runs: echo "$changed_skins_file" echo "EOF" } >> "$GITHUB_OUTPUT" - - echo "" - echo "[Detect Changed Skin Directories Complete — ${#uniq_skins[@]} skins processed, ${#deleted_skins[@]} skins deleted]"