diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index d9377a3..edf5beb 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -49,9 +49,11 @@ jobs: --env NVIDIA_VISIBLE_DEVICES=all --user 0:0 steps: - - name: Checkout Repository + - name: Checkout repository uses: actions/checkout@v4 with: + fetch-depth: 0 + tags: true token: ${{ secrets.TOKEN }} - name: Detect Changed Skin Directories @@ -68,26 +70,40 @@ jobs: echo "→ Force rebuild flag: $force_rebuild" - if [ "$force_rebuild" = "true" ]; then + if [[ "$force_rebuild" == "true" ]]; then echo "→ Force rebuild is enabled. Finding all skin directories..." - mapfile -t skins < <(find Skins -mindepth 1 -maxdepth 1 -type d | sed 's|^Skins/||' | sort) + mapfile -t skins < <( + find Skins -mindepth 1 -maxdepth 1 -type d \ + | sed 's|^Skins/||' + ) echo " ✓ Found ${#skins[@]} skin directories" + else echo "→ Force rebuild is disabled. Finding latest git tag..." latest_tag=$(git tag --sort=-creatordate | head -n 1 || true) - if [ -n "$latest_tag" ]; then + + 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 --diff-filter=AM "$latest_tag" HEAD | - grep '^Skins/' | sed -E 's#^Skins/([^/]+).*#\1#' | sort -u + git diff --name-only -z --diff-filter=AM "$latest_tag" HEAD \ + | while IFS= read -r -d '' file; do + if [[ $file == Skins/* ]]; then + echo "${file#Skins/}" | cut -d/ -f1 + fi + done ) echo " ✓ Found ${#skins[@]} added/modified skins" echo "→ Finding deleted skins since $latest_tag..." mapfile -t deleted_skins < <( - git diff --name-only --diff-filter=D "$latest_tag" HEAD | - grep '^Skins/' | sed -E 's#^Skins/([^/]+).*#\1#' | sort -u + git diff --name-only -z --diff-filter=D "$latest_tag" HEAD \ + | while IFS= read -r -d '' file; do + if [[ $file == Skins/* ]]; then + echo "${file#Skins/}" | cut -d/ -f1 + fi + done ) if [ "${#deleted_skins[@]}" -gt 0 ]; then for d in "${deleted_skins[@]}"; do @@ -99,7 +115,10 @@ jobs: else echo "→ No tag found. Falling back to finding all skin directories..." - mapfile -t skins < <(find Skins -mindepth 1 -maxdepth 1 -type d | sed 's|^Skins/||' | sort) + mapfile -t skins < <( + find Skins -mindepth 1 -maxdepth 1 -type d \ + | sed 's|^Skins/||' + ) echo " ✓ Found ${#skins[@]} skin directories" fi fi @@ -185,7 +204,6 @@ jobs: shell: bash run: | echo "Computing new tag..." - git fetch --tags latest_tag=$(git describe --tags $(git rev-list --tags --max-count=1) 2>/dev/null || echo "") if [ -z "$latest_tag" ]; then new_tag="v1.0.0"