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

ru.fix.gradle.release.plugin.VersionManager.kt Maven / Gradle / Ivy

Go to download

Plugin automatically creates branches and tags and changes version in project gradle.properties file.

The newest version!
package ru.fix.gradle.release.plugin

import com.github.zafarkhaja.semver.Version
import java.io.FileInputStream
import java.io.FileOutputStream
import java.nio.file.Path
import java.util.*

class InvalidMajorMinorVersion(givenVersion: String): Exception("Please specify valid version in x.y format, current is $givenVersion")

class VersionManager(
        private val git: GitRepository,
        private val userInteractor: UserInteractor) {

    fun assertValidMajorMinorVersion(version: String){
        val pattern = "(\\d+)\\.(\\d+)"
        userInteractor.info("Checking that version '$version' matches pattern '$pattern'")
        if(!Regex(pattern).matches(version)){
            throw InvalidMajorMinorVersion(version)
        }
    }


    fun supposeBranchVersion(): String {
        val versions = getExistingVersionsInDescendingOrder()
        return if (versions.isEmpty()) {
            "1.0"
        } else {
            var version = Version.valueOf(versions.first())
            version = version.incrementMinorVersion()
            "${version.majorVersion}.${version.minorVersion}"
        }
    }

    fun supposeReleaseVersion(majorVersion: String): String {
        val versions = getExistingVersionsInDescendingOrder()
                .filter { it.startsWith("$majorVersion.") }

        if (versions.isEmpty()) {
            return "$majorVersion.0"
        }
        return Version.valueOf(versions.first()).incrementPatchVersion().toString()
    }

    fun supposeReleaseVersion(): String {
        val versions = getExistingVersionsInDescendingOrder()
        if (versions.isEmpty()) {
            return "1.0.0"
        }
        return Version.valueOf(versions.first()).incrementPatchVersion().toString()
    }

    fun branchVersionExists(majorVersion: String): Boolean =
            getExistingVersionsInDescendingOrder().find { it.startsWith("$majorVersion.") } != null


    fun updateVersionInFile(filename: Path, version: String) {
        userInteractor.info("Updating file $filename to version $version")
        val props = Properties()
        props.load(FileInputStream(filename.toFile()))
        if (props.getProperty("version") != null) {
            props.setProperty("version", version)
        } else {
            userInteractor.info("There is no 'version' property in '$filename', skipping")
        }

        props.store(FileOutputStream(filename.toFile()), "")
    }

    fun extractVersionFromBranch(name: String): String = Regex(".*((\\d+)\\.(\\d+))$")
            .matchEntire(name)!!.groups[1]!!.value


    private fun getExistingVersionsInDescendingOrder(): List {
        return git.listTags()
                .filter { Regex("(\\d+)\\.(\\d+).(\\d+)").matches(it) }
                .sortedByDescending { Version.valueOf(it) }
    }


}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy