summaryrefslogtreecommitdiff
path: root/contrib/buildinfo/src/mill/contrib/BuildInfo.scala
blob: 1c8d9d9e61d5bf952cfff3bd6b6ef9a3c63c3364 (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
42
43
44
package mill.contrib

import mill.T
import mill.define.Target
import mill.api.PathRef
import mill.scalalib.ScalaModule
import mill.api.Ctx

trait BuildInfo extends ScalaModule {

  def buildInfoPackageName: Option[String] = None

  def buildInfoObjectName: String = "BuildInfo"

  def buildInfoMembers: T[Map[String, String]] = T {
    Map.empty[String, String]
  }

  private def generateBuildInfo(members: Map[String, Any])(implicit dest: Ctx.Dest): Seq[PathRef] =
  if(!members.isEmpty){
    val outputFile = dest.dest / "BuildInfo.scala"
    val internalMembers =
      members
        .map {
          case (name, value) => s"""  def ${name} = "${value}""""
        }
        .mkString("\n")
    os.write(outputFile,
      s"""|${buildInfoPackageName.map(p => s"package ${p}").getOrElse("")}
          |object ${buildInfoObjectName} {
          |$internalMembers
          |}""".stripMargin)
    Seq(PathRef(outputFile))
  } else {
    Seq.empty[PathRef]
  }

  def buildInfo = T {
    generateBuildInfo(buildInfoMembers())
  }

  override def generatedSources: Target[Seq[PathRef]] = super.generatedSources() ++ buildInfo()

}