Update .gitea/actions/discover-skins/action.yml
This commit is contained in:
@@ -33,33 +33,23 @@ runs:
|
|||||||
- name: Fetch tags manually
|
- name: Fetch tags manually
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
echo "Manually fetching tags from Gitea…"
|
|
||||||
git fetch origin --tags --force --prune
|
git fetch origin --tags --force --prune
|
||||||
echo "Tags after fetch:"
|
|
||||||
git tag -l
|
git tag -l
|
||||||
|
|
||||||
- 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…"
|
|
||||||
|
|
||||||
# Find all skins and create JSON, write to shared file
|
|
||||||
all_skins_file="/tmp/all_skins_shared.json"
|
all_skins_file="/tmp/all_skins_shared.json"
|
||||||
find "$SKINS_DIR" -mindepth 1 -maxdepth 1 -type d -print0 \
|
find "$SKINS_DIR" -mindepth 1 -maxdepth 1 -type d -print0 \
|
||||||
| while IFS= read -r -d '' dir; do
|
| while IFS= read -r -d '' dir; do basename "$dir"; done \
|
||||||
basename "$dir"
|
|
||||||
done \
|
|
||||||
| jq -R . | jq -cs . > "$all_skins_file"
|
| jq -R . | jq -cs . > "$all_skins_file"
|
||||||
|
|
||||||
json=$(cat "$all_skins_file")
|
json=$(cat "$all_skins_file")
|
||||||
|
|
||||||
{
|
{
|
||||||
echo "all_skins<<EOF"
|
echo "all_skins<<EOF"
|
||||||
echo "$json"
|
echo "$json"
|
||||||
echo "EOF"
|
echo "EOF"
|
||||||
} >> "$GITHUB_OUTPUT"
|
} >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
echo "all_skins_file=$all_skins_file" >> "$GITHUB_OUTPUT"
|
echo "all_skins_file=$all_skins_file" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- name: Detect Changed Skin Directories
|
- name: Detect Changed Skin Directories
|
||||||
@@ -67,9 +57,7 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
set -e
|
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"
|
all_skins_file="/tmp/all_skins_shared.json"
|
||||||
temp_all_skins="/tmp/all_skins_raw_$RANDOM.txt"
|
temp_all_skins="/tmp/all_skins_raw_$RANDOM.txt"
|
||||||
jq -r '.[]' "$all_skins_file" > "$temp_all_skins"
|
jq -r '.[]' "$all_skins_file" > "$temp_all_skins"
|
||||||
@@ -81,89 +69,50 @@ runs:
|
|||||||
skins=()
|
skins=()
|
||||||
deleted_skins=()
|
deleted_skins=()
|
||||||
|
|
||||||
echo "→ Force rebuild flag: $force_rebuild"
|
|
||||||
echo "→ Target skins input: $target_skins"
|
|
||||||
|
|
||||||
if [[ "$force_rebuild" == "true" ]]; then
|
if [[ "$force_rebuild" == "true" ]]; then
|
||||||
echo "→ Force rebuild is enabled. Using ALL_SKINS_DIR for full list…"
|
|
||||||
skins=("${all_skins[@]}")
|
skins=("${all_skins[@]}")
|
||||||
echo " ✓ Found ${#skins[@]} skin directories (from ALL_SKINS_DIR)"
|
|
||||||
|
|
||||||
elif [[ -n "$target_skins" ]]; then
|
elif [[ -n "$target_skins" && "$target_skins" != "" ]]; then
|
||||||
echo "→ Target skins specified. Using target_skins input…"
|
|
||||||
# Use a temporary file to safely handle special characters
|
|
||||||
temp_target_file="/tmp/target_skins_$RANDOM.json"
|
temp_target_file="/tmp/target_skins_$RANDOM.json"
|
||||||
printf '%s' "$target_skins" > "$temp_target_file"
|
printf '%s' "$target_skins" > "$temp_target_file"
|
||||||
temp_target_raw="/tmp/target_skins_raw_$RANDOM.txt"
|
mapfile -t skins < <(jq -r '.[]' "$temp_target_file")
|
||||||
jq -r '.[]' "$temp_target_file" > "$temp_target_raw"
|
rm -f "$temp_target_file"
|
||||||
mapfile -t skins < "$temp_target_raw"
|
|
||||||
rm -f "$temp_target_file" "$temp_target_raw"
|
|
||||||
echo " ✓ Found ${#skins[@]} skin(s) from target_skins input"
|
|
||||||
|
|
||||||
else
|
else
|
||||||
echo "→ No rebuild flags set. Finding latest git tag..."
|
latest_tag=$(git tag --sort=-version:refname | head -n 1)
|
||||||
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
|
|
||||||
|
|
||||||
if [[ -n "$latest_tag" ]]; then
|
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
|
||||||
|
[[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1
|
||||||
|
done | sort -u
|
||||||
|
)
|
||||||
|
|
||||||
temp_skins_am="/tmp/skins_am_$RANDOM.txt"
|
mapfile -t deleted_skins < <(
|
||||||
git diff --name-only -z --diff-filter=AM "$latest_tag" HEAD \
|
git diff --name-only -z --diff-filter=D "$latest_tag" HEAD \
|
||||||
| while IFS= read -r -d '' file; do
|
| while IFS= read -r -d '' file; do
|
||||||
[[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1
|
[[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1
|
||||||
done | sort -u > "$temp_skins_am"
|
done | sort -u
|
||||||
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
|
|
||||||
else
|
else
|
||||||
echo "→ No tag found. Falling back to ALL_SKINS_DIR for full list…"
|
|
||||||
skins=("${all_skins[@]}")
|
skins=("${all_skins[@]}")
|
||||||
echo " ✓ Found ${#skins[@]} skin directories (from ALL_SKINS_DIR)"
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "[Cleaning Skin Names]"
|
|
||||||
uniq_skins=()
|
uniq_skins=()
|
||||||
for skin in "${skins[@]}"; do
|
for skin in "${skins[@]}"; do
|
||||||
skin="${skin#"${skin%%[![:space:]]*}"}"
|
skin="${skin#"${skin%%[![:space:]]*}"}"
|
||||||
skin="${skin%"${skin##*[![:space:]]}"}"
|
skin="${skin%"${skin##*[![:space:]]}"}"
|
||||||
[[ -n "$skin" ]] && uniq_skins+=("$skin")
|
[[ -n "$skin" ]] && uniq_skins+=("$skin")
|
||||||
done
|
done
|
||||||
echo " ✓ ${#uniq_skins[@]} valid skin names after cleaning"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "[Writing Changed Skins to File]"
|
|
||||||
changed_skins_file="/tmp/changed_skins_$RANDOM.txt"
|
changed_skins_file="/tmp/changed_skins_$RANDOM.txt"
|
||||||
|
|
||||||
if [ "${#uniq_skins[@]}" -eq 0 ]; then
|
if [ "${#uniq_skins[@]}" -eq 0 ]; then
|
||||||
echo "→ No added/modified skins detected."
|
|
||||||
echo "[]" > "$changed_skins_file"
|
echo "[]" > "$changed_skins_file"
|
||||||
else
|
else
|
||||||
printf '%s\n' "${uniq_skins[@]}" | jq -R . | jq -cs . > "$changed_skins_file"
|
printf '%s\n' "${uniq_skins[@]}" | jq -R . | jq -cs . > "$changed_skins_file"
|
||||||
echo " ✓ Skins written to $changed_skins_file (JSON array)"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -171,6 +120,3 @@ runs:
|
|||||||
echo "$changed_skins_file"
|
echo "$changed_skins_file"
|
||||||
echo "EOF"
|
echo "EOF"
|
||||||
} >> "$GITHUB_OUTPUT"
|
} >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "[Detect Changed Skin Directories Complete — ${#uniq_skins[@]} skins processed, ${#deleted_skins[@]} skins deleted]"
|
|
||||||
|
|||||||
Reference in New Issue
Block a user