diff options
Diffstat (limited to 'src/main/scala/xyz.driver.sbt/Service.scala')
-rw-r--r-- | src/main/scala/xyz.driver.sbt/Service.scala | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/main/scala/xyz.driver.sbt/Service.scala b/src/main/scala/xyz.driver.sbt/Service.scala new file mode 100644 index 0000000..a0186e6 --- /dev/null +++ b/src/main/scala/xyz.driver.sbt/Service.scala @@ -0,0 +1,75 @@ +package xyz.driver.sbt + +import com.typesafe.sbt.GitPlugin.autoImport._ +import com.typesafe.sbt.packager.Keys.{ + dockerBaseImage => _, + dockerCommands => _, + dockerExposedPorts => _, + dockerRepository => _, + dockerUpdateLatest => _, + _ +} +import com.typesafe.sbt.packager.archetypes.JavaAppPackaging +import com.typesafe.sbt.packager.docker.DockerPlugin.autoImport._ +import com.typesafe.sbt.packager.docker.{Cmd, DockerPlugin} +import sbt.Keys._ +import sbt.{Def, _} +import sbtbuildinfo.BuildInfoPlugin +import sbtbuildinfo.BuildInfoPlugin.autoImport._ + +/** Common settings to a service. */ +object Service extends AutoPlugin { + + override def requires = BuildInfoPlugin && DockerPlugin && JavaAppPackaging + + object autoImport { + val customCommands = taskKey[List[String]]("Additional commands that are run as part of docker packaging.") + } + import autoImport._ + + lazy val buildInfoSettings = Seq( + buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion, git.gitHeadCommit), + buildInfoPackage := organization.value, + buildInfoOptions += BuildInfoOption.BuildTime + ) + + lazy val dockerSettings = Seq( + name in Docker := name.value, + // Settings reference http://www.scala-sbt.org/sbt-native-packager/formats/docker.html + maintainer in Docker := "Driver Inc. <info@driver.xyz>", + aggregate in Docker := true, // include subprojects, + dockerRepository := Some("gcr.io/driverinc-sandbox"), + dockerUpdateLatest := true, // automatically update the latest tag + dockerBaseImage := "openjdk:10", + dockerCommands := dockerCommands.value.flatMap { // @see http://blog.codacy.com/2015/07/16/dockerizing-scala/ + case cmd @ Cmd("FROM", _) => cmd :: customCommands.value.map(customCommand => Cmd("RUN", customCommand)) + case other => List(other) + }, + bashScriptExtraDefines += { + s"""|if [[ -f /etc/${name.value}/ssl/issuing_ca ]]; then + | keytool -import \ + | -alias driverincInternal \ + | -keystore $$JAVA_HOME/jre/lib/security/cacerts \ + | -file /etc/${name.value}/ssl/issuing_ca \ + | -storepass changeit -noprompt + |else + | echo "No truststore customization." >&2 + |fi + |""".stripMargin + } + ) + + override def projectSettings: Seq[Def.Setting[_]] = + Library.repositorySettings ++ buildInfoSettings ++ dockerSettings ++ Seq( + crossScalaVersions := List("2.12.6"), + scalaVersion := crossScalaVersions.value.last, + publish := { + streams.value.log.warn(s"Service ${name.value} won't be published.") + } + ) + + override def buildSettings: Seq[Def.Setting[_]] = + addCommandAlias("start", "reStart") ++ + addCommandAlias("stop", "reStop") + +} |