Skip to content

Commit 625b93c

Browse files
authored
Add support for docker:publish in DockerSpotifyClientPlugin (#1338)
This adds support for pushing built tags in DockerSpotifyClientPlugin. Additionally, this introduces a small refactoring to extract the definition of the ProgressHandler, used by both building and pushing tasks to log progress.
1 parent d345b4d commit 625b93c

1 file changed

Lines changed: 29 additions & 7 deletions

File tree

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

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ object DockerSpotifyClientPlugin extends AutoPlugin {
5555
def clientSettings =
5656
Seq(
5757
publishLocal := publishLocalDocker.value,
58+
publish := publishDocker.value,
5859
dockerVersion := dockerServerVersion.value,
5960
dockerApiVersion := dockerServerApiVersion.value
6061
)
@@ -71,6 +72,15 @@ object DockerSpotifyClientPlugin extends AutoPlugin {
7172
docker.packageDocker(primaryAlias, aliases, dockerDirectory, log)
7273
}
7374

75+
def publishDocker: Def.Initialize[Task[Unit]] = Def.task {
76+
val _ = publishLocal.value
77+
val aliases = dockerAliases.value
78+
val log = streams.value.log
79+
80+
val docker = new DockerClientTask()
81+
docker.publishDocker(aliases, log)
82+
}
83+
7484
def dockerServerVersion: Def.Initialize[Task[Option[DockerVersion]]] = Def.task {
7585
val docker = new DockerClientTask()
7686
docker.dockerServerVersion()
@@ -104,19 +114,23 @@ private class DockerClientTask {
104114

105115
log.info(s"PublishLocal using Docker API ${docker.version().apiVersion()}")
106116

107-
docker.build(Paths.get(dockerDirectory), primaryAlias.toString, new ProgressHandler {
108-
override def progress(message: ProgressMessage): Unit =
109-
Option(message.error()) match {
110-
case Some(error) if error.nonEmpty => log.error(message.error())
111-
case _ => Option(message.stream()) foreach (v => log.info(v))
112-
}
113-
}, BuildParam.forceRm())
117+
docker.build(Paths.get(dockerDirectory), primaryAlias.toString, progressHandler(log), BuildParam.forceRm())
114118

115119
aliases.foreach { tag =>
116120
docker.tag(primaryAlias.toString, tag.toString, true)
117121
}
118122
}
119123

124+
def publishDocker(aliases: Seq[DockerAlias], log: Logger): Unit = {
125+
val docker: DockerClient = DefaultDockerClient.fromEnv().build()
126+
127+
log.info(s"Publish using Docker API ${docker.version().apiVersion()}")
128+
129+
aliases.foreach { tag =>
130+
docker.push(tag.toString, progressHandler(log))
131+
}
132+
}
133+
120134
def dockerServerVersion(): Option[DockerVersion] = {
121135
val docker: DockerClient = DefaultDockerClient.fromEnv().build()
122136
DockerVersion.parse(docker.version().version())
@@ -126,4 +140,12 @@ private class DockerClientTask {
126140
val docker: DockerClient = DefaultDockerClient.fromEnv().build()
127141
DockerApiVersion.parse(docker.version().apiVersion())
128142
}
143+
144+
private def progressHandler(log: Logger) = new ProgressHandler {
145+
override def progress(message: ProgressMessage): Unit =
146+
Option(message.error()) match {
147+
case Some(error) if error.nonEmpty => log.error(message.error())
148+
case _ => Option(message.stream()) foreach (v => log.info(v))
149+
}
150+
}
129151
}

0 commit comments

Comments
 (0)