Skip to content

Commit 4deed2d

Browse files
authored
Merge pull request #38 from scala-exercises/nm-6-sandbox-evaluation-docker
Put the Evaluator into a Docker container to isolate important resources from any third-party-run code
2 parents b503e82 + b0ca14a commit 4deed2d

File tree

4 files changed

+32
-3
lines changed

4 files changed

+32
-3
lines changed

.travis.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
language: scala
22
sudo: required
3+
services:
4+
- docker
35
scala:
46
- 2.11.8
57
jdk:
@@ -21,6 +23,9 @@ before_install:
2123
after_success:
2224
- if [ "$TRAVIS_BRANCH" = "master" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then
2325
sbt publishSignedAll;
26+
echo "Deploying to Heroku";
27+
docker login [email protected] --password=$heroku_token registry.heroku.com;
28+
sbt dockerBuildAndPush;
2429
fi
2530
- if [ "$TRAVIS_PULL_REQUEST" = "true" ]; then
2631
echo "Not in master branch, skipping deploy and release";

build.sbt

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ lazy val `evaluator-server` = (project in file("server"))
5656
.dependsOn(`evaluator-shared-jvm`)
5757
.enablePlugins(JavaAppPackaging)
5858
.enablePlugins(AutomateHeaderPlugin)
59+
.enablePlugins(sbtdocker.DockerPlugin)
5960
.settings(noPublishSettings: _*)
6061
.settings(
6162
name := "evaluator-server",
@@ -75,9 +76,30 @@ lazy val `evaluator-server` = (project in file("server"))
7576
"io.get-coursier" %% "coursier" % v('coursier),
7677
"io.get-coursier" %% "coursier-cache" % v('coursier),
7778
"org.scalatest" %% "scalatest" % v('scalaTest) % "test"
78-
)
79+
),
80+
assemblyJarName in assembly := "evaluator-server.jar"
7981
)
82+
.settings(dockerSettings)
8083
.settings(compilerDependencySettings: _*)
8184

8285
onLoad in Global := (Command.process("project evaluator-server", _: State)) compose (onLoad in Global).value
8386
addCommandAlias("publishSignedAll", ";evaluator-sharedJS/publishSigned;evaluator-sharedJVM/publishSigned;evaluator-clientJS/publishSigned;evaluator-clientJVM/publishSigned")
87+
88+
lazy val dockerSettings = Seq(
89+
docker <<= docker dependsOn assembly,
90+
dockerfile in docker := {
91+
92+
val artifact: File = assembly.value
93+
val artifactTargetPath = artifact.name
94+
95+
sbtdocker.immutable.Dockerfile.empty
96+
.from("ubuntu:latest")
97+
.run("apt-get", "update")
98+
.run("apt-get", "install", "-y", "openjdk-8-jdk")
99+
.run("useradd", "-m", "evaluator")
100+
.user("evaluator")
101+
.add(artifact, artifactTargetPath)
102+
.cmdRaw(s"java -Dhttp.port=$$PORT -jar $artifactTargetPath")
103+
},
104+
imageNames in docker := Seq(ImageName(repository = "registry.heroku.com/scala-evaluator-sandbox/web"))
105+
)

project/EvaluatorBuild.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ object EvaluatorBuild extends AutoPlugin {
8686

8787
val projectName = Project.extract(s).currentProject.id
8888

89-
s"$blue$projectName$white>${c.RESET}"
89+
s"$blue$projectName$white>${c.RESET} "
9090
}
9191
)
9292

project/plugins.sbt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@ addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.1")
22
addSbtPlugin("com.geirsson" % "sbt-scalafmt" % "0.2.11")
33
addSbtPlugin("de.heikoseeberger" % "sbt-header" % "1.6.0")
44
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.1")
5-
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.12")
5+
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.12")
6+
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3")
7+
addSbtPlugin("se.marcuslonnberg" % "sbt-docker" % "1.4.0")

0 commit comments

Comments
 (0)