All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tech.skot.tools.gradle.VersionsManagment.kt Maven / Gradle / Ivy

package tech.skot.tools.gradle

import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import org.gradle.api.Project
import tech.skot.tools.generation.writeStringTo
import java.nio.file.Files

fun Project.skVersionCodePropertiesPath() = rootProject.rootDir.toPath().resolve("skot_version_code.properties")

fun Project.skVersionCode():Int =
    Files.readAllLines(skVersionCodePropertiesPath()).first().toInt()

fun Project.skSetVersionCode(newVersionCode:Int) {
    Files.writeString(skVersionCodePropertiesPath(), newVersionCode.toString())
}

@Serializable
data class UploadedInfos(val commit:String?, val buildNumber:Int)
val json by lazy {
    Json {
        ignoreUnknownKeys = true
        encodeDefaults = true
    }
}

private fun Project.skComputeVersionCodeAndReleaseNote(nbMaxCommitsInReleaseNote:Int) {
    task("compute_version_code_and_release_note") {
        doFirst {
            println("setting version Code from server")
            println("--fetch last uploaded versionCode")
            val lastUploadedInfos:UploadedInfos? =
                try {
                    val strInfos = commandLine("scripts/versions/getLastUploadedInfos.sh")
//                    val tab = strInfos.split("_")
//                    UploadedInfos(tab[0], tab[1].toInt())
                    json.decodeFromString(UploadedInfos.serializer(), strInfos)
                }
                catch (exception:kotlin.Exception) {
                    null
                }
            println("--fetched last uploaded infos = $lastUploadedInfos")
            val currentVersionCode = skVersionCode()
            if (lastUploadedInfos != null) {
                skSetVersionCode(Math.max(lastUploadedInfos.buildNumber, currentVersionCode + 1))
                val lastCommitHashes = commandLine("git", "show", "-s", "--format=%h", "-$nbMaxCommitsInReleaseNote").split("\n").filter { it.isNotBlank() }
                val lastUploadCommitIndex = lastCommitHashes.indexOf(lastUploadedInfos.commit)
                val nbCommitsInNote = if (lastUploadCommitIndex != -1) {
                    lastUploadCommitIndex
                } else {
                    Math.min(nbMaxCommitsInReleaseNote, 1)
                }
                val noteContent = commandLine("git", "show", "-s", "--format=%m%s%n%b%n", "-$nbCommitsInNote")
                rootDir.toPath().writeStringTo("androidApp/distribution/release-note.txt", noteContent, true)

            }
        }
        group = "skot_versions"
    }
}

private fun Project.skSaveUploadedInfos() {
    task("save_uploaded_versions_infos") {
        doFirst {
            val lastCommitHash = commandLine("git", "show", "-s", "--format=%h").substringBefore("\n")
            commandLine("scripts/versions/saveLastUploadedInfos.sh", lastCommitHash)
        }
        group = "skot_versions"
    }
}



@Deprecated(
    message = "The current branch is automatically selected no need of branchEnvVariable and defaultBranch anymore",
    replaceWith = ReplaceWith("skVersionsTasks(nbMaxCommitsInReleaseNote)"),
    level = DeprecationLevel.ERROR
)
fun Project.skVersionsTasks(branchEnvVariable:String, defaultBranch:String, nbMaxCommitsInReleaseNote:Int) {
    skVersionsTasks(nbMaxCommitsInReleaseNote)
}
fun Project.skVersionsTasks(nbMaxCommitsInReleaseNote:Int) {
    skComputeVersionCodeAndReleaseNote(nbMaxCommitsInReleaseNote)
    skSaveUploadedInfos()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy