diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImage.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImage.java index 98055f5c360..f0a2751b887 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImage.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImage.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -99,6 +99,7 @@ public abstract class BootBuildImage extends DefaultTask { this.launchCache = getProject().getObjects().newInstance(CacheSpec.class); this.docker = getProject().getObjects().newInstance(DockerSpec.class); this.pullPolicy = getProject().getObjects().property(PullPolicy.class); + getSecurityOptions().convention((Iterable) null); } /** @@ -464,9 +465,11 @@ public abstract class BootBuildImage extends DefaultTask { } private BuildRequest customizeSecurityOptions(BuildRequest request) { - List securityOptions = getSecurityOptions().getOrNull(); - if (securityOptions != null) { - return request.withSecurityOptions(securityOptions); + if (getSecurityOptions().isPresent()) { + List securityOptions = getSecurityOptions().getOrNull(); + if (securityOptions != null) { + return request.withSecurityOptions(securityOptions); + } } return request; } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageTests.java index 33dac8a784e..c5ef89486d6 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ package org.springframework.boot.gradle.tasks.bundling; import java.io.File; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -294,4 +295,23 @@ class BootBuildImageTests { ImageReference.of("example.com/my-app:0.0.1-SNAPSHOT"), ImageReference.of("example.com/my-app:latest")); } + @Test + void whenSecurityOptionsAreNotConfiguredThenRequestHasNoSecurityOptions() { + assertThat(this.buildImage.createRequest().getSecurityOptions()).isNull(); + } + + @Test + void whenSecurityOptionsAreEmptyThenRequestHasEmptySecurityOptions() { + this.buildImage.getSecurityOptions().set(Collections.emptyList()); + assertThat(this.buildImage.createRequest().getSecurityOptions()).isEmpty(); + } + + @Test + void whenSecurityOptionsAreConfiguredThenRequestHasSecurityOptions() { + this.buildImage.getSecurityOptions().add("label=user:USER"); + this.buildImage.getSecurityOptions().add("label=role:ROLE"); + assertThat(this.buildImage.createRequest().getSecurityOptions()).containsExactly("label=user:USER", + "label=role:ROLE"); + } + } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ImageTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ImageTests.java index 1ec018db860..5d0aa9b86a5 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ImageTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ImageTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -235,6 +235,13 @@ class ImageTests { assertThat(request.getApplicationDirectory()).isEqualTo("/application"); } + @Test + void getBuildRequestWhenHasNoSecurityOptionsUsesNoSecurityOptions() { + Image image = new Image(); + BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent()); + assertThat(request.getSecurityOptions()).isNull(); + } + @Test void getBuildRequestWhenHasSecurityOptionsUsesSecurityOptions() { Image image = new Image();