summaryrefslogtreecommitdiff
path: root/build.sc
blob: 938f4123aaafd89a656e59e1635cee0530792e8f (plain)
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import mill._
import mill.scalalib._
import scalafmt._

import $ivy.`com.lihaoyi::mill-contrib-buildinfo:$MILL_VERSION`
import mill.contrib.buildinfo.BuildInfo

object server extends ScalaModule with ScalafmtModule with BuildInfo {
  def scalaVersion = "2.13.5"

  def scalacOptions = Seq(
    // features
  "-encoding", "utf-8",
  "-explaintypes",
  "-language:higherKinds",
  // warnings
  "-deprecation",
  "-Xlint:unused",
  "-unchecked",
  )

  def ivyDeps = Agg(
    ivy"ch.qos.logback:logback-classic:1.2.3",
    ivy"com.github.pureconfig::pureconfig:0.14.1",
    ivy"com.github.scopt::scopt:4.0.0",
    ivy"com.typesafe.akka::akka-stream:2.6.13",
    ivy"org.bouncycastle:bcprov-jdk15to18:1.68",
    ivy"org.log4s::log4s:1.9.0"
  )

  override def compile = T {
    reformat().apply()
    super.compile()
  }

  def gitHead = T.input { os.proc('git, "rev-parse", "HEAD").call().out.trim }

  def getVersion = T.input {
    val tag = try Option(
      os.proc('git, 'describe, "--exact-match", "--tags", "--always", gitHead()).call().out.trim
    )
    catch { case e => None }

    tag match {
      case Some(t) => t
      case None =>
        val latestTaggedVersion = os.proc('git, 'describe, "--abbrev=0", "--always", "--tags").call().out.trim
        val latestCommit = gitHead().take(6)
        s"$latestTaggedVersion-$latestCommit"
    }
  }

  val name = "spacebeans"
  def buildInfoMembers: T[Map[String, String]] = T {
    Map(
      "name" -> name,
      "version" -> getVersion().drop(1) // version tags start with v
    )
  }
  def buildInfoPackageName = Some("net.usebox.gemini.server")

  object test extends Tests with ScalafmtModule {
    def ivyDeps = Agg(ivy"org.scalatest::scalatest:3.2.5")
    def testFrameworks = Seq("org.scalatest.tools.Framework")

    override def compile = T {
      reformat().apply()
      super.compile()
    }

    def testOnly(args: String*) = T.command {
      super.runMain("org.scalatest.run", args: _*)
    }
  }
}