Quiero poner el hash de confirmación en un archivo de plantilla de Play Framework para poder ver la información de construcción mediante la llamada REST GET.
En sbt puedo obtener un hash de commit de git y el nombre de la rama de git, de todos modos hay que poner esta información en un archivo de plantilla durante el proceso de compilación?
build.sbt
name := "my-project"
val branch = "git rev-parse --abbrev-ref HEAD".!!.trim
val commit = "git rev-parse HEAD".!!.trim
val buildTime = (new java.text.SimpleDateFormat("yyyyMMdd-HHmmss")).format(new java.util.Date())
version := "%s-%s-%s".format(branch, commit, buildTime)
Usé un plugin sbt llamado sbt-buildinfo para hacer esto. Ver la respuesta a ¿Tiene sbt algo así como la tarea processResources de gradle con el soporte ReplaceTokens? . Técnicamente, funcionó. Efectivamente, fue un poco chupado que Play recargara todo el proyecto cada vez que algo cambiara. ¿Quizás ya hayan superado esto? Prueba sbt-buildinfo: https://github.com/sbt/sbt-buildinfo#usage
Agregando mi fea solución para agregar el hash de git head para compilar:
(Además de los enlaces de Bob Kuharrespuesta de s)
Ya he tenido "root val perezoso", así que esto es lo que parece ahora.
lazy val root = (project in file(".")).
enablePlugins(PlayScala).
enablePlugins(BuildInfoPlugin).
settings(
buildInfoKeys := Seq[BuildInfoKey](
name, version, scalaVersion, sbtVersion,
"hostname" -> java.net.InetAddress.getLocalHost().getHostName(),
"whoami" -> System.getProperty("user.name"),
"buildTimestamp" -> new java.util.Date(System.currentTimeMillis()),
"gitHash" -> new java.lang.Object(){
override def toString(): String = {
try {
val extracted = new java.io.InputStreamReader(
java.lang.Runtime.getRuntime().exec("git rev-parse HEAD").getInputStream())
(new java.io.BufferedReader(extracted)).readLine()
} catch { case t: Throwable => "get git hash failed" }
}}.toString()
),
buildInfoPackage := "buildpkg"
)