From 6226916feea2cbcc3ef4bb274bdff0b41ac36408 Mon Sep 17 00:00:00 2001 From: Wojciech Mazur Date: Sun, 2 Apr 2023 23:38:52 +0200 Subject: [PATCH] Fix testing scb-cli --- cli/scb-cli.scala | 23 ++++++++++------------ coordinator/src/main/scala/buildPlan.scala | 2 +- coordinator/src/main/scala/encoding.scala | 15 ++++++++++++-- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/cli/scb-cli.scala b/cli/scb-cli.scala index d4610f57..59ea1e5d 100755 --- a/cli/scb-cli.scala +++ b/cli/scb-cli.scala @@ -2,10 +2,10 @@ //> using scala "3.2" //> using lib "org.json4s::json4s-native:4.0.6" //> using lib "com.lihaoyi::requests:0.8.0" -//> using lib "com.lihaoyi::os-lib:0.9.0" +//> using lib "com.lihaoyi::os-lib:0.9.1" //> using lib "io.get-coursier:coursier_2.13:2.0.16" //> using lib "com.goyeau::kubernetes-client:0.8.1" -//> using lib "org.slf4j:slf4j-simple:2.0.6" +//> using lib "org.slf4j:slf4j-simple:2.0.7" //> using lib "com.github.scopt::scopt:4.1.0" import org.json4s.* @@ -140,7 +140,7 @@ object Config: } case class ProjectBuildPlan( - name: String, + project: String, dependencies: Array[String], repoUrl: String, revision: Option[String], @@ -236,17 +236,13 @@ object BuildInfo: val scalaVersion = config.customRun.scalaVersion given StringManifest: Manifest[String] = scala.reflect.ManifestFactory.classType(classOf[String]) - def prepareBuildPlan(): JValue = - val configsDir = communityBuildDir / "env" / "prod" / "config" val args = Seq[os.Shellable]( /* scalaBinaryVersion = */ 3, /* minStartsCount = */ 0, /* maxProjectsCount = */ 0, /* requiredProjects = */ config.customRun.projectName, - /* replacedProjectsPath = */ "", - /* projectsConfigPath = */ configsDir / "projects-config.conf", - /* projectsFiterPath = */ "" + /* configsPath = */ communityBuildDir / "coordinator" / "configs", ) val javaProps = Seq("--java-prop", "opencb.coordinator.reproducer-mode=true") @@ -256,11 +252,12 @@ object BuildInfo: val buildPlanJson = os.read(coordinatorDir / "data" / "buildPlan.json") parse(buildPlanJson) - val JArray(buildPlan) = prepareBuildPlan(): @unchecked + val buildPlan = prepareBuildPlan() match + case JArray(plan) => plan.filter(_ != JArray(Nil)) + case t => sys.error("Unexpected build plan input: " + t) val projects = for - case JArray(buildStage) <- buildPlan.take( - 1 - ) // There should be only 1 stage + case JArray(buildStage) <- buildPlan.take(1) + // There should be only 1 stage project <- buildStage.take(1) // There should be only 1 project // Config is an object, though be default would be decoded to None when we expect Option[String] // We don't care about its content so we treat it as opaque string value @@ -279,7 +276,7 @@ object BuildInfo: yield ProjectInfo( id = jobId, params = BuildParameters( - name = plan.name, + name = plan.project, config = plan.config.filter(_.nonEmpty), repositoryUrl = plan.repoUrl, repositoryRevision = config.customRun.revisionOverride diff --git a/coordinator/src/main/scala/buildPlan.scala b/coordinator/src/main/scala/buildPlan.scala index 0bbf42c6..0ba68afb 100644 --- a/coordinator/src/main/scala/buildPlan.scala +++ b/coordinator/src/main/scala/buildPlan.scala @@ -422,7 +422,7 @@ def createGithubActionJob( | repository-url: $${{ inputs.repository-url }} | repository-branch: $${{ inputs.repository-branch }} |""".stripMargin) - plan.zipWithIndex.foreach { case (projects, idx) if projects.nonEmpty => + plan.filter(_.nonEmpty).zipWithIndex.foreach { case (projects, idx) => // stage 0 reserved for long running jobs, no other step depends on it def hasExtendentBuildTime = idx == 0 val prevStageId = Option.when(idx > 1) { stageId(idx - 1) } diff --git a/coordinator/src/main/scala/encoding.scala b/coordinator/src/main/scala/encoding.scala index 4b97fddb..e9be8508 100644 --- a/coordinator/src/main/scala/encoding.scala +++ b/coordinator/src/main/scala/encoding.scala @@ -6,12 +6,23 @@ import java.time.OffsetDateTime given Formats = Serialization.formats(NoTypeHints) + TestingModeEnumSerializer() + ProjectBuildDefSerializer + - UTCOffsetDateTimeSerializer() + UTCOffsetDateTimeSerializer() + ProjectSerializer() object ProjectBuildDefSerializer extends FieldSerializer[ProjectBuildDef]({ import FieldSerializer.ignore - ignore("project") orElse ignore("dependencies") + ignore("dependencies") + }) + +class ProjectSerializer + extends CustomSerializer[Project](format => { + def deserialize: PartialFunction[JValue, Project] = { case JString(stringValue) => + Project.load(stringValue) + } + def serialize: PartialFunction[Any, JValue] = { case p: Project => + JString(p.coordinates) + } + (deserialize, serialize) }) class TestingModeEnumSerializer