Skip to content

Commit 6cb38eb

Browse files
committed
[Issue#1392] fixed multi stage build failures
1 parent edce308 commit 6cb38eb

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

src/main/scala/com/typesafe/sbt/packager/docker/DockerPlugin.scala

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,12 @@ object DockerPlugin extends AutoPlugin {
578578
* @return Dockerfile
579579
*/
580580
private[this] final def generateDockerConfig(commands: Seq[CmdLike], target: File): File = {
581-
val dockerContent = makeDockerContent(commands)
581+
val (labelCommands, remaining) = commands.partition {
582+
case cmd: Cmd => cmd.cmd.trim.toUpperCase == "LABEL"
583+
case _ => false
584+
}
585+
586+
val dockerContent = makeDockerContent(remaining ++ labelCommands)
582587

583588
val f = target / "Dockerfile"
584589
IO.write(f, dockerContent)
@@ -658,6 +663,7 @@ object DockerPlugin extends AutoPlugin {
658663
.map(_ => publishLocalBuildkitLogger(log))
659664
.getOrElse(publishLocalLogger(log))
660665
val ret = sys.process.Process(buildCommand, context) ! logger
666+
val execPruneImg: String => Seq[String] = label => execCommand ++ s"image prune -f --filter label=$label".split(" ")
661667

662668
if (removeIntermediateImages) {
663669
val labelKey = "snp-multi-stage-id"
@@ -670,11 +676,13 @@ object DockerPlugin extends AutoPlugin {
670676
// No matter if the build process succeeded or failed, we try to remove the intermediate images
671677
case Some(id) =>
672678
val label = s"${labelKey}=${id}"
673-
log.info(s"""Removing intermediate image(s) (labeled "${label}") """)
674-
val retImageClean =
675-
sys.process.Process(execCommand ++ s"image prune -f --filter label=${label}".split(" ")) ! logger
679+
val label2 = s"snp-multi-stage=intermediate"
680+
log.info(s"""Removing intermediate image(s) (labeled "$label" and "$label2") """)
681+
val multiStageIdCleanResponse = sys.process.Process(execPruneImg(label)) ! logger
682+
val multiStageCleanResponse = sys.process.Process(execPruneImg(label2)) ! logger
683+
676684
// FYI: "docker image prune" returns 0 (success) no matter if images were removed or not
677-
if (retImageClean != 0)
685+
if (multiStageIdCleanResponse != 0 || multiStageCleanResponse != 0)
678686
log.error(
679687
"Something went wrong while removing multi-stage intermediate image(s)"
680688
) // no exception, just let the user know

0 commit comments

Comments
 (0)