Created
May 2, 2024 19:19
-
-
Save illarionov/0fd045d9cdbb33a552c112e46168ff8b to your computer and use it in GitHub Desktop.
Adding git version number to Kotlin source code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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