Skip to content

Commit b5567e4

Browse files
carterkozakmarkelliot
authored andcommitted
Update default GraalVM version to 19.0.2 (was 1.0.0-rc12) (#119)
1 parent 5394b07 commit b5567e4

File tree

4 files changed

+113
-7
lines changed

4 files changed

+113
-7
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Configuration
2323
Configure this plugin and its wrappers around GraalVM tools through the `graal` extension with the following options:
2424

2525
**General GraalVM controls**
26-
* `graalVersion`: the version string to use when downloading GraalVM (defaults to `1.0.0-rc12`)
26+
* `graalVersion`: the version string to use when downloading GraalVM (defaults to `19.0.2`)
2727
* `downloadBaseUrl`: the base download URL to use (defaults to `https://github.com/oracle/graal/releases/download/`)
2828

2929

src/main/java/com/palantir/gradle/graal/ExtractGraalTask.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616

1717
package com.palantir.gradle.graal;
1818

19+
import java.io.File;
1920
import java.nio.file.Path;
21+
import java.nio.file.Paths;
2022
import org.gradle.api.DefaultTask;
2123
import org.gradle.api.file.Directory;
2224
import org.gradle.api.file.DirectoryProperty;
@@ -61,6 +63,33 @@ public final void extractGraal() {
6163
spec.args("-xzf", inputTgz.get().getAsFile().getAbsolutePath());
6264
spec.workingDir(cacheDir.get().resolve(graalVersion.get()));
6365
});
66+
File nativeImageExecutable = getExecutable("native-image");
67+
if (!nativeImageExecutable.isFile()) {
68+
getProject().exec(spec -> {
69+
File graalUpdateExecutable = getExecutable("gu");
70+
if (!graalUpdateExecutable.isFile()) {
71+
throw new IllegalStateException("Failed to find Graal update binary: " + graalUpdateExecutable);
72+
}
73+
spec.executable(graalUpdateExecutable.getAbsolutePath());
74+
spec.args("install", "native-image");
75+
});
76+
}
77+
}
78+
79+
private File getExecutable(String binaryName) {
80+
return cacheDir.get()
81+
.resolve(Paths.get(graalVersion.get(), "graalvm-ce-" + graalVersion.get()))
82+
.resolve(getArchitectureSpecifiedBinaryPath(binaryName))
83+
.toFile();
84+
}
85+
86+
private Path getArchitectureSpecifiedBinaryPath(String binaryName) {
87+
switch (Platform.operatingSystem()) {
88+
case MAC: return Paths.get("Contents", "Home", "bin", binaryName);
89+
case LINUX: return Paths.get("bin", binaryName);
90+
default:
91+
throw new IllegalStateException("No GraalVM support for " + Platform.operatingSystem());
92+
}
6493
}
6594

6695
@InputFile

src/main/java/com/palantir/gradle/graal/GraalExtension.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
public class GraalExtension {
2828

2929
private static final String DEFAULT_DOWNLOAD_BASE_URL = "https://github.com/oracle/graal/releases/download/";
30-
private static final String DEFAULT_GRAAL_VERSION = "1.0.0-rc12";
30+
private static final String DEFAULT_GRAAL_VERSION = "19.0.2";
3131

3232
private final Property<String> downloadBaseUrl;
3333
private final Property<String> graalVersion;

src/test/groovy/com/palantir/gradle/graal/GradleGraalEndToEndSpec.groovy

Lines changed: 82 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,63 @@ class GradleGraalEndToEndSpec extends IntegrationSpec {
2828
directory("src/main/java/com/palantir/test")
2929
file("src/main/java/com/palantir/test/Main.java") << '''
3030
package com.palantir.test;
31-
31+
32+
public final class Main {
33+
public static final void main(String[] args) {
34+
System.out.println("hello, world!");
35+
}
36+
}
37+
'''
38+
39+
buildFile << '''
40+
apply plugin: 'com.palantir.graal'
41+
42+
graal {
43+
mainClass 'com.palantir.test.Main'
44+
outputName 'hello-world'
45+
}
46+
'''
47+
48+
when:
49+
ExecutionResult result = runTasksSuccessfully('nativeImage') // note, this accesses your real ~/.gradle cache
50+
println "Gradle Standard Out:\n" + result.standardOutput
51+
println "Gradle Standard Error:\n" + result.standardError
52+
File output = new File(getProjectDir(), "build/graal/hello-world");
53+
54+
then:
55+
output.exists()
56+
output.getAbsolutePath().execute().text.equals("hello, world!\n")
57+
58+
when:
59+
ExecutionResult result2 = runTasksSuccessfully('nativeImage')
60+
61+
then:
62+
result2.wasUpToDate(':nativeImage')
63+
64+
when:
65+
new File(getProjectDir(), "src/main/java/com/palantir/test/Main.java").text = '''
66+
package com.palantir.test;
67+
68+
public final class Main {
69+
public static final void main(String[] args) {
70+
System.out.println("hello, world (modified)!");
71+
}
72+
}
73+
'''
74+
ExecutionResult result3 = runTasksSuccessfully('nativeImage')
75+
76+
then:
77+
println result3.standardOutput
78+
!result3.wasUpToDate(':nativeImage')
79+
output.getAbsolutePath().execute().text.equals("hello, world (modified)!\n")
80+
}
81+
82+
def 'test 1.0.0-rc5 nativeImage'() {
83+
setup:
84+
directory("src/main/java/com/palantir/test")
85+
file("src/main/java/com/palantir/test/Main.java") << '''
86+
package com.palantir.test;
87+
3288
public final class Main {
3389
public static final void main(String[] args) {
3490
System.out.println("hello, world!");
@@ -65,7 +121,7 @@ class GradleGraalEndToEndSpec extends IntegrationSpec {
65121
when:
66122
new File(getProjectDir(), "src/main/java/com/palantir/test/Main.java").text = '''
67123
package com.palantir.test;
68-
124+
69125
public final class Main {
70126
public static final void main(String[] args) {
71127
System.out.println("hello, world (modified)!");
@@ -85,10 +141,10 @@ class GradleGraalEndToEndSpec extends IntegrationSpec {
85141
directory("src/main/java/com/palantir/test")
86142
file("src/main/java/com/palantir/test/Main.java") << '''
87143
package com.palantir.test;
88-
144+
89145
import java.io.IOException;
90146
import java.net.URL;
91-
147+
92148
public final class Main {
93149
public static final void main(String[] args) throws IOException {
94150
String result = convertStreamToString(new URL("http://www.google.com/").openStream());
@@ -125,8 +181,29 @@ class GradleGraalEndToEndSpec extends IntegrationSpec {
125181
output.getAbsolutePath().execute().text.toLowerCase().contains("<html")
126182
}
127183

184+
def 'can build shared libraries on default version'() {
185+
setup:
186+
directory("src/main/java/com/palantir/test")
187+
file("src/main/java/com/palantir/test/Main.java") << '''
188+
package com.palantir.test;
189+
public final class Main {}
190+
'''
191+
buildFile << '''
192+
apply plugin: 'com.palantir.graal'
193+
graal {
194+
outputName 'hello-world'
195+
}
196+
'''
197+
198+
when:
199+
runTasksSuccessfully('sharedLibrary')
200+
File dylibFile = new File(getProjectDir(), "build/graal/hello-world." + getSharedLibPrefixByOs())
201+
202+
then:
203+
dylibFile.exists()
204+
}
128205

129-
def 'can build shared libraries'() {
206+
def 'can build shared libraries on 1.0.0-rc5'() {
130207
setup:
131208
directory("src/main/java/com/palantir/test")
132209
file("src/main/java/com/palantir/test/Main.java") << '''

0 commit comments

Comments
 (0)