diff --git a/.travis.yml b/.travis.yml index 923e8528..dc0bcbb2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ language: scala sudo: required +services: +- docker scala: - 2.11.8 jdk: @@ -21,6 +23,9 @@ before_install: after_success: - if [ "$TRAVIS_BRANCH" = "master" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then sbt publishSignedAll; + echo "Deploying to Heroku"; + docker login --username=noel.m@47deg.com --password=$heroku_token registry.heroku.com; + 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 1c4680ee..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", @@ -75,9 +76,30 @@ lazy val `evaluator-server` = (project in file("server")) "io.get-coursier" %% "coursier" % v('coursier), "io.get-coursier" %% "coursier-cache" % v('coursier), "org.scalatest" %% "scalatest" % v('scalaTest) % "test" - ) + ), + 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 a68ff8a3..6fd406f6 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -2,4 +2,6 @@ addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.1") addSbtPlugin("com.geirsson" % "sbt-scalafmt" % "0.2.11") 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") \ No newline at end of file +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")