Skip to content

Instantly share code, notes, and snippets.

@illarionov
Created May 2, 2024 19:19
Show Gist options
  • Save illarionov/0fd045d9cdbb33a552c112e46168ff8b to your computer and use it in GitHub Desktop.
Save illarionov/0fd045d9cdbb33a552c112e46168ff8b to your computer and use it in GitHub Desktop.
Adding git version number to Kotlin source code
import java.io.ByteArrayOutputStream
abstract class GitShaValueSource : ValueSource<String, ValueSourceParameters.None> {
@get:Inject
abstract val execOperations: ExecOperations
override fun obtain(): String {
return try {
val output = ByteArrayOutputStream()
execOperations.exec {
commandLine = listOf("git", "rev-parse", "HEAD")
standardOutput = output
}
output.toString().trim()
} catch (ex: GradleException) {
"unknown"
}
}
}
val gitVersionProvider: Provider<String> = providers.of(GitShaValueSource::class.java) {}
// Ресурсы
abstract class GenerateGitVersionResourceTask : DefaultTask() {
@get:Input
abstract val gitVersion: Property<String>
@get:OutputDirectory
abstract val outputDirectory: DirectoryProperty
@TaskAction
fun execute() {
outputDirectory.file("project.version").get().asFile.writeText(gitVersion.get())
}
}
val generatedResourcesDir = layout.buildDirectory.dir("generated-version-resources")
val generateGitVersionResourceTask = tasks.register<GenerateGitVersionResourceTask>("generateGitVersionResource") {
gitVersion = gitVersionProvider
outputDirectory = generatedResourcesDir
}
kotlin {
sourceSets {
// Или main
commonMain {
resources.srcDir(generateGitVersionResourceTask.flatMap(GenerateGitVersionResourceTask::outputDirectory))
}
}
}
// Kotlin файл
abstract class GenerateGitVersionKotlinSourceTask : DefaultTask() {
@get:Input
abstract val gitVersion: Property<String>
@get:OutputDirectory
abstract val outputDirectory: DirectoryProperty
@TaskAction
fun execute() {
outputDirectory.file("ProjectVersion.kt").get().asFile.writeText("""
|public const val PROJECT_VERSION: String = ""${'"'}${ gitVersion.get()}""${'"'}
""".trimMargin())
}
}
val generatedProjectVersionDir = layout.buildDirectory.dir("generated-version-kotlin")
val generateGitVersionKotlinTask = tasks.register<GenerateGitVersionKotlinSourceTask>("generateGitVersionKotlin") {
gitVersion = gitVersionProvider
outputDirectory = generatedProjectVersionDir
}
kotlin {
sourceSets {
// Или main
commonMain {
kotlin.srcDir(generateGitVersionKotlinTask.flatMap(GenerateGitVersionKotlinSourceTask::outputDirectory))
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment