summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jakob@odersky.com>2017-04-09 16:55:41 -0700
committerJakob Odersky <jakob@odersky.com>2017-04-09 16:55:47 -0700
commit2e67fc2ca823e8dc3616ce4a7305175bef58ff9b (patch)
tree1d76a32cf63dcf3e280f3a4e59a575f599b5449d
parent82cfb0ef1ab41ecc09ed0ccaf56704e14b654177 (diff)
downloadcrashbox-ci-2e67fc2ca823e8dc3616ce4a7305175bef58ff9b.tar.gz
crashbox-ci-2e67fc2ca823e8dc3616ce4a7305175bef58ff9b.tar.bz2
crashbox-ci-2e67fc2ca823e8dc3616ce4a7305175bef58ff9b.zip
Add generic execution id
-rw-r--r--crashboxd/src/main/scala/io/crashbox/ci/Builder.scala14
-rw-r--r--crashboxd/src/main/scala/io/crashbox/ci/DockerExecutor.scala12
-rw-r--r--crashboxd/src/main/scala/io/crashbox/ci/ExecutionId.scala4
-rw-r--r--crashboxd/src/main/scala/io/crashbox/ci/Executor.scala11
-rw-r--r--crashboxd/src/main/scala/io/crashbox/ci/TaskId.scala5
5 files changed, 23 insertions, 23 deletions
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"
+}