Update .gitea/actions/discover-skins/action.yml

This commit is contained in:
Arlind
2025-10-09 17:15:36 +02:00
parent b10f1fe7d6
commit b1859fde81

View File

@@ -1,141 +1,143 @@
name: "Discover and Detect Skins" name: "Discover and Detect Skins"
description: "Find all skins and detect which ones changed since last tag or based on inputs" description: "Find all skins and detect which ones changed since last tag or based on inputs"
inputs: inputs:
force_rebuild: force_rebuild:
description: "Force rebuild all skins" description: "Force rebuild all skins"
required: false required: false
default: "false" default: "false"
target_skins: target_skins:
description: "Comma-separated list of skins to rebuild" description: "Comma-separated list of skins to rebuild"
required: false required: false
default: "" default: ""
outputs: outputs:
changed_skins_file: changed_skins_file:
description: "Path to file containing changed skins" description: "Path to file containing changed skins"
value: ${{ steps.detect.outputs.changed_skins_file }} value: ${{ steps.detect.outputs.changed_skins_file }}
all_skins: all_skins:
description: "All discovered skins (JSON array)" description: "All discovered skins (JSON array)"
value: ${{ steps.discover_all.outputs.all_skins }} value: ${{ steps.discover_all.outputs.all_skins }}
runs: runs:
using: "composite" using: "composite"
steps: steps:
- name: Discover all skins - name: Discover all skins
id: discover_all id: discover_all
shell: bash shell: bash
run: | run: |
echo "Discovering all skins in $SKINS_DIR…" echo "Discovering all skins in $SKINS_DIR…"
mapfile -t skins < <( mapfile -t skins < <(
find "$SKINS_DIR" -mindepth 1 -maxdepth 1 -type d \ find "$SKINS_DIR" -mindepth 1 -maxdepth 1 -type d \
| sed 's|'"$SKINS_DIR"'/||' | sed 's|'"$SKINS_DIR"'/||'
) )
json=$(printf '%s\n' "${skins[@]}" | jq -R . | jq -cs .) json=$(printf '%s\n' "${skins[@]}" | jq -R . | jq -cs .)
{ {
echo "all_skins<<EOF" echo "all_skins<<EOF"
echo "$json" echo "$json"
echo "EOF" echo "EOF"
} >> "$GITHUB_OUTPUT" } >> "$GITHUB_OUTPUT"
- name: Detect Changed Skin Directories - name: Detect Changed Skin Directories
id: detect id: detect
shell: bash shell: bash
run: | run: |
echo "[Detect Changed Skin Directories Started]" echo "[Detect Changed Skin Directories Started]"
# Parse JSON back into Bash array # Parse JSON back into Bash array
readarray -t all_skins < <(echo '${{ steps.discover_all.outputs.all_skins }}' | jq -r '.[]') echo '${{ steps.discover_all.outputs.all_skins }}' | jq -r '.[]' | while IFS= read -r skin; do
all_skins+=("$skin")
force_rebuild="${{ inputs.force_rebuild }}" done
target_skins="${{ inputs.target_skins }}"
skins=() force_rebuild="${{ inputs.force_rebuild }}"
deleted_skins=() target_skins="${{ inputs.target_skins }}"
skins=()
echo "→ Force rebuild flag: $force_rebuild" deleted_skins=()
echo "→ Target skins input: $target_skins"
echo "→ Force rebuild flag: $force_rebuild"
if [[ "$force_rebuild" == "true" ]]; then echo "→ Target skins input: $target_skins"
echo "→ Force rebuild is enabled. Using ALL_SKINS_DIR for full list…"
skins=("${all_skins[@]}") if [[ "$force_rebuild" == "true" ]]; then
echo " ✓ Found ${#skins[@]} skin directories (from ALL_SKINS_DIR)" echo "→ Force rebuild is enabled. Using ALL_SKINS_DIR for full list…"
skins=("${all_skins[@]}")
elif [[ -n "$target_skins" ]]; then echo " ✓ Found ${#skins[@]} skin directories (from ALL_SKINS_DIR)"
echo "→ Target skins specified. Using target_skins input…"
IFS=',' read -r -a input_skins <<< "$target_skins" elif [[ -n "$target_skins" ]]; then
for s in "${input_skins[@]}"; do echo "→ Target skins specified. Using target_skins input…"
s="${s#"${s%%[![:space:]]*}"}" IFS=',' read -r -a input_skins <<< "$target_skins"
s="${s%"${s##*[![:space:]]}"}" for s in "${input_skins[@]}"; do
[[ -n "$s" ]] && skins+=("$s") s="${s#"${s%%[![:space:]]*}"}"
done s="${s%"${s##*[![:space:]]}"}"
echo " ✓ Found ${#skins[@]} skin(s) from target_skins input" [[ -n "$s" ]] && skins+=("$s")
done
else echo " ✓ Found ${#skins[@]} skin(s) from target_skins input"
echo "→ No rebuild flags set. Finding latest git tag..."
latest_tag=$(git tag --sort=-creatordate | head -n 1 || true) else
echo "→ No rebuild flags set. Finding latest git tag..."
if [[ -n "$latest_tag" ]]; then latest_tag=$(git tag --sort=-creatordate | head -n 1 || true)
echo "→ Latest tag found: $latest_tag"
echo "→ Finding added/modified skins since $latest_tag" if [[ -n "$latest_tag" ]]; then
echo "→ Latest tag found: $latest_tag"
mapfile -t skins < <( echo "→ Finding added/modified skins since $latest_tag…"
git diff --name-only -z --diff-filter=AM "$latest_tag" HEAD \
| while IFS= read -r -d '' file; do mapfile -t skins < <(
[[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1 git diff --name-only -z --diff-filter=AM "$latest_tag" HEAD \
done | sort -u | while IFS= read -r -d '' file; do
) [[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1
echo " ✓ Found ${#skins[@]} added/modified skins" done | sort -u
)
echo "→ Finding deleted skins since $latest_tag…" echo " ✓ Found ${#skins[@]} added/modified skins"
mapfile -t deleted_skins < <(
git diff --name-only -z --diff-filter=D "$latest_tag" HEAD \ echo "→ Finding deleted skins since $latest_tag"
| while IFS= read -r -d '' file; do mapfile -t deleted_skins < <(
[[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1 git diff --name-only -z --diff-filter=D "$latest_tag" HEAD \
done | sort -u | while IFS= read -r -d '' file; do
) [[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1
if [ "${#deleted_skins[@]}" -gt 0 ]; then done | sort -u
for d in "${deleted_skins[@]}"; do )
echo "→ Skin '$d' was deleted" if [ "${#deleted_skins[@]}" -gt 0 ]; then
done for d in "${deleted_skins[@]}"; do
else echo "→ Skin '$d' was deleted"
echo " ✓ No skins deleted" done
fi else
else echo " ✓ No skins deleted"
echo "→ No tag found. Falling back to ALL_SKINS_DIR for full list…" fi
skins=("${all_skins[@]}") else
echo " ✓ Found ${#skins[@]} skin directories (from ALL_SKINS_DIR)" echo "→ No tag found. Falling back to ALL_SKINS_DIR for full list…"
fi skins=("${all_skins[@]}")
fi echo " ✓ Found ${#skins[@]} skin directories (from ALL_SKINS_DIR)"
fi
echo "" fi
echo "[Cleaning Skin Names]"
uniq_skins=() echo ""
for skin in "${skins[@]}"; do echo "[Cleaning Skin Names]"
skin="${skin#"${skin%%[![:space:]]*}"}" uniq_skins=()
skin="${skin%"${skin##*[![:space:]]}"}" for skin in "${skins[@]}"; do
[[ -n "$skin" ]] && uniq_skins+=("$skin") skin="${skin#"${skin%%[![:space:]]*}"}"
done skin="${skin%"${skin##*[![:space:]]}"}"
echo " ✓ ${#uniq_skins[@]} valid skin names after cleaning" [[ -n "$skin" ]] && uniq_skins+=("$skin")
done
echo "" echo " ✓ ${#uniq_skins[@]} valid skin names after cleaning"
echo "[Writing Changed Skins to File]"
changed_skins_file=$(mktemp) echo ""
echo "[Writing Changed Skins to File]"
if [ "${#uniq_skins[@]}" -eq 0 ]; then changed_skins_file=$(mktemp)
echo "→ No added/modified skins detected."
echo "[]" > "$changed_skins_file" if [ "${#uniq_skins[@]}" -eq 0 ]; then
else echo "→ No added/modified skins detected."
printf '%s\n' "${uniq_skins[@]}" | jq -R . | jq -cs . > "$changed_skins_file" echo "[]" > "$changed_skins_file"
echo " ✓ Skins written to $changed_skins_file (JSON array)" else
fi printf '%s\n' "${uniq_skins[@]}" | jq -R . | jq -cs . > "$changed_skins_file"
echo " ✓ Skins written to $changed_skins_file (JSON array)"
{ fi
echo "changed_skins_file<<EOF"
echo "$changed_skins_file" {
echo "EOF" echo "changed_skins_file<<EOF"
} >> "$GITHUB_OUTPUT" echo "$changed_skins_file"
echo "EOF"
echo "" } >> "$GITHUB_OUTPUT"
echo "[Detect Changed Skin Directories Complete — ${#uniq_skins[@]} skins processed, ${#deleted_skins[@]} skins deleted]"
echo ""
echo "[Detect Changed Skin Directories Complete — ${#uniq_skins[@]} skins processed, ${#deleted_skins[@]} skins deleted]"