summaryrefslogtreecommitdiff
path: root/crashbox-server/src/main/scala/io/crashbox/ci/Parser.scala
diff options
context:
space:
mode:
Diffstat (limited to 'crashbox-server/src/main/scala/io/crashbox/ci/Parser.scala')
-rw-r--r--crashbox-server/src/main/scala/io/crashbox/ci/Parser.scala34
1 files changed, 34 insertions, 0 deletions
diff --git a/crashbox-server/src/main/scala/io/crashbox/ci/Parser.scala b/crashbox-server/src/main/scala/io/crashbox/ci/Parser.scala
new file mode 100644
index 0000000..a8b4f19
--- /dev/null
+++ b/crashbox-server/src/main/scala/io/crashbox/ci/Parser.scala
@@ -0,0 +1,34 @@
+package io.crashbox.ci
+
+import java.io.File
+import java.nio.file.Files
+
+import scala.collection.JavaConverters._
+
+object Parser {
+
+ def defaultImage = "crashbox/default"
+
+ 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."))
+ }
+ }
+}