summaryrefslogtreecommitdiff
path: root/crashbox-server/src/main/scala/io/crashbox/ci/Parsers.scala
diff options
context:
space:
mode:
Diffstat (limited to 'crashbox-server/src/main/scala/io/crashbox/ci/Parsers.scala')
-rw-r--r--crashbox-server/src/main/scala/io/crashbox/ci/Parsers.scala36
1 files changed, 36 insertions, 0 deletions
diff --git a/crashbox-server/src/main/scala/io/crashbox/ci/Parsers.scala b/crashbox-server/src/main/scala/io/crashbox/ci/Parsers.scala
new file mode 100644
index 0000000..6f43380
--- /dev/null
+++ b/crashbox-server/src/main/scala/io/crashbox/ci/Parsers.scala
@@ -0,0 +1,36 @@
+package io.crashbox.ci
+
+import java.io.File
+import java.nio.file.Files
+import scala.collection.JavaConverters._
+
+trait Parsers {
+
+ def defaultImage = "crashbox/default"
+
+ case class BuildDef(
+ image: String,
+ script: String
+ )
+
+ case class ParseError(message: String)
+
+ def parseBuild(workdir: File): Either[BuildDef, ParseError] = {
+ val file = new File(workdir, ".crashbox.txt")
+ if (!file.exists()) {
+ return Right(ParseError("No build configuration file .crashbox.txt found."))
+ }
+
+ val lines = Files.readAllLines(file.toPath).asScala.map(_.trim)
+
+ val Pattern = """(\w+)\s*:\s*(.+)""".r
+
+ val image = lines.collectFirst{case Pattern("image", s) => s}.getOrElse(defaultImage)
+ val script = lines.collectFirst{case Pattern("script", s) => s}
+
+ script match {
+ case Some(s) => Left(BuildDef(image, s))
+ case None => Right(ParseError("No build script defined in configuration."))
+ }
+ }
+}