summaryrefslogtreecommitdiff
path: root/crashbox-server/src/main/scala/io/crashbox/ci/Parsers.scala
blob: 020521c311a989fe572676399a6e525b6930ecdb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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."))
    }
  }
}