Gradle extract function and gradle version management
gradle project의 버전 관리에 대해 작성합니다.
구조
gradle version을 major, minor, patch로 구조로 나눕니다.
gradle project(application version)을 별도의 file로 분리하고, 위에서 이야기한 3가지 version을 자동으로 올려주는 task를 작성합니다.
그리고 이 task를 가지고 있는 gradle.kts 파일로 분리하고, root gradle.kts 에서 불러와서 사용하는 방법에 대해 작성합니다.
version.properties
applicationVersion=0.0.1 setting.gradle
gradle.beforeProject { val localPropertiesFile = rootDir.resolve("version.properties") if (localPropertiesFile.exists()) { val localProperties = java.util.Properties() localProperties.load(localPropertiesFile.inputStream()) localProperties.forEach { (k, v) -> if (k is String) project.extra.set(k, v) } } } 위 설정으로 이제 하위 gradle project에서 version.properties에 작성한 값을 사용할 수 있습니다.
사용예
val applicationVersion: String by project
function.gradle.kts
val applicationVersion: String by project tasks.register("minor-version-update") { val version = applicationVersion.split(".") val newVersion = "${version[0]}.${version[1].toInt().inc()}.${version[2]}" println(applicationVersion + " -> " + newVersion) val versionProperties = rootProject.file("version.properties") versionProperties.readText().replace(applicationVersion, newVersion).let { versionProperties.writeText(it) } } tasks.register("patch-version-update") { val version = applicationVersion.split(".") val newVersion = "${version[0]}.${version[1]}.${version[2].toInt().inc()}" println(applicationVersion + " -> " + newVersion) val versionProperties = rootProject.file("version.properties") versionProperties.readText().replace(applicationVersion, newVersion).let { versionProperties.writeText(it) } } tasks.register("major-version-update") { val version = applicationVersion.split(".") val newVersion = "${version[0].toInt().inc()}.0.0" println(applicationVersion + " -> " + newVersion) val versionProperties = rootProject.file("version.properties") versionProperties.readText().replace(applicationVersion, newVersion).let { versionProperties.writeText(it) } } 해당 task를 사용할 gradle.kts
apply { from("functions.gradle.kts") } 이렇게 작성하게되면 version update task를 호출 할 때 마다, version.properties에 갱신이 됩니다.
이렇게 작성한 내용을 기반으로 github action에 version update 후 commit을 만들려고 만들어봤습니다.
This article is licensed under CC BY 4.0 by the author.