diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 5b621513..b22cbe7f 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -11,6 +11,8 @@ on: jobs: build: runs-on: ubuntu-22.04 + permissions: + issues: write concurrency: group: release-${{ github.ref }} cancel-in-progress: true @@ -52,6 +54,81 @@ jobs: env: CURSEFORGE_TOKEN: ${{ secrets.CURSEFORGE_TOKEN }} MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} + - name: Capture mod version + if: steps.check_branch.outputs.is_release == 'true' + run: | + echo "MOD_VERSION=$(./gradlew properties -q | grep '^version:' | awk '{print $2}')" >> $GITHUB_ENV + echo "MC_VERSION=$(grep '^minecraft_version=' gradle.properties | cut -d= -f2)" >> $GITHUB_ENV + - name: Comment on fixed issues + if: steps.check_branch.outputs.is_release == 'true' + uses: actions/github-script@v7 + with: + script: | + const { execSync } = require('child_process'); + + const branch = context.ref.replace('refs/heads/', ''); + const { data: runs } = await github.rest.actions.listWorkflowRuns({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'gradle.yml', + branch, + status: 'success', + per_page: 1 + }); + + const logArgs = runs.workflow_runs.length > 0 + ? `${runs.workflow_runs[0].head_sha}..${context.sha}` + : `-1 ${context.sha}`; + const log = execSync(`git log ${logArgs} --format=%s%n%b`, { encoding: 'utf8' }); + + const issueNumbers = new Set(); + const pattern = /(?:fix(?:es|ed)?|close[sd]?|resolve[sd]?)\s+#(\d+)/gi; + let match; + while ((match = pattern.exec(log)) !== null) { + issueNumbers.add(parseInt(match[1])); + } + + if (issueNumbers.size === 0) { + console.log('No fixed issues found in commits'); + return; + } + + const MARKER = ''; + const modVersion = process.env.MOD_VERSION; + const mcVersion = process.env.MC_VERSION; + const newLine = `- ${modVersion} for Minecraft ${mcVersion}`; + + for (const issueNumber of issueNumbers) { + try { + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + per_page: 100 + }); + + const existing = comments.find(c => c.body.includes(MARKER)); + if (existing) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existing.id, + body: existing.body + `\n${newLine}` + }); + console.log(`Updated comment on issue #${issueNumber}`); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + body: `${MARKER}\nThe fix for this issue has been released in the following versions of ModernFix:\n${newLine}` + }); + console.log(`Created comment on issue #${issueNumber}`); + } + } catch (e) { + console.log(`Could not comment on #${issueNumber}: ${e.message}`); + } + } - name: Upload Artifacts to GitHub uses: actions/upload-artifact@v4 with: diff --git a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index 00563452..2c12a77e 100644 --- a/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -239,7 +239,7 @@ public class ModernFixEarlyConfig { disableIfModPresent("mixin.bugfix.item_cache_flag", "lithium", "canary", "radium"); // DimThread makes changes to the server chunk manager (understandably), C2ME probably does the same disableIfModPresent("mixin.bugfix.chunk_deadlock", "c2me", "dimthread"); - disableIfModPresent("mixin.perf.release_protochunks", "c2me"); + disableIfModPresent("mixin.perf.release_protochunks", "c2me", "moonrise"); disableIfModPresent("mixin.launch.class_search_cache", "optifine"); disableIfModPresent("mixin.perf.faster_texture_stitching", "optifine"); disableIfModPresent("mixin.bugfix.entity_pose_stack", "optifine");