46 lines
1.5 KiB
Kotlin
46 lines
1.5 KiB
Kotlin
package mihon.buildlogic
|
|
|
|
import org.gradle.api.Project
|
|
import java.time.Instant
|
|
import java.time.LocalDateTime
|
|
import java.time.ZoneOffset
|
|
import java.time.format.DateTimeFormatter
|
|
|
|
// Git is needed in your system PATH for these commands to work.
|
|
// If it's not installed, you can return a random value as a workaround
|
|
fun Project.getCommitCount(): String {
|
|
return runCommand("git rev-list --count HEAD")
|
|
// return "1"
|
|
}
|
|
|
|
fun Project.getGitSha(): String {
|
|
return runCommand("git rev-parse --short HEAD")
|
|
// return "1"
|
|
}
|
|
|
|
private val BUILD_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")
|
|
|
|
/**
|
|
* @param useLastCommitTime If `true`, the build time is based on the timestamp of the last Git commit;
|
|
* otherwise, the current time is used. Both are in UTC.
|
|
* @return A formatted string representing the build time. The format used is defined by [BUILD_TIME_FORMATTER].
|
|
*/
|
|
fun Project.getBuildTime(useLastCommitTime: Boolean): String {
|
|
return if (useLastCommitTime) {
|
|
val epoch = runCommand("git log -1 --format=%ct").toLong()
|
|
Instant.ofEpochSecond(epoch).atOffset(ZoneOffset.UTC).format(BUILD_TIME_FORMATTER)
|
|
} else {
|
|
LocalDateTime.now(ZoneOffset.UTC).format(BUILD_TIME_FORMATTER)
|
|
}
|
|
}
|
|
|
|
private fun Project.runCommand(command: String): String {
|
|
return providers.exec {
|
|
commandLine = command.split(" ")
|
|
}
|
|
.standardOutput
|
|
.asText
|
|
.get()
|
|
.trim()
|
|
}
|