Gradle を使ってサーバ起動時にバージョン番号を出力する

Git の最新のタグをバージョンとしてサーバ起動時に出力する、ということを Gradle を使って実現しました。gradle-release-plugin あたりがこのへんも面倒見てくれるかなと思ったのだけれど、たいした手間でもないので自前で。

Gradle でビルド時に最新のタグ名を app-version.txt に書いておく。

build.gradle

task updateVersion << {
  def getVersionName = { ->
    def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'describe', '--all'
        standardOutput = stdout
        ignoreExitValue = true
    }
    return stdout.toString().trim()
  }

  def version = getVersionName()
  println("Version: ${version}")
  new File("src/main/resources/app-version.txt").withWriter { out ->
    out.writeLine(version)
  }
}

processResources.dependsOn(updateVersion)

サーバ起動時に読んで出力。

printVersionNumber()

private def printVersionNumber() {
  info(s"Server ($getVersionNumber) has been started.")
}

private def getVersionNumber: String = {
  io.Source.fromInputStream(
    this.getClass.getClassLoader.getResourceAsStream("app-version.txt")).mkString.trim
}

自動生成するものはバージョン管理したくないので .gitignore に書いておく。

src/main/resources/app-version.txt