From 2e67fc2ca823e8dc3616ce4a7305175bef58ff9b Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Sun, 9 Apr 2017 16:55:41 -0700 Subject: Add generic execution id --- crashboxd/src/main/scala/io/crashbox/ci/Builder.scala | 14 ++++---------- .../src/main/scala/io/crashbox/ci/DockerExecutor.scala | 12 +++++------- crashboxd/src/main/scala/io/crashbox/ci/ExecutionId.scala | 4 ++++ crashboxd/src/main/scala/io/crashbox/ci/Executor.scala | 11 +++++------ crashboxd/src/main/scala/io/crashbox/ci/TaskId.scala | 5 +++++ 5 files changed, 23 insertions(+), 23 deletions(-) create mode 100644 crashboxd/src/main/scala/io/crashbox/ci/ExecutionId.scala create mode 100644 crashboxd/src/main/scala/io/crashbox/ci/TaskId.scala diff --git a/crashboxd/src/main/scala/io/crashbox/ci/Builder.scala b/crashboxd/src/main/scala/io/crashbox/ci/Builder.scala index a6269e8..77998cd 100644 --- a/crashboxd/src/main/scala/io/crashbox/ci/Builder.scala +++ b/crashboxd/src/main/scala/io/crashbox/ci/Builder.scala @@ -13,16 +13,10 @@ import scala.concurrent.Future import scala.util.{ Failure, Success } -case class BuildId(id: String) extends AnyVal - -case class TaskId(buildId: String, taskIdx: Int) { - override def toString = s"$buildId#$taskIdx" -} - -class BuildSource[E <: Environment]( +class BuildSource[Env <: Environment, Id <: ExecutionId]( taskId: TaskId, - taskDef: TaskDef[E], - executor: Executor[E], + taskDef: TaskDef[Env], + executor: Executor[Env, Id], mkdir: => File, mkout: => OutputStream // TODO refactor this into a two-output stage ) extends GraphStage[SourceShape[Builder.BuildState]] { @@ -35,7 +29,7 @@ class BuildSource[E <: Environment]( def createLogic(attributes: Attributes) = new GraphStageLogic(shape) with StageLogging { implicit def ec = materializer.executionContext - lazy val instance: Future[ExecutionId] = executor.start( + lazy val instance: Future[Id] = executor.start( taskDef.environment, taskDef.script, mkdir, diff --git a/crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala b/crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala index 715ca65..25a7f2e 100644 --- a/crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala +++ b/crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala @@ -19,11 +19,9 @@ import com.spotify.docker.client.exceptions.ContainerNotFoundException import com.spotify.docker.client.messages.{ContainerConfig, HostConfig} import com.spotify.docker.client.messages.HostConfig.Bind -case class ExecutionId(id: String) extends AnyVal object DockerExecutor { - def containerUser = "crashbox" def containerWorkDirectory = "/home/crashbox" def containerKillTimeout = 5.seconds @@ -31,7 +29,7 @@ object DockerExecutor { } class DockerExecutor(uri: String = "unix:///run/docker.sock")( - implicit system: ActorSystem) extends Executor[DockerEnvironment] { + implicit system: ActorSystem) extends Executor[DockerEnvironment, DockerExecutionId] { import DockerExecutor._ import system.log @@ -50,7 +48,7 @@ class DockerExecutor(uri: String = "unix:///run/docker.sock")( script: String, buildDirectory: File, out: OutputStream - ): Future[ExecutionId] = + ): Future[DockerExecutionId] = Future { val volume = Bind .builder() @@ -91,10 +89,10 @@ class DockerExecutor(uri: String = "unix:///run/docker.sock")( } } } - ExecutionId(container) + DockerExecutionId(container) }(system.dispatcher) - def result(id: ExecutionId): Future[Int] = + def result(id: DockerExecutionId): Future[Int] = Future { log.debug(s"Waiting for container $id to exit") val res: Int = dockerClient.waitContainer(id.id).statusCode() @@ -102,7 +100,7 @@ class DockerExecutor(uri: String = "unix:///run/docker.sock")( res }(system.dispatcher) - def stop(id: ExecutionId): Unit = { + def stop(id: DockerExecutionId): Unit = { try { log.debug(s"Stopping container $id") dockerClient.stopContainer(id.id, diff --git a/crashboxd/src/main/scala/io/crashbox/ci/ExecutionId.scala b/crashboxd/src/main/scala/io/crashbox/ci/ExecutionId.scala new file mode 100644 index 0000000..4e82742 --- /dev/null +++ b/crashboxd/src/main/scala/io/crashbox/ci/ExecutionId.scala @@ -0,0 +1,4 @@ +package io.crashbox.ci + +trait ExecutionId +case class DockerExecutionId(id: String) extends ExecutionId diff --git a/crashboxd/src/main/scala/io/crashbox/ci/Executor.scala b/crashboxd/src/main/scala/io/crashbox/ci/Executor.scala index 06befee..92a0fc7 100644 --- a/crashboxd/src/main/scala/io/crashbox/ci/Executor.scala +++ b/crashboxd/src/main/scala/io/crashbox/ci/Executor.scala @@ -3,18 +3,17 @@ package io.crashbox.ci import java.io.{ File, OutputStream } import scala.concurrent.Future - -trait Executor[E <: Environment] { +trait Executor[Env <: Environment, Id <: ExecutionId] { def start( - environment: E, + environment: Env, script: String, buildDirectory: File, out: OutputStream - ): Future[ExecutionId] + ): Future[Id] - def result(id: ExecutionId): Future[Int] + def result(id: Id): Future[Int] - def stop(id: ExecutionId): Unit + def stop(id: Id): Unit } diff --git a/crashboxd/src/main/scala/io/crashbox/ci/TaskId.scala b/crashboxd/src/main/scala/io/crashbox/ci/TaskId.scala new file mode 100644 index 0000000..292ba29 --- /dev/null +++ b/crashboxd/src/main/scala/io/crashbox/ci/TaskId.scala @@ -0,0 +1,5 @@ +package io.crashbox.ci + +case class TaskId(buildId: String, taskIdx: Int) { + override def toString = s"$buildId#$taskIdx" +} -- cgit v1.2.3