diff --git a/.github/workflows/deploy-release.yml b/.github/workflows/deploy-release.yml index cae7ea1b..1af3ef04 100644 --- a/.github/workflows/deploy-release.yml +++ b/.github/workflows/deploy-release.yml @@ -287,12 +287,28 @@ jobs: with: ref: ${{ needs.preflight.outputs.release_sha }} + - name: Install pinned Java 25 Mavenizer runtime + uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5 + with: + distribution: temurin + java-version: '25.0.3+9.0.LTS' + + - name: Install pinned Java 8 launcher toolchain + uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5 + with: + distribution: temurin + java-version: '8.0.502+7' + - name: Install target Java toolchain uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5 with: distribution: temurin java-version: ${{ needs.preflight.outputs.java_setup_version }} + - name: Record target Java toolchain path + shell: bash + run: echo "ORESPAWN_TARGET_JAVA_HOME=$JAVA_HOME" >> "$GITHUB_ENV" + - name: Install separate Java for Gradle if: needs.preflight.outputs.install_gradle_java == 'true' uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5 @@ -303,22 +319,48 @@ jobs: - name: Set up Gradle uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6 + - name: Resolve explicit Gradle Java installations + id: java-paths + shell: bash + run: | + set -euo pipefail + candidates=( + "$JAVA_HOME_25_X64" + "$JAVA_HOME_8_X64" + "$ORESPAWN_TARGET_JAVA_HOME" + "$JAVA_HOME" + ) + paths= + for candidate in "${candidates[@]}"; do + test -x "$candidate/bin/java" + canonical="$(cd "$candidate" && pwd -P)" + if [[ ",$paths," != *",$canonical,"* ]]; then + paths="${paths:+$paths,}$canonical" + fi + done + echo "paths=$paths" >> "$GITHUB_OUTPUT" + - name: Build, test, and audit once env: LOADER_NAME: ${{ needs.preflight.outputs.loader_name }} run: | set -euo pipefail chmod +x ./gradlew + java_args=( + "-Dorg.gradle.java.installations.paths=${{ steps.java-paths.outputs.paths }}" + -Dorg.gradle.java.installations.auto-detect=false + -Dorg.gradle.java.installations.auto-download=false + ) if [[ "$LOADER_NAME" == "neoforge" ]]; then # NeoGradle resolves model inputs during configuration under build/tmp. # Cleaning in the same invocation removes those inputs before setup runs. - ./gradlew clean --no-daemon --stacktrace --max-workers=2 + ./gradlew clean --no-daemon --stacktrace --max-workers=2 "${java_args[@]}" ./gradlew check build javadoc verifyReleaseArtifacts writeReleaseChecksums \ - --no-daemon --stacktrace --max-workers=2 + --no-daemon --stacktrace --max-workers=2 "${java_args[@]}" else # Preserve the established Forge release lifecycle. ./gradlew clean check build javadoc verifyReleaseArtifacts writeReleaseChecksums \ - --no-daemon --stacktrace + --no-daemon --stacktrace "${java_args[@]}" fi - name: Stage the immutable release artifact @@ -455,12 +497,28 @@ jobs: with: ref: ${{ needs.preflight.outputs.release_sha }} + - name: Install pinned Java 25 Mavenizer runtime + uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5 + with: + distribution: temurin + java-version: '25.0.3+9.0.LTS' + + - name: Install pinned Java 8 launcher toolchain + uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5 + with: + distribution: temurin + java-version: '8.0.502+7' + - name: Install target Java toolchain uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5 with: distribution: temurin java-version: ${{ needs.preflight.outputs.java_setup_version }} + - name: Record target Java toolchain path + shell: bash + run: echo "ORESPAWN_TARGET_JAVA_HOME=$JAVA_HOME" >> "$GITHUB_ENV" + - name: Install separate Java for Gradle if: needs.preflight.outputs.install_gradle_java == 'true' uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5 @@ -471,6 +529,27 @@ jobs: - name: Set up Gradle uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6 + - name: Resolve explicit Gradle Java installations + id: java-paths + shell: bash + run: | + set -euo pipefail + candidates=( + "$JAVA_HOME_25_X64" + "$JAVA_HOME_8_X64" + "$ORESPAWN_TARGET_JAVA_HOME" + "$JAVA_HOME" + ) + paths= + for candidate in "${candidates[@]}"; do + test -x "$candidate/bin/java" + canonical="$(cd "$candidate" && pwd -P)" + if [[ ",$paths," != *",$canonical,"* ]]; then + paths="${paths:+$paths,}$canonical" + fi + done + echo "paths=$paths" >> "$GITHUB_OUTPUT" + - name: Download immutable release artifact uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: @@ -503,7 +582,10 @@ jobs: chmod +x ./gradlew ./gradlew publishMavenJavaPublicationToReleaseRepository \ -PpreparedReleaseDir="$RUNNER_TEMP/release-input" \ - --no-daemon --stacktrace + --no-daemon --stacktrace \ + -Dorg.gradle.java.installations.paths="${{ steps.java-paths.outputs.paths }}" \ + -Dorg.gradle.java.installations.auto-detect=false \ + -Dorg.gradle.java.installations.auto-download=false publish_curseforge: name: Publish CurseForge