Skip to content

Commit

Permalink
Support lazy configuration for jvmFlags property of ContainerParameters
Browse files Browse the repository at this point in the history
  • Loading branch information
erdi committed Feb 22, 2023
1 parent 93efe6d commit a516384
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import javax.annotation.Nullable;
import javax.inject.Inject;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.MapProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.tasks.Input;
Expand All @@ -37,7 +38,7 @@
*/
public class ContainerParameters {

private List<String> jvmFlags = Collections.emptyList();
private final ListProperty<String> jvmFlags;
private Map<String, String> environment = Collections.emptyMap();
@Nullable private List<String> entrypoint;
private List<String> extraClasspath = Collections.emptyList();
Expand All @@ -60,6 +61,7 @@ public ContainerParameters(ObjectFactory objectFactory) {
filesModificationTime = objectFactory.property(String.class).convention("EPOCH_PLUS_SECOND");
creationTime = objectFactory.property(String.class).convention("EPOCH");
mainClass = objectFactory.property(String.class);
jvmFlags = objectFactory.listProperty(String.class).convention(Collections.emptyList());
}

@Input
Expand All @@ -83,18 +85,18 @@ public void setEntrypoint(String entrypoint) {

@Input
@Optional
public List<String> getJvmFlags() {
if (System.getProperty(PropertyNames.CONTAINER_JVM_FLAGS) != null) {
return ConfigurationPropertyValidator.parseListProperty(
System.getProperty(PropertyNames.CONTAINER_JVM_FLAGS));
public ListProperty<String> getJvmFlags() {
String jvmFlagsSystemProperty = System.getProperty(PropertyNames.CONTAINER_JVM_FLAGS);
if (jvmFlagsSystemProperty != null) {
List<String> parsedJvmFlags =
ConfigurationPropertyValidator.parseListProperty(jvmFlagsSystemProperty);
if (!parsedJvmFlags.equals(jvmFlags.get())) {
jvmFlags.set(parsedJvmFlags);
}
}
return jvmFlags;
}

public void setJvmFlags(List<String> jvmFlags) {
this.jvmFlags = jvmFlags;
}

@Input
@Optional
public Map<String, String> getEnvironment() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public Optional<String> getMainClass() {

@Override
public List<String> getJvmFlags() {
return jibExtension.getContainer().getJvmFlags();
return jibExtension.getContainer().getJvmFlags().get();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.HashMap;
import java.util.HashSet;
import java.util.Optional;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.MapProperty;
import org.gradle.api.provider.Property;
import org.junit.Assert;
Expand All @@ -40,6 +41,7 @@ public class GradleRawConfigurationTest {

@Mock private MapProperty<String, String> labels;
@Mock private Property<String> mainClass;
@Mock private ListProperty<String> jvmFlags;

@Test
public void testGetters() {
Expand Down Expand Up @@ -88,7 +90,8 @@ public void testGetters() {
Mockito.when(containerParameters.getEntrypoint()).thenReturn(Arrays.asList("java", "Main"));
Mockito.when(containerParameters.getEnvironment())
.thenReturn(new HashMap<>(ImmutableMap.of("currency", "dollar")));
Mockito.when(containerParameters.getJvmFlags()).thenReturn(Arrays.asList("-cp", "."));
Mockito.when(jvmFlags.get()).thenReturn(Arrays.asList("-cp", "."));
Mockito.when(containerParameters.getJvmFlags()).thenReturn(jvmFlags);
Mockito.when(labels.get()).thenReturn(Collections.singletonMap("unit", "cm"));
Mockito.when(containerParameters.getLabels()).thenReturn(labels);
Mockito.when(mainClass.getOrNull()).thenReturn("com.example.Main");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ public void testToTags_containsEmptyTag() {

@Test
public void testContainer() {
assertThat(testJibExtension.getContainer().getJvmFlags()).isEmpty();
assertThat(testJibExtension.getContainer().getJvmFlags().get()).isEmpty();
assertThat(testJibExtension.getContainer().getEnvironment()).isEmpty();
assertThat(testJibExtension.getContainer().getExtraClasspath()).isEmpty();
assertThat(testJibExtension.getContainer().getExpandClasspathDependencies()).isFalse();
Expand All @@ -191,7 +191,7 @@ public void testContainer() {

testJibExtension.container(
container -> {
container.setJvmFlags(Arrays.asList("jvmFlag1", "jvmFlag2"));
container.getJvmFlags().set(Arrays.asList("jvmFlag1", "jvmFlag2"));
container.setEnvironment(ImmutableMap.of("var1", "value1", "var2", "value2"));
container.setEntrypoint(Arrays.asList("foo", "bar", "baz"));
container.setExtraClasspath(Arrays.asList("/d1", "/d2", "/d3"));
Expand All @@ -206,7 +206,7 @@ public void testContainer() {
});
ContainerParameters container = testJibExtension.getContainer();
assertThat(container.getEntrypoint()).containsExactly("foo", "bar", "baz").inOrder();
assertThat(container.getJvmFlags()).containsExactly("jvmFlag1", "jvmFlag2").inOrder();
assertThat(container.getJvmFlags().get()).containsExactly("jvmFlag1", "jvmFlag2").inOrder();
assertThat(container.getEnvironment())
.containsExactly("var1", "value1", "var2", "value2")
.inOrder();
Expand Down Expand Up @@ -477,7 +477,7 @@ public void testProperties() {
System.setProperty("jib.container.format", "OCI");
assertThat(testJibExtension.getContainer().getFormat()).isSameInstanceAs(ImageFormat.OCI);
System.setProperty("jib.container.jvmFlags", "flag1,flag2,flag3");
assertThat(testJibExtension.getContainer().getJvmFlags())
assertThat(testJibExtension.getContainer().getJvmFlags().get())
.containsExactly("flag1", "flag2", "flag3")
.inOrder();
System.setProperty("jib.container.labels", "label1=val1,label2=val2");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,12 @@ public void testLazyEvalForMainClass() {
assertThat(showLabels.getOutput()).contains("mainClass value updated");
}

@Test
public void testLazyEvalForJvmFlags() {
BuildResult showLabels = testProject.build("showJvmFlags");
assertThat(showLabels.getOutput()).contains("jvmFlags value [updated]");
}

private Project createProject(String... plugins) {
Project project =
ProjectBuilder.builder().withProjectDir(testProjectRoot.getRoot()).withName("root").build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ jib {
creationTime = project.provider { project.ext.jibCreationTime }
filesModificationTime = project.provider { project.ext.jibFilesModificationTime }
mainClass = project.provider { project.ext.value }
jvmFlags = project.provider { [project.ext.value] }
}
extraDirectories {
paths = project.provider { ['src/main/' + project.ext.value + '-custom-extra-dir'] }
Expand Down Expand Up @@ -70,3 +71,8 @@ tasks.register('showMainClass') {
String prop = project.extensions.jib.container.mainClass.get()
println('mainClass value ' + prop)
}

tasks.register('showJvmFlags') {
List<String> prop = project.extensions.jib.container.jvmFlags.get()
println('jvmFlags value ' + prop)
}

0 comments on commit a516384

Please sign in to comment.