Skip to content

Commit e5e75b0

Browse files
committed
Install Java 25 for ForgeGradle Mavenizer
1 parent a6bc7ee commit e5e75b0

4 files changed

Lines changed: 63 additions & 11 deletions

File tree

‎.github/workflows/ci.yml‎

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ jobs:
2626
- name: Check out source
2727
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
2828

29+
- name: Install pinned Java 25 ForgeGradle Mavenizer runtime
30+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
31+
with:
32+
distribution: temurin
33+
java-version: '25.0.3+9.0.LTS'
34+
2935
- name: Install pinned Java 8 compilation toolchain
3036
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
3137
with:
@@ -51,7 +57,7 @@ jobs:
5157
gradle_args=(
5258
classes verifyLegacyFixtures
5359
--no-daemon --no-build-cache --stacktrace --max-workers=2
54-
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64"
60+
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64"
5561
-Dorg.gradle.java.installations.auto-detect=false
5662
-Dorg.gradle.java.installations.auto-download=false
5763
)
@@ -66,7 +72,7 @@ jobs:
6672
gradle_args=(
6773
classes verifyLegacyFixtures
6874
--rerun-tasks --offline --no-daemon --no-build-cache --stacktrace --max-workers=2
69-
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64"
75+
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64"
7076
-Dorg.gradle.java.installations.auto-detect=false
7177
-Dorg.gradle.java.installations.auto-download=false
7278
)
@@ -81,6 +87,12 @@ jobs:
8187
- name: Check out source
8288
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
8389

90+
- name: Install pinned Java 25 ForgeGradle Mavenizer runtime
91+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
92+
with:
93+
distribution: temurin
94+
java-version: '25.0.3+9.0.LTS'
95+
8496
- name: Install pinned Java 8 compilation toolchain
8597
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
8698
with:
@@ -103,7 +115,7 @@ jobs:
103115
run: >-
104116
./gradlew clean check build javadoc verifyReleaseArtifacts writeReleaseChecksums
105117
verifyEclipseProductionClasspath --no-daemon --stacktrace
106-
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64"
118+
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64"
107119
-Dorg.gradle.java.installations.auto-detect=false
108120
-Dorg.gradle.java.installations.auto-download=false
109121

‎.github/workflows/codeql-analysis.yml‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ jobs:
2626
- name: Check out source
2727
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
2828

29+
- name: Install pinned Java 25 ForgeGradle Mavenizer runtime
30+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
31+
with:
32+
distribution: temurin
33+
java-version: '25.0.3+9.0.LTS'
34+
2935
- name: Install pinned Java 8 compilation toolchain
3036
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
3137
with:
@@ -52,7 +58,7 @@ jobs:
5258
gradle_args=(
5359
clean classes
5460
--no-daemon --stacktrace --max-workers=2
55-
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64"
61+
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64"
5662
-Dorg.gradle.java.installations.auto-detect=false
5763
-Dorg.gradle.java.installations.auto-download=false
5864
)

‎README.md‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,11 @@ exported to `config/orespawn-guide/` without overwriting existing files.
9595

9696
## Building
9797

98-
Run Gradle with Java 17 from the repository root. Install the exact Temurin
99-
`8.0.502+7` toolchain used to compile production code and test fixtures for
100-
Minecraft 1.16.5; the build rejects a different Java 8 toolchain:
98+
Run Gradle with Java 17 from the repository root. Install exact Temurin
99+
`25.0.3+9` for ForgeGradle's Mavenizer and exact Temurin `8.0.502+7` for the
100+
Minecraft 1.16.5 compilation and fixture toolchain. Java 17 remains the Gradle
101+
runtime, while production bytecode remains Java 8; the build rejects a
102+
different Java 8 toolchain:
101103

102104
```powershell
103105
.\gradlew.bat clean check build javadoc verifyReleaseArtifacts writeReleaseChecksums --no-daemon

‎src/test/java/zone/moddev/mc/orespawn/ReleaseWorkflowContractTest.java‎

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ void hostedWorkflowsUsePinnedJdksAndExerciseAColdForgeBootstrap() throws Excepti
4040

4141
for (String workflow : new String[] { ci, codeql }) {
4242
assertFalse(workflow.contains("distribution: microsoft"));
43+
assertTrue(workflow.contains("java-version: '25.0.3+9.0.LTS'"));
4344
assertTrue(workflow.contains("java-version: '8.0.502+7'"));
4445
assertTrue(workflow.contains("java-version: '17.0.1+12'"));
45-
assertTrue(workflow.lastIndexOf("java-version: '17.0.1+12'")
46-
> workflow.lastIndexOf("java-version: '8.0.502+7'"));
47-
assertTrue(workflow.contains("$JAVA_HOME,$JAVA_HOME_8_X64"));
4846
assertTrue(workflow.contains("-Dorg.gradle.java.installations.auto-detect=false"));
4947
assertTrue(workflow.contains("-Dorg.gradle.java.installations.auto-download=false"));
5048
}
49+
assertPinnedToolchains(ci, 2, 3);
50+
assertPinnedToolchains(codeql, 1, 1);
5151

5252
assertTrue(ci.contains("name: Cold Forge bootstrap"));
5353
assertTrue(ci.contains("GRADLE_USER_HOME: ${{ runner.temp }}/orespawn-cold-gradle"));
@@ -56,11 +56,43 @@ void hostedWorkflowsUsePinnedJdksAndExerciseAColdForgeBootstrap() throws Excepti
5656
assertTrue(ci.contains("classes verifyLegacyFixtures"));
5757
assertTrue(ci.contains("--rerun-tasks --offline --no-daemon --no-build-cache"));
5858
assertFalse(ci.contains("Mavenizer compatibility"));
59-
assertFalse(ci.contains("25.0.3"));
6059
}
6160

6261
private static String readWorkflow(String name) throws Exception {
6362
return new String(Files.readAllBytes(Paths.get(".github", "workflows", name)),
6463
StandardCharsets.UTF_8);
6564
}
65+
66+
private static void assertPinnedToolchains(String workflow, int expectedJobs, int expectedPathUses) {
67+
String java25 = "java-version: '25.0.3+9.0.LTS'";
68+
String java8 = "java-version: '8.0.502+7'";
69+
String java17 = "java-version: '17.0.1+12'";
70+
String paths = "$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64";
71+
72+
assertEquals(expectedJobs, occurrences(workflow, java25));
73+
assertEquals(expectedJobs, occurrences(workflow, java8));
74+
assertEquals(expectedJobs, occurrences(workflow, java17));
75+
assertEquals(expectedPathUses, occurrences(workflow, paths));
76+
77+
int cursor = 0;
78+
for (int job = 0; job < expectedJobs; job++) {
79+
int java25Index = workflow.indexOf(java25, cursor);
80+
int java8Index = workflow.indexOf(java8, java25Index + java25.length());
81+
int java17Index = workflow.indexOf(java17, java8Index + java8.length());
82+
assertTrue(java25Index >= cursor);
83+
assertTrue(java8Index > java25Index);
84+
assertTrue(java17Index > java8Index);
85+
cursor = java17Index + java17.length();
86+
}
87+
}
88+
89+
private static int occurrences(String value, String needle) {
90+
int count = 0;
91+
int offset = 0;
92+
while ((offset = value.indexOf(needle, offset)) >= 0) {
93+
count++;
94+
offset += needle.length();
95+
}
96+
return count;
97+
}
6698
}

0 commit comments

Comments
 (0)