Skip to content

Commit 1008858

Browse files
committed
Change GraalVM native-image runtime
1 parent 12d81ef commit 1008858

File tree

11 files changed

+36
-29
lines changed

11 files changed

+36
-29
lines changed

Diff for: compiler-plugin-tests/src/test/java/io/ballerina/c2c/test/docker/DockerGeneratorTests.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ public void buildNativeTestDockerImageTest() throws IOException {
229229
Files.createDirectories(outputDir);
230230
String defaultBuilderCmd = "native-image -jar " +
231231
dockerModel.getFatJarPath().getFileName().toString() +
232-
" -H:Name=hello --no-fallback -H:+StaticExecutableWithDynamicLibC";
232+
" -o hello --no-fallback -H:+StaticExecutableWithDynamicLibC";
233233
dockerModel.setBuilderCmd(defaultBuilderCmd);
234234

235235
boolean passed = false;
@@ -245,7 +245,7 @@ public void buildNativeTestDockerImageTest() throws IOException {
245245
Assert.assertTrue(dockerFileContent.contains(copyJar));
246246
String copyReflectJson = "COPY reflect-config.json .";
247247
Assert.assertTrue(dockerFileContent.contains(copyReflectJson));
248-
String nativeImageCMD = "RUN native-image -jar hello.jar -H:Name=hello --no-fallback " +
248+
String nativeImageCMD = "RUN native-image -jar hello.jar -o hello --no-fallback " +
249249
"-H:+StaticExecutableWithDynamicLibC " +
250250
"-H:IncludeResources=excludedClasses.txt " +
251251
"-H:IncludeResources=cache/tests_cache/test_suit.json " +

Diff for: compiler-plugin-tests/src/test/java/io/ballerina/c2c/test/samples/NativeArgsTest.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
package io.ballerina.c2c.test.samples;
2020

21+
import io.ballerina.c2c.DockerGenConstants;
2122
import io.ballerina.c2c.exceptions.KubernetesPluginException;
2223
import io.ballerina.c2c.test.utils.KubernetesTestUtils;
2324
import io.ballerina.c2c.utils.KubernetesUtils;
@@ -44,26 +45,27 @@ public class NativeArgsTest {
4445
private static final Path SOURCE_DIR_PATH = SAMPLE_DIR.resolve("graalvm-build-args");
4546
private static final Path DOCKER_TARGET_PATH =
4647
SOURCE_DIR_PATH.resolve("target").resolve(DOCKER).resolve("native_args");
48+
4749
@Test
4850
public void validateDockerBuildOption() throws IOException, InterruptedException, KubernetesPluginException {
4951
Assert.assertEquals(KubernetesTestUtils.compileBallerinaProject(SOURCE_DIR_PATH), 0);
5052
File dockerFile = DOCKER_TARGET_PATH.resolve("Dockerfile").toFile();
5153
String content = Files.readString(dockerFile.toPath(), StandardCharsets.UTF_8);
5254
Assert.assertTrue(dockerFile.exists());
5355
Assert.assertTrue(content.contains("RUN native-image --gc=epsilon -jar native_args.jar " +
54-
"-H:Name=native_args --no-fallback -H:+StaticExecutableWithDynamicLibC"));
55-
Assert.assertTrue(content.contains("FROM gcr.io/distroless/base"));
56+
"-o native_args --no-fallback -H:+StaticExecutableWithDynamicLibC"));
57+
Assert.assertTrue(content.contains("FROM " + DockerGenConstants.NATIVE_BUILDER_IMAGE));
5658
KubernetesUtils.deleteDirectory(DOCKER_TARGET_PATH);
5759
}
5860

59-
@Test(dependsOnMethods = { "validateDockerBuildOption" })
61+
@Test(dependsOnMethods = {"validateDockerBuildOption"})
6062
public void validateK8sBuildOption() throws IOException, InterruptedException, KubernetesPluginException {
6163
Assert.assertEquals(KubernetesTestUtils.compileBallerinaProject(SOURCE_DIR_PATH, "k8s"), 0);
6264
File dockerFile = DOCKER_TARGET_PATH.resolve("Dockerfile").toFile();
6365
String content = Files.readString(dockerFile.toPath(), StandardCharsets.UTF_8);
6466
Assert.assertTrue(dockerFile.exists());
6567
Assert.assertTrue(content.contains("RUN native-image --gc=epsilon -jar native_args.jar " +
66-
"-H:Name=native_args --no-fallback -H:+StaticExecutableWithDynamicLibC"));
68+
"-o native_args --no-fallback -H:+StaticExecutableWithDynamicLibC"));
6769
KubernetesUtils.deleteDirectory(DOCKER_TARGET_PATH);
6870
}
6971
}

Diff for: compiler-plugin-tests/src/test/java/io/ballerina/c2c/test/samples/NativeBaseTest.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
package io.ballerina.c2c.test.samples;
2020

21+
import io.ballerina.c2c.DockerGenConstants;
2122
import io.ballerina.c2c.exceptions.KubernetesPluginException;
2223
import io.ballerina.c2c.test.utils.KubernetesTestUtils;
2324
import io.ballerina.c2c.utils.KubernetesUtils;
@@ -52,7 +53,7 @@ public void validateCustomBaseImage() throws IOException, InterruptedException,
5253
String content = Files.readString(dockerFile.toPath(), StandardCharsets.UTF_8);
5354
Assert.assertTrue(dockerFile.exists());
5455
Assert.assertTrue(content.contains("FROM alpine"));
55-
Assert.assertTrue(content.contains("FROM ghcr.io/graalvm/native-image-community:21-ol9 as build"));
56+
Assert.assertTrue(content.contains("FROM " + DockerGenConstants.NATIVE_BUILDER_IMAGE + " as build"));
5657
KubernetesUtils.deleteDirectory(DOCKER_TARGET_PATH);
5758
}
5859
}

Diff for: compiler-plugin-tests/src/test/java/io/ballerina/c2c/test/samples/NativeBuilderConfigTest.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
package io.ballerina.c2c.test.samples;
2020

21+
import io.ballerina.c2c.DockerGenConstants;
2122
import io.ballerina.c2c.exceptions.KubernetesPluginException;
2223
import io.ballerina.c2c.test.utils.KubernetesTestUtils;
2324
import io.ballerina.c2c.utils.KubernetesUtils;
@@ -44,29 +45,30 @@ public class NativeBuilderConfigTest {
4445
private static final Path SOURCE_DIR_PATH = SAMPLE_DIR.resolve("graalvm-custom-builder");
4546
private static final Path DOCKER_TARGET_PATH =
4647
SOURCE_DIR_PATH.resolve("target").resolve(DOCKER).resolve("custom_builder");
48+
4749
@Test
4850
public void validateDockerBuildOption() throws IOException, InterruptedException, KubernetesPluginException {
4951
Assert.assertEquals(KubernetesTestUtils.compileBallerinaProject(SOURCE_DIR_PATH), 0);
5052
File dockerFile = DOCKER_TARGET_PATH.resolve("Dockerfile").toFile();
5153
String content = Files.readString(dockerFile.toPath(), StandardCharsets.UTF_8);
5254
Assert.assertTrue(dockerFile.exists());
53-
Assert.assertTrue(content.contains("RUN native-image -jar custom_builder.jar -H:Name=custom_builder " +
55+
Assert.assertTrue(content.contains("RUN native-image -jar custom_builder.jar -o custom_builder " +
5456
"--no-fallback --static --libc=musl"));
5557
Assert.assertTrue(content.contains("FROM ghcr.io/graalvm/native-image-community:21-muslib-ol9 as build"));
56-
Assert.assertTrue(content.contains("FROM gcr.io/distroless/base"));
58+
Assert.assertTrue(content.contains("FROM " + DockerGenConstants.NATIVE_RUNTIME_BASE_IMAGE));
5759
KubernetesUtils.deleteDirectory(DOCKER_TARGET_PATH);
5860
}
5961

60-
@Test(dependsOnMethods = { "validateDockerBuildOption" })
62+
@Test(dependsOnMethods = {"validateDockerBuildOption"})
6163
public void validateK8sBuildOption() throws IOException, InterruptedException, KubernetesPluginException {
6264
Assert.assertEquals(KubernetesTestUtils.compileBallerinaProject(SOURCE_DIR_PATH, "k8s"), 0);
6365
File dockerFile = DOCKER_TARGET_PATH.resolve("Dockerfile").toFile();
6466
String content = Files.readString(dockerFile.toPath(), StandardCharsets.UTF_8);
6567
Assert.assertTrue(dockerFile.exists());
66-
Assert.assertTrue(content.contains("RUN native-image -jar custom_builder.jar -H:Name=custom_builder " +
68+
Assert.assertTrue(content.contains("RUN native-image -jar custom_builder.jar -o custom_builder " +
6769
"--no-fallback --static --libc=musl"));
6870
Assert.assertTrue(content.contains("FROM ghcr.io/graalvm/native-image-community:21-muslib-ol9 as build"));
69-
Assert.assertTrue(content.contains("FROM gcr.io/distroless/base"));
71+
Assert.assertTrue(content.contains("FROM " + DockerGenConstants.NATIVE_RUNTIME_BASE_IMAGE));
7072
KubernetesUtils.deleteDirectory(DOCKER_TARGET_PATH);
7173
}
7274
}

Diff for: compiler-plugin-tests/src/test/java/io/ballerina/c2c/test/samples/NativeImplicitArgsTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void validateDockerBuildOption() throws IOException, InterruptedException
5151
String content = Files.readString(dockerFile.toPath(), StandardCharsets.UTF_8);
5252
Assert.assertTrue(dockerFile.exists());
5353
Assert.assertTrue(content.contains("RUN native-image --static --libc=musl -jar impl_args.jar " +
54-
"-H:Name=impl_args --no-fallback"));
54+
"-o impl_args --no-fallback"));
5555
Assert.assertTrue(content.contains("FROM alpine"));
5656
Assert.assertFalse(content.contains("-H:+StaticExecutableWithDynamicLibC"));
5757
KubernetesUtils.deleteDirectory(DOCKER_TARGET_PATH);
@@ -64,7 +64,7 @@ public void validateK8sBuildOption() throws IOException, InterruptedException, K
6464
String content = Files.readString(dockerFile.toPath(), StandardCharsets.UTF_8);
6565
Assert.assertTrue(dockerFile.exists());
6666
Assert.assertTrue(content.contains("RUN native-image --static --libc=musl -jar impl_args.jar " +
67-
"-H:Name=impl_args --no-fallback"));
67+
"-o impl_args --no-fallback"));
6868
Assert.assertFalse(content.contains("-H:+StaticExecutableWithDynamicLibC"));
6969

7070
KubernetesUtils.deleteDirectory(DOCKER_TARGET_PATH);

Diff for: compiler-plugin-tests/src/test/java/io/ballerina/c2c/test/samples/NativeJobTest.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package io.ballerina.c2c.test.samples;
2020

2121
import com.github.dockerjava.api.command.InspectImageResponse;
22+
import io.ballerina.c2c.DockerGenConstants;
2223
import io.ballerina.c2c.KubernetesConstants;
2324
import io.ballerina.c2c.exceptions.KubernetesPluginException;
2425
import io.ballerina.c2c.test.utils.KubernetesTestUtils;
@@ -69,10 +70,10 @@ public void validateDockerfile() throws IOException {
6970
File dockerFile = DOCKER_TARGET_PATH.resolve("Dockerfile").toFile();
7071
Assert.assertTrue(dockerFile.exists());
7172
String content = Files.readString(dockerFile.toPath(), StandardCharsets.UTF_8);
72-
Assert.assertTrue(content.contains("RUN native-image -jar hello.jar -H:Name=hello --no-fallback " +
73+
Assert.assertTrue(content.contains("RUN native-image -jar hello.jar -o hello --no-fallback " +
7374
"-H:+StaticExecutableWithDynamicLibC"));
74-
Assert.assertTrue(content.contains("FROM ghcr.io/graalvm/native-image-community:21-ol9 as build"));
75-
Assert.assertTrue(content.contains("FROM gcr.io/distroless/base"));
75+
Assert.assertTrue(content.contains("FROM " + DockerGenConstants.NATIVE_BUILDER_IMAGE + " as build"));
76+
Assert.assertTrue(content.contains("FROM " + DockerGenConstants.NATIVE_RUNTIME_BASE_IMAGE));
7677
}
7778

7879
@Test

Diff for: compiler-plugin-tests/src/test/java/io/ballerina/c2c/test/samples/NativeTest.java

+9-8
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
package io.ballerina.c2c.test.samples;
2020

21+
import io.ballerina.c2c.DockerGenConstants;
2122
import io.ballerina.c2c.KubernetesConstants;
2223
import io.ballerina.c2c.exceptions.KubernetesPluginException;
2324
import io.ballerina.c2c.test.utils.KubernetesTestUtils;
@@ -101,7 +102,7 @@ public void validateDeployment() {
101102
Assert.assertEquals(deployment.getSpec().getTemplate().getSpec().getContainers().size(), 1);
102103

103104
// Assert Containers
104-
Container container = deployment.getSpec().getTemplate().getSpec().getContainers().get(0);
105+
Container container = deployment.getSpec().getTemplate().getSpec().getContainers().getFirst();
105106
Assert.assertEquals(container.getImage(), DOCKER_IMAGE);
106107
Assert.assertEquals(container.getPorts().size(), 1);
107108
}
@@ -113,21 +114,21 @@ public void validateService() {
113114
Assert.assertEquals("hello-svc", service.getMetadata().getName());
114115
Assert.assertEquals("ClusterIP", service.getSpec().getType());
115116
Assert.assertEquals(1, service.getSpec().getPorts().size());
116-
Assert.assertEquals(9090, service.getSpec().getPorts().get(0).getPort().intValue());
117-
Assert.assertEquals(9090, service.getSpec().getPorts().get(0).getTargetPort().getIntVal().intValue());
118-
Assert.assertEquals("TCP", service.getSpec().getPorts().get(0).getProtocol());
119-
Assert.assertEquals("port-1-hello-sv", service.getSpec().getPorts().get(0).getName());
117+
Assert.assertEquals(9090, service.getSpec().getPorts().getFirst().getPort().intValue());
118+
Assert.assertEquals(9090, service.getSpec().getPorts().getFirst().getTargetPort().getIntVal().intValue());
119+
Assert.assertEquals("TCP", service.getSpec().getPorts().getFirst().getProtocol());
120+
Assert.assertEquals("port-1-hello-sv", service.getSpec().getPorts().getFirst().getName());
120121
}
121122

122123
@Test
123124
public void validateDockerfile() throws IOException {
124125
File dockerFile = DOCKER_TARGET_PATH.resolve("Dockerfile").toFile();
125126
Assert.assertTrue(dockerFile.exists());
126127
String content = Files.readString(dockerFile.toPath(), StandardCharsets.UTF_8);
127-
Assert.assertTrue(content.contains("RUN native-image -jar hello.jar -H:Name=hello --no-fallback " +
128+
Assert.assertTrue(content.contains("RUN native-image -jar hello.jar -o hello --no-fallback " +
128129
"-H:+StaticExecutableWithDynamicLibC"));
129-
Assert.assertTrue(content.contains("FROM ghcr.io/graalvm/native-image-community:21-ol9 as build"));
130-
Assert.assertTrue(content.contains("FROM gcr.io/distroless/base"));
130+
Assert.assertTrue(content.contains("FROM " + DockerGenConstants.NATIVE_BUILDER_IMAGE + " as build"));
131+
Assert.assertTrue(content.contains("FROM " + DockerGenConstants.NATIVE_RUNTIME_BASE_IMAGE));
131132
}
132133

133134
@Test

Diff for: compiler-plugin/src/main/java/io/ballerina/c2c/DockerGenConstants.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class DockerGenConstants {
2828
public static final String TAG_SEPARATOR = ":";
2929
public static final String JRE_SLIM_BASE = "ballerina/jvm-runtime:3.0";
3030
public static final String NATIVE_BUILDER_IMAGE = "ghcr.io/graalvm/native-image-community:21-ol9";
31-
public static final String NATIVE_RUNTIME_BASE_IMAGE = "gcr.io/distroless/base";
31+
public static final String NATIVE_RUNTIME_BASE_IMAGE = "gcr.io/distroless/cc";
3232
public static final int MAX_BALLERINA_LAYERS = 110;
3333

3434
public static final String SCHEMA_FILE_NAME = "c2c-schema.json";

Diff for: compiler-plugin/src/main/java/io/ballerina/c2c/utils/KubernetesUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ public static void resolveDockerToml(KubernetesModel model) throws KubernetesPlu
283283
if (!dockerModel.getGraalvmBuildArgs().equals("")) {
284284
defaultBuilderCmd.append(dockerModel.getGraalvmBuildArgs()).append(" ");
285285
}
286-
defaultBuilderCmd.append("-jar ").append(fatJarFileName).append(" -H:Name=")
286+
defaultBuilderCmd.append("-jar ").append(fatJarFileName).append(" -o ")
287287
.append(executableName).append(" --no-fallback");
288288

289289
//Avoid adding mostly static flag if --static flag is given

Diff for: docker-images/native-builder/build-native.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ native-image \
1818
${3:+$(echo " $3")} \
1919
-jar "$1" \
2020
--no-fallback \
21-
-H:Name="${2}"
21+
-o "${2}"

Diff for: examples/graalvm-custom-builder/Cloud.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ buildImage = false
88

99
[graalvm.builder]
1010
base = "ghcr.io/graalvm/native-image-community:21-muslib-ol9"
11-
buildCmd = "native-image -jar custom_builder.jar -H:Name=custom_builder --no-fallback --static --libc=musl"
11+
buildCmd = "native-image -jar custom_builder.jar -o custom_builder --no-fallback --static --libc=musl"

0 commit comments

Comments
 (0)