Skip to content

Commit afaff9d

Browse files
authored
v1.5.0 (#22)
* #20 - Add support for "--platform" * #21 - Add support for Windows file paths
1 parent beac66a commit afaff9d

File tree

6 files changed

+94
-14
lines changed

6 files changed

+94
-14
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ plugins {
1010
}
1111

1212
group 'com.formkiq.gradle'
13-
version '1.4.0'
13+
version '1.5.0'
1414

1515
java {
1616
toolchain {

src/main/java/com/formkiq/gradle/GraalvmNativeExtension.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ public class GraalvmNativeExtension {
8282
private Property<String> mainClassName;
8383
/** Output File Name. */
8484
private Property<String> outputFileName;
85+
/** Docker Platform. */
86+
private Property<String> platform;
8587
/** Reflection Config File. */
8688
private Property<String> reflectionConfig;
8789
/** Resource Configuration Files. */
@@ -102,6 +104,7 @@ public class GraalvmNativeExtension {
102104
public GraalvmNativeExtension(final ObjectFactory objects) {
103105
this.javaVersion = objects.property(String.class);
104106
this.imageVersion = objects.property(String.class);
107+
this.platform = objects.property(String.class);
105108
this.mainClassName = objects.property(String.class);
106109
this.reflectionConfig = objects.property(String.class);
107110
this.serializationConfig = objects.property(String.class);
@@ -235,6 +238,15 @@ public String getOutputFileName() {
235238
return this.outputFileName.getOrNull();
236239
}
237240

241+
/**
242+
* Returns the version of GraalVM Community Edition to download.
243+
*
244+
* @return The version of GraalVM Community Edition to download.
245+
*/
246+
public String getPlatform() {
247+
return this.platform.getOrNull();
248+
}
249+
238250
/**
239251
* Get Reflection Config File.
240252
*
@@ -686,6 +698,15 @@ public void setOutputFileName(final String name) {
686698
this.outputFileName.set(name);
687699
}
688700

701+
/**
702+
* Set Platform.
703+
*
704+
* @param targetPlatform {@link String}
705+
*/
706+
public void setPlatform(final String targetPlatform) {
707+
this.platform.set(targetPlatform);
708+
}
709+
689710
/**
690711
* Set Reflection Config File.
691712
*

src/main/java/com/formkiq/gradle/GraalvmNativeTask.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,8 @@ private String getArchitecture() {
126126
case "i386":
127127
arch = "386";
128128
break;
129-
case "x86_64":
130-
case "amd64":
131-
arch = "amd64";
132-
break;
133129
default:
130+
arch = "amd64";
134131
break;
135132
}
136133

src/main/java/com/formkiq/gradle/internal/DockerUtils.java

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
*/
1313
package com.formkiq.gradle.internal;
1414

15+
import static com.formkiq.gradle.internal.Strings.*;
1516
import java.io.ByteArrayOutputStream;
1617
import java.io.File;
1718
import java.io.IOException;
@@ -54,7 +55,7 @@ public boolean exec(final Project project, final String workingDir, final List<S
5455

5556
if (workingDir != null) {
5657
a.add("--workdir");
57-
a.add(workingDir);
58+
a.add(formatToUnix(workingDir));
5859
}
5960

6061
a.add(this.containerId);
@@ -108,17 +109,28 @@ public void execute(ExecSpec arg0) {
108109
* Pull Docker Image.
109110
*
110111
* @param project {@link Project}
112+
* @param extension {@link GraalvmNativeExtension}
111113
* @param imageVersion {@link String}
112114
* @param javaVersion {@link String}
113115
* @return boolean
114116
* @throws IOException IOException
115117
*/
116-
private boolean pullImage(final Project project, final String dockerImage) throws IOException {
118+
private boolean pullImage(final Project project, final GraalvmNativeExtension extension,
119+
final String dockerImage) throws IOException {
117120
ExecResult result = project.exec(new Action<ExecSpec>() {
118121
@Override
119122
public void execute(ExecSpec arg0) {
120123
arg0.setCommandLine("docker");
121-
arg0.args(Arrays.asList("pull", dockerImage));
124+
125+
List<String> args = new ArrayList<>();
126+
args.add("pull");
127+
if (extension.getPlatform() != null) {
128+
args.add("--platform");
129+
args.add(extension.getPlatform());
130+
}
131+
132+
args.add(dockerImage);
133+
arg0.args(args);
122134
}
123135
});
124136
project.getLogger().debug(result.toString());
@@ -138,7 +150,7 @@ public boolean startImage(final Project project, final GraalvmNativeExtension ex
138150
final List<File> classPaths) throws IOException {
139151

140152
String dockerImage = extension.getDockerImage();
141-
pullImage(project, dockerImage);
153+
pullImage(project, extension, dockerImage);
142154

143155
ByteArrayOutputStream so = new ByteArrayOutputStream();
144156

@@ -151,11 +163,17 @@ public void execute(ExecSpec arg0) {
151163

152164
List<String> args = new ArrayList<>(Arrays.asList("run", "-d"));
153165

154-
classPaths.forEach(cp -> args.addAll(Arrays.asList("-v", cp + ":" + cp)));
166+
if (extension.getPlatform() != null) {
167+
args.add("--platform");
168+
args.add(extension.getPlatform());
169+
}
170+
171+
classPaths.forEach(
172+
cp -> args.addAll(Arrays.asList("-v", formatToUnix(cp) + ":" + formatToUnix(cp))));
155173

156174
if (extension.getReflectionConfig() != null) {
157-
args.addAll(Arrays.asList("-v",
158-
extension.getReflectionConfig() + ":" + extension.getReflectionConfig()));
175+
args.addAll(Arrays.asList("-v", formatToUnix(extension.getReflectionConfig()) + ":"
176+
+ formatToUnix(extension.getReflectionConfig())));
159177
}
160178

161179
try {

src/main/java/com/formkiq/gradle/internal/NativeImageExecutor.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
*/
1313
package com.formkiq.gradle.internal;
1414

15+
import static com.formkiq.gradle.internal.Strings.*;
1516
import java.io.File;
1617
import java.io.IOException;
1718
import java.nio.file.Files;
@@ -93,7 +94,7 @@ private String buildClassPathString(final Project project) {
9394
files.add(Path.of(project.getBuildDir().getAbsolutePath(), GRAALVM_JAVA_MAIN).toFile());
9495
addClasspaths(files);
9596

96-
return files.stream().map(File::getAbsolutePath)
97+
return files.stream().map(File::getAbsolutePath).map(s -> formatToUnix(s))
9798
.collect(Collectors.joining(OperatingSystem.current().isWindows() ? ";" : ":"));
9899
}
99100

@@ -196,7 +197,8 @@ private List<String> getBuildGraalvmImageArguments(final Project project, final
196197

197198
String reflectConfig = this.extension.getReflectionConfig();
198199
if (reflectConfig != null) {
199-
addStringArgument(args, reflectConfig, "-H:ReflectionConfigurationFiles=" + reflectConfig);
200+
addStringArgument(args, reflectConfig,
201+
"-H:ReflectionConfigurationFiles=" + formatToUnix(reflectConfig));
200202
}
201203

202204
String serializationConfig = this.extension.getSerializationConfig();
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.formkiq.gradle.internal;
2+
3+
import java.io.File;
4+
import org.gradle.internal.os.OperatingSystem;
5+
6+
/**
7+
*
8+
* {@link String} utilities.
9+
*
10+
*/
11+
public class Strings {
12+
13+
/**
14+
* Format {@link File} in Unix format.
15+
*
16+
* @param file {@link File}
17+
* @return {@link String}
18+
*/
19+
public static String formatToUnix(final File file) {
20+
String path = file.getAbsolutePath();
21+
22+
return formatToUnix(path);
23+
}
24+
25+
/**
26+
* Format {@link String} in Unix format.
27+
*
28+
* @param path {@link String}
29+
* @return {@link String}
30+
*/
31+
public static String formatToUnix(final String path) {
32+
String s = path;
33+
if (OperatingSystem.current().isWindows()) {
34+
s = s.replace("\\", "/").replace(":", "");
35+
if (!s.startsWith("/")) {
36+
s = "/" + s;
37+
}
38+
}
39+
40+
return s;
41+
}
42+
}

0 commit comments

Comments
 (0)