From 82cfb0ef1ab41ecc09ed0ccaf56704e14b654177 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Sun, 9 Apr 2017 16:48:21 -0700 Subject: Make builder generic --- crashboxd/src/main/scala/io/crashbox/ci/Builder.scala | 10 +++++----- crashboxd/src/main/scala/io/crashbox/ci/Parser.scala | 4 ++-- crashboxd/src/main/scala/io/crashbox/ci/defs.scala | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/crashboxd/src/main/scala/io/crashbox/ci/Builder.scala b/crashboxd/src/main/scala/io/crashbox/ci/Builder.scala index 18bf219..a6269e8 100644 --- a/crashboxd/src/main/scala/io/crashbox/ci/Builder.scala +++ b/crashboxd/src/main/scala/io/crashbox/ci/Builder.scala @@ -19,10 +19,10 @@ case class TaskId(buildId: String, taskIdx: Int) { override def toString = s"$buildId#$taskIdx" } -class BuildSource( +class BuildSource[E <: Environment]( taskId: TaskId, - taskDef: TaskDef, - executor: DockerExecutor, + taskDef: TaskDef[E], + executor: Executor[E], mkdir: => File, mkout: => OutputStream // TODO refactor this into a two-output stage ) extends GraphStage[SourceShape[Builder.BuildState]] { @@ -36,7 +36,7 @@ class BuildSource( implicit def ec = materializer.executionContext lazy val instance: Future[ExecutionId] = executor.start( - taskDef.environment.asInstanceOf[DockerEnvironment], + taskDef.environment, taskDef.script, mkdir, mkout @@ -85,7 +85,7 @@ object Builder { sealed trait BuildState { def taskId: TaskId } - case class TaskStarting(taskId: TaskId, taskDef: TaskDef) extends BuildState + case class TaskStarting(taskId: TaskId, taskDef: TaskDef[Environment]) extends BuildState case class TaskRunning(taskId: TaskId, execId: ExecutionId) extends BuildState case class TaskFinished(taskId: TaskId, status: Int) extends BuildState diff --git a/crashboxd/src/main/scala/io/crashbox/ci/Parser.scala b/crashboxd/src/main/scala/io/crashbox/ci/Parser.scala index 5a58612..b8ad89b 100644 --- a/crashboxd/src/main/scala/io/crashbox/ci/Parser.scala +++ b/crashboxd/src/main/scala/io/crashbox/ci/Parser.scala @@ -8,7 +8,7 @@ object Parser { case class Success(buildDef: BuildDef) extends Result case class Failure(error: String) extends Result - implicit object TaskDefReader extends YamlReader[TaskDef] { + implicit object TaskDefReader extends YamlReader[TaskDef[_]] { def read(value: YamlValue) = { val items = value.convertTo[Map[String, YamlValue]] val image = items @@ -29,7 +29,7 @@ object Parser { val tasks = items .getOrElse("tasks", throw new YamlFormatException("no tasks specified")) - .convertTo[Map[String, TaskDef]] + .convertTo[Map[String, TaskDef[_]]] BuildDef(tasks.values.toSeq) } } diff --git a/crashboxd/src/main/scala/io/crashbox/ci/defs.scala b/crashboxd/src/main/scala/io/crashbox/ci/defs.scala index df014a0..24ed530 100644 --- a/crashboxd/src/main/scala/io/crashbox/ci/defs.scala +++ b/crashboxd/src/main/scala/io/crashbox/ci/defs.scala @@ -3,5 +3,5 @@ package io.crashbox.ci sealed trait Environment case class DockerEnvironment(image: String) extends Environment -case class TaskDef(environment: Environment, script: String) -case class BuildDef(tasks: Seq[TaskDef]) +case class TaskDef[+E <: Environment](environment: E, script: String) +case class BuildDef(tasks: Seq[TaskDef[_]]) -- cgit v1.2.3