diff --git a/.gitea/workflows/base-build.yml b/.gitea/workflows/base-build.yml index 7b5e90c..b8c25a6 100644 --- a/.gitea/workflows/base-build.yml +++ b/.gitea/workflows/base-build.yml @@ -30,6 +30,8 @@ jobs: steps: - name: Checkout repo uses: actions/checkout@v3 + with: + fetch-depth: 0 - name: Ensure .cache exists with .gitkeep run: | @@ -83,11 +85,27 @@ jobs: - name: Check for Dockerfile or .sh changes id: check_files_changed run: | - CHANGED=false - if git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep -E '\.sh$|Dockerfile'; then - CHANGED=true + set -e + + # Try to get the base commit for diff + BEFORE_COMMIT="${{ github.event.before }}" + if [ -z "$BEFORE_COMMIT" ] || ! git cat-file -e "$BEFORE_COMMIT^{commit}" 2>/dev/null; then + echo "[WARN] 'before' commit missing or invalid, using HEAD~1" + BEFORE_COMMIT=$(git rev-parse HEAD~1) + fi + + echo "[INFO] Diffing against $BEFORE_COMMIT" + + CHANGED=$(git diff --name-only "$BEFORE_COMMIT" HEAD | grep -E '\.sh$|Dockerfile' || true) + + if [ -n "$CHANGED" ]; then + echo "[INFO] Found changed files:" + echo "$CHANGED" + echo "files_changed=true" >> $GITHUB_OUTPUT + else + echo "[INFO] No relevant files changed." + echo "files_changed=false" >> $GITHUB_OUTPUT fi - echo "files_changed=$CHANGED" >> $GITHUB_OUTPUT - name: Build and Push Minecraft Docker Images if: steps.compare_digest.outputs.changed == 'true' || steps.check_files_changed.outputs.files_changed == 'true'