Set Spring Boot version in ephemeral builder

This commit adds a `createdBy` structure to the metadata of the ephemeral
builder container image that identifies Spring Boot as the creator of the
image, along with the Spring Boot version.

See gh-20126
This commit is contained in:
Scott Frederick
2020-02-11 16:26:00 -06:00
parent 97af0b2f3a
commit 191dce3f5e
12 changed files with 297 additions and 57 deletions

View File

@@ -42,6 +42,7 @@ import static org.assertj.core.api.Assertions.entry;
* Tests for {@link BuildRequest}.
*
* @author Phillip Webb
* @author Scott Frederick
*/
public class BuildRequestTests {
@@ -97,6 +98,16 @@ public class BuildRequestTests {
assertThat(request.getBuilder().toString()).isEqualTo("docker.io/spring/builder:latest");
}
@Test
void withCreatorUpdatesCreator() throws IOException {
BuildRequest request = BuildRequest.forJarFile(writeTestJarFile("my-app-0.0.1.jar"));
BuildRequest withCreator = request.withCreator(Creator.withVersion("1.0.0"));
assertThat(request.getCreator().getName()).isEqualTo("Spring Boot");
assertThat(request.getCreator().getVersion()).isEqualTo("");
assertThat(withCreator.getCreator().getName()).isEqualTo("Spring Boot");
assertThat(withCreator.getCreator().getVersion()).isEqualTo("1.0.0");
}
@Test
void withEnvAddsEnvEntry() throws IOException {
BuildRequest request = BuildRequest.forJarFile(writeTestJarFile("my-app-0.0.1.jar"));

View File

@@ -62,6 +62,8 @@ class EphemeralBuilderTests extends AbstractJsonTests {
private Map<String, String> env;
private Creator creator = Creator.withVersion("dev");
@BeforeEach
void setup() throws Exception {
this.image = Image.of(getContent("image.json"));
@@ -71,23 +73,24 @@ class EphemeralBuilderTests extends AbstractJsonTests {
@Test
void getNameHasRandomName() throws Exception {
EphemeralBuilder b1 = new EphemeralBuilder(this.owner, this.image, this.metadata, this.env);
EphemeralBuilder b2 = new EphemeralBuilder(this.owner, this.image, this.metadata, this.env);
EphemeralBuilder b1 = new EphemeralBuilder(this.owner, this.image, this.metadata, this.creator, this.env);
EphemeralBuilder b2 = new EphemeralBuilder(this.owner, this.image, this.metadata, this.creator, this.env);
assertThat(b1.getName().toString()).startsWith("pack.local/builder/").endsWith(":latest");
assertThat(b1.getName().toString()).isNotEqualTo(b2.getName().toString());
}
@Test
void getArchiveHasCreatedByConfig() throws Exception {
EphemeralBuilder builder = new EphemeralBuilder(this.owner, this.image, this.metadata, this.env);
EphemeralBuilder builder = new EphemeralBuilder(this.owner, this.image, this.metadata, this.creator, this.env);
ImageConfig config = builder.getArchive().getImageConfig();
BuilderMetadata ephemeralMetadata = BuilderMetadata.fromImageConfig(config);
assertThat(ephemeralMetadata.getCreatedBy().getName()).isEqualTo("Spring Boot");
assertThat(ephemeralMetadata.getCreatedBy().getVersion()).isEqualTo("dev");
}
@Test
void getArchiveHasTag() throws Exception {
EphemeralBuilder builder = new EphemeralBuilder(this.owner, this.image, this.metadata, this.env);
EphemeralBuilder builder = new EphemeralBuilder(this.owner, this.image, this.metadata, this.creator, this.env);
ImageReference tag = builder.getArchive().getTag();
assertThat(tag.toString()).startsWith("pack.local/builder/").endsWith(":latest");
}
@@ -95,13 +98,14 @@ class EphemeralBuilderTests extends AbstractJsonTests {
@Test
void getArchiveHasCreateDate() throws Exception {
Clock clock = Clock.fixed(Instant.now(), ZoneOffset.UTC);
EphemeralBuilder builder = new EphemeralBuilder(clock, this.owner, this.image, this.metadata, this.env);
EphemeralBuilder builder = new EphemeralBuilder(clock, this.owner, this.image, this.metadata, this.creator,
this.env);
assertThat(builder.getArchive().getCreateDate()).isEqualTo(Instant.now(clock));
}
@Test
void getArchiveContainsEnvLayer() throws Exception {
EphemeralBuilder builder = new EphemeralBuilder(this.owner, this.image, this.metadata, this.env);
EphemeralBuilder builder = new EphemeralBuilder(this.owner, this.image, this.metadata, this.creator, this.env);
File folder = unpack(getLayer(builder.getArchive(), 0), "env");
assertThat(new File(folder, "platform/env/spring")).usingCharset(StandardCharsets.UTF_8).hasContent("boot");
}