From 804a9f981d300d28fe5deb72842528b893795318 Mon Sep 17 00:00:00 2001 From: fithwum Date: Fri, 26 Jun 2026 09:50:45 -0700 Subject: [PATCH] fix workflow problem --- .gitea/workflows/minecraft-build.yml | 169 ++++++++++++++------------- 1 file changed, 85 insertions(+), 84 deletions(-) diff --git a/.gitea/workflows/minecraft-build.yml b/.gitea/workflows/minecraft-build.yml index da7e08e..23656c4 100644 --- a/.gitea/workflows/minecraft-build.yml +++ b/.gitea/workflows/minecraft-build.yml @@ -39,109 +39,110 @@ jobs: echo "[INFO] Pruning Docker images on ${{ matrix.runner }}..." docker image prune -a -f || true - # poll-debian-base-and-detect-changes: - # runs-on: vm-docker-build2 - # needs: docker-prune - # outputs: - # digest_changed: ${{ steps.compare_digest.outputs.changed }} - # versions_changed: ${{ steps.check_changed_versions.outputs.versions_changed }} - # new_versions: ${{ steps.check_new_versions.outputs.new_versions }} - # steps: - # - name: Checkout repo - # uses: actions/checkout@v3 - # with: - # fetch-depth: 0 + poll-debian-base-and-detect-changes: + runs-on: vm-docker-build2 + needs: docker-prune + outputs: + digest_changed: ${{ steps.compare_digest.outputs.changed }} + versions_changed: ${{ steps.check_changed_versions.outputs.versions_changed }} + new_versions: ${{ steps.check_new_versions.outputs.new_versions }} + steps: + - name: Checkout repo + uses: actions/checkout@v3 + with: + fetch-depth: 0 - # - name: Ensure .cache exists - # run: mkdir -p .cache && touch .cache/.gitkeep + - name: Ensure .cache exists + run: mkdir -p .cache && touch .cache/.gitkeep - # - name: Log in to Gitea Registry - # run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login gitea.fithwum.tech -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + - name: Log in to Gitea Registry + run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login gitea.fithwum.tech -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - # - name: Get current digest of debian-base image - # id: get_digest - # run: | - # IMAGE="${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_ORG }}/${{ env.IMAGE_REPO_DEBIAN }}:${{ env.IMAGE_TAG_DEBIAN }}" - # docker pull "$IMAGE" > /dev/null - # DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' "$IMAGE") - # echo "digest=$DIGEST" >> $GITHUB_OUTPUT - # echo "$DIGEST" > .cache/debian-base.digest.new + - name: Get current digest of debian-base image + id: get_digest + run: | + IMAGE="${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_ORG }}/${{ env.IMAGE_REPO_DEBIAN }}:${{ env.IMAGE_TAG_DEBIAN }}" + docker pull "$IMAGE" > /dev/null + DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' "$IMAGE") + echo "digest=$DIGEST" >> $GITHUB_OUTPUT + echo "$DIGEST" > .cache/debian-base.digest.new - # - name: Compare with stored digest - # id: compare_digest - # run: | - # CURRENT_DIGEST="${{ steps.get_digest.outputs.digest }}" - # LAST_DIGEST="$(cat ${{ env.DIGEST_FILE }} 2>/dev/null || echo '')" + - name: Compare with stored digest + id: compare_digest + run: | + CURRENT_DIGEST="${{ steps.get_digest.outputs.digest }}" + LAST_DIGEST="$(cat ${{ env.DIGEST_FILE }} 2>/dev/null || echo '')" - # if [ "$CURRENT_DIGEST" = "$LAST_DIGEST" ]; then - # echo "[INFO] Digest unchanged" - # echo "changed=false" >> $GITHUB_OUTPUT - # exit 0 - # fi + if [ "$CURRENT_DIGEST" = "$LAST_DIGEST" ]; then + echo "[INFO] Digest unchanged" + echo "changed=false" >> $GITHUB_OUTPUT + exit 0 + fi - # echo "[INFO] Digest changed → updating cache" - # echo "$CURRENT_DIGEST" > ${{ env.DIGEST_FILE }} + echo "[INFO] Digest changed → updating cache" + echo "$CURRENT_DIGEST" > ${{ env.DIGEST_FILE }} - # git config user.name "${{ secrets.GIT_USERNAME }}" - # git config user.email "${{ secrets.GIT_EMAIL }}" + git config user.name "${{ secrets.GIT_USERNAME }}" + git config user.email "${{ secrets.GIT_EMAIL }}" - # git add ${{ env.DIGEST_FILE }} - # git commit -m "Update base digest to $CURRENT_DIGEST" || true + git add ${{ env.DIGEST_FILE }} + git commit -m "Update base digest to $CURRENT_DIGEST" || true - # # --- Safe rebase with auto conflict resolution --- - # git fetch origin master - # if ! git rebase --strategy-option=theirs origin/master; then - # echo "[WARN] Rebase conflict, auto-resolving by preferring local digest" - # git rebase --abort - # git fetch origin master - # git reset --hard origin/master - # echo "$CURRENT_DIGEST" > ${{ env.DIGEST_FILE }} - # git add ${{ env.DIGEST_FILE }} - # git commit -m "Force-update base digest to $CURRENT_DIGEST (auto-resolved)" - # fi + # --- Safe rebase with auto conflict resolution --- + git fetch origin master + if ! git rebase --strategy-option=theirs origin/master; then + echo "[WARN] Rebase conflict, auto-resolving by preferring local digest" + git rebase --abort + git fetch origin master + git reset --hard origin/master + echo "$CURRENT_DIGEST" > ${{ env.DIGEST_FILE }} + git add ${{ env.DIGEST_FILE }} + git commit -m "Force-update base digest to $CURRENT_DIGEST (auto-resolved)" + fi - # git push origin HEAD:master - # echo "changed=true" >> $GITHUB_OUTPUT + git push origin HEAD:master + echo "changed=true" >> $GITHUB_OUTPUT - # - name: Detect changed Minecraft versions - # id: check_changed_versions - # run: | - # BEFORE_COMMIT="${{ github.event.before }}" - # if [ -z "$BEFORE_COMMIT" ] || ! git cat-file -e "$BEFORE_COMMIT^{commit}" 2>/dev/null; then - # BEFORE_COMMIT=$(git rev-parse HEAD~1) - # fi - # CHANGED=$(git diff --name-only "$BEFORE_COMMIT" HEAD || true) - # CHANGED_VERSIONS="" - # for version in $VERSIONS; do - # echo "$CHANGED" | grep -q "^$version/.*\.\(sh\|Dockerfile\)$" && CHANGED_VERSIONS="$CHANGED_VERSIONS $version" - # done - # CHANGED_VERSIONS=$(echo "$CHANGED_VERSIONS" | xargs) # trim whitespace - # echo "versions_changed=$CHANGED_VERSIONS" >> $GITHUB_OUTPUT + - name: Detect changed Minecraft versions + id: check_changed_versions + run: | + BEFORE_COMMIT="${{ github.event.before }}" + if [ -z "$BEFORE_COMMIT" ] || ! git cat-file -e "$BEFORE_COMMIT^{commit}" 2>/dev/null; then + BEFORE_COMMIT=$(git rev-parse HEAD~1) + fi + CHANGED=$(git diff --name-only "$BEFORE_COMMIT" HEAD || true) + CHANGED_VERSIONS="" + for version in $VERSIONS; do + echo "$CHANGED" | grep -q "^$version/.*\.\(sh\|Dockerfile\)$" && CHANGED_VERSIONS="$CHANGED_VERSIONS $version" + done + CHANGED_VERSIONS=$(echo "$CHANGED_VERSIONS" | xargs) # trim whitespace + echo "versions_changed=$CHANGED_VERSIONS" >> $GITHUB_OUTPUT - # - name: Detect Minecraft versions without build-info - # id: check_new_versions - # run: | - # NEW_VERSIONS="" - # GIT_CREDENTIAL="${{ secrets.GIT_TOKEN || secrets.GIT_PASSWORD }}" - # git clone --depth=1 "https://${{ secrets.GIT_USERNAME }}:${GIT_CREDENTIAL}@gitea.fithwum.tech/fithwum/minecraft.git" upload-repo + - name: Detect Minecraft versions without build-info + id: check_new_versions + run: | + NEW_VERSIONS="" + GIT_CREDENTIAL="${{ secrets.GIT_TOKEN || secrets.GIT_PASSWORD }}" + git clone --depth=1 "https://${{ secrets.GIT_USERNAME }}:${GIT_CREDENTIAL}@gitea.fithwum.tech/fithwum/minecraft.git" upload-repo - # for version in $VERSIONS; do - # if [ ! -f "upload-repo/$version/build-info.json" ]; then - # echo "[INFO] No build-info.json for $version → treating as new" - # NEW_VERSIONS="$NEW_VERSIONS $version" - # fi - # done + for version in $VERSIONS; do + if [ ! -f "upload-repo/$version/build-info.json" ]; then + echo "[INFO] No build-info.json for $version → treating as new" + NEW_VERSIONS="$NEW_VERSIONS $version" + fi + done - # echo "new_versions=$NEW_VERSIONS" >> $GITHUB_OUTPUT + echo "new_versions=$NEW_VERSIONS" >> $GITHUB_OUTPUT build-minecraft-images: runs-on: vm-docker-build2 needs: - docker-prune - # if: | - # needs.poll-debian-base-and-detect-changes.outputs.digest_changed == 'true' || - # needs.poll-debian-base-and-detect-changes.outputs.versions_changed != '' || - # needs.poll-debian-base-and-detect-changes.outputs.new_versions != '' + - poll-debian-base-and-detect-changes + if: | + needs.poll-debian-base-and-detect-changes.outputs.digest_changed == 'true' || + needs.poll-debian-base-and-detect-changes.outputs.versions_changed != '' || + needs.poll-debian-base-and-detect-changes.outputs.new_versions != '' strategy: matrix: version: [testing, vanilla, fabric, neoforged, forge, bukkit, quilt]