From 78f71b3f6304887750154f2906ae533df75eaf7d Mon Sep 17 00:00:00 2001 From: Abdallah Rabie Date: Tue, 23 Jun 2026 10:04:02 +0300 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20correct=20pushed=20image=20logging?= =?UTF-8?q?=20for=20latest=20tag=20=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=E2=94=80=E2=95=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace image reference string formatting with toStringWithQualifier() for tagged images and avoid duplicate untagged entries in the success message. Add a test covering latest and additional tags in build success logs. --- .../jib/plugins/common/JibBuildRunner.java | 8 +++- .../plugins/common/JibBuildRunnerTest.java | 37 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunner.java b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunner.java index 867f0bd83a..89c36c7a99 100644 --- a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunner.java +++ b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunner.java @@ -74,8 +74,12 @@ private static String buildMessageWithTargetImageReferences( String suffix) { StringJoiner successMessageBuilder = new StringJoiner(", ", prefix, suffix); successMessageBuilder.add(colorCyan(targetImageReference.toString())); - for (String tag : additionalTags) { - successMessageBuilder.add(colorCyan(targetImageReference.withQualifier(tag).toString())); + for (String tag : additionalTags) { + if (tag.equals(targetImageReference.getQualifier())) { + continue; + } + successMessageBuilder.add( + colorCyan(targetImageReference.withQualifier(tag).toStringWithQualifier())); } return successMessageBuilder.toString(); } diff --git a/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunnerTest.java b/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunnerTest.java index 4b41447b55..020d23822f 100644 --- a/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunnerTest.java +++ b/jib-plugins-common/src/test/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunnerTest.java @@ -25,6 +25,7 @@ import com.google.cloud.tools.jib.api.InsecureRegistryException; import com.google.cloud.tools.jib.api.JibContainer; import com.google.cloud.tools.jib.api.JibContainerBuilder; +import com.google.cloud.tools.jib.api.LogEvent; import com.google.cloud.tools.jib.api.RegistryException; import com.google.cloud.tools.jib.api.RegistryUnauthorizedException; import com.google.cloud.tools.jib.registry.RegistryCredentialsNotSentException; @@ -34,6 +35,8 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import java.util.Set; import java.util.concurrent.ExecutionException; import org.apache.http.conn.HttpHostConnectException; @@ -226,6 +229,40 @@ public void testBuildImage_other() } } + @Test + public void testForBuildImage_successMessageIncludesLatestAndNoDuplicateUntaggedEntry() + throws Exception { + ImageReference targetImageReference = ImageReference.parse("repo/container"); + Set additionalTags = ImmutableSet.of("latest", "1.0.0-SNAPSHOT", "branch"); + List loggedEvents = new ArrayList<>(); + JibBuildRunner runner = + JibBuildRunner.forBuildImage( + mockJibContainerBuilder, + mockContainerizer, + loggedEvents::add, + TEST_HELPFUL_SUGGESTIONS, + targetImageReference, + additionalTags); + + Mockito.when(mockJibContainerBuilder.containerize(mockContainerizer)) + .thenReturn(mockJibContainer); + + runner.runBuild(); + + String successMessage = + loggedEvents.stream() + .map(LogEvent::getMessage) + .filter(message -> message.contains("Built and pushed")) + .findFirst() + .orElseThrow(AssertionError::new); + + Assert.assertTrue(successMessage.contains("repo/container:latest")); + Assert.assertTrue(successMessage.contains("repo/container:1.0.0-SNAPSHOT")); + Assert.assertTrue(successMessage.contains("repo/container:branch")); + long occurrences = successMessage.split("repo/container", -1).length - 1L; + Assert.assertEquals(3, occurrences); + } + @Test public void testBuildImage_writesImageJson() throws Exception { final ImageReference targetImageReference = ImageReference.parse("gcr.io/distroless/java:11"); From 7dbae688c1c5d80d6e852c899114df7a62af567c Mon Sep 17 00:00:00 2001 From: Abdallah Rabie Date: Thu, 25 Jun 2026 19:00:54 +0300 Subject: [PATCH 2/2] fix: address code review feedback on image tag logging Use toStringWithQualifier() for the base image reference so the ':latest' tag is shown explicitly in the success message, reverse null-safe equality check for additional tag deduplication, and fix indentation on the for loop. --- .../cloud/tools/jib/plugins/common/JibBuildRunner.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunner.java b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunner.java index 89c36c7a99..ff18fbdd2f 100644 --- a/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunner.java +++ b/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/JibBuildRunner.java @@ -73,9 +73,9 @@ private static String buildMessageWithTargetImageReferences( String prefix, String suffix) { StringJoiner successMessageBuilder = new StringJoiner(", ", prefix, suffix); - successMessageBuilder.add(colorCyan(targetImageReference.toString())); - for (String tag : additionalTags) { - if (tag.equals(targetImageReference.getQualifier())) { + successMessageBuilder.add(colorCyan(targetImageReference.toStringWithQualifier())); + for (String tag : additionalTags) { + if (targetImageReference.getQualifier().equals(tag)) { continue; } successMessageBuilder.add(