diff --git a/.travis.yml b/.travis.yml index dd0a8468..d4ac0a9b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,8 +25,7 @@ after_success: sbt publishSignedAll; echo "Deploying to Heroku"; docker login --username=noel.m@47deg.com --password=$heroku_token registry.heroku.com; - docker build -t registry.heroku.com/scala-evaluator-sandbox/web .; - docker push registry.heroku.com/scala-evaluator-sandbox/web; + sbt dockerBuildAndPush; fi - if [ "$TRAVIS_PULL_REQUEST" = "true" ]; then echo "Not in master branch, skipping deploy and release"; diff --git a/build.sbt b/build.sbt index 285aae37..97e0cf4c 100644 --- a/build.sbt +++ b/build.sbt @@ -56,6 +56,7 @@ lazy val `evaluator-server` = (project in file("server")) .dependsOn(`evaluator-shared-jvm`) .enablePlugins(JavaAppPackaging) .enablePlugins(AutomateHeaderPlugin) + .enablePlugins(sbtdocker.DockerPlugin) .settings(noPublishSettings: _*) .settings( name := "evaluator-server", @@ -78,7 +79,27 @@ lazy val `evaluator-server` = (project in file("server")) ), assemblyJarName in assembly := "evaluator-server.jar" ) + .settings(dockerSettings) .settings(compilerDependencySettings: _*) onLoad in Global := (Command.process("project evaluator-server", _: State)) compose (onLoad in Global).value addCommandAlias("publishSignedAll", ";evaluator-sharedJS/publishSigned;evaluator-sharedJVM/publishSigned;evaluator-clientJS/publishSigned;evaluator-clientJVM/publishSigned") + +lazy val dockerSettings = Seq( + docker <<= docker dependsOn assembly, + dockerfile in docker := { + + val artifact: File = assembly.value + val artifactTargetPath = artifact.name + + sbtdocker.immutable.Dockerfile.empty + .from("ubuntu:latest") + .run("apt-get", "update") + .run("apt-get", "install", "-y", "openjdk-8-jdk") + .run("useradd", "-m", "evaluator") + .user("evaluator") + .add(artifact, artifactTargetPath) + .cmdRaw(s"java -Dhttp.port=$$PORT -jar $artifactTargetPath") + }, + imageNames in docker := Seq(ImageName(repository = "registry.heroku.com/scala-evaluator-sandbox/web")) +) diff --git a/project/EvaluatorBuild.scala b/project/EvaluatorBuild.scala index f63d3e3b..00f995db 100644 --- a/project/EvaluatorBuild.scala +++ b/project/EvaluatorBuild.scala @@ -86,7 +86,7 @@ object EvaluatorBuild extends AutoPlugin { val projectName = Project.extract(s).currentProject.id - s"$blue$projectName$white>${c.RESET}" + s"$blue$projectName$white>${c.RESET} " } ) diff --git a/project/plugins.sbt b/project/plugins.sbt index a459631b..6fd406f6 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -4,3 +4,4 @@ addSbtPlugin("de.heikoseeberger" % "sbt-header" % "1.6.0") addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.1") addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.12") addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3") +addSbtPlugin("se.marcuslonnberg" % "sbt-docker" % "1.4.0")