Scripts/convention/src/main/kotlin/jf.autoversion.gradle.kts

57 lines
2.0 KiB
Plaintext

import io.gitlab.jfronny.scripts.*
import org.eclipse.jgit.api.Git
import java.awt.Toolkit
import java.awt.datatransfer.StringSelection
val isRelease = project.hasProperty("release")
versionS = "0.0.0+nogit"
versionType = VersionType.ALPHA
if (File(projectDir, ".git").exists()) {
Git.open(projectDir).use { git ->
versionS = "0.0.0+notag"
val tags: List<Tag> = git.getTags()
if (tags.isNotEmpty()) {
if (tags[0].fullMessage != null) changelog += "${tags[0].fullMessage}\n"
versionS = tags[0].name
val vt = when(versionS[0]) {
'v' -> VersionType.RELEASE
'b' -> VersionType.BETA
'a' -> VersionType.ALPHA
else -> null
}
versionType = vt ?: VersionType.RELEASE
if (vt != null) versionS = versionS.substring(1)
if (isRelease) {
changelog += "Commits in ${versionType.displayName} $versionS:\n"
changelog += git.log(if (tags.size >= 2) tags[1].peeledId else null, tags[0].peeledId)
.reversed()
.joinToString("\n") { "- ${it.shortMessage}" }
} else {
changelog += "Commits after ${versionType.displayName} $versionS:\n"
changelog += git.log(tags[0].peeledId, git.repository.resolve("HEAD"))
.reversed()
.joinToString("\n") { "- ${it.shortMessage}" }
}
} else {
changelog += "Commits after inception:\n"
changelog += git.log().all().call()
.reversed()
.joinToString("\n") { "- ${it.shortMessage}" }
}
}
} else changelog = "No changelog"
if (!isRelease) {
versionS += "-SNAPSHOT"
}
println(changelog)
tasks.register("copyVersionNumber") {
doLast {
Toolkit.getDefaultToolkit().systemClipboard.setContents(StringSelection(versionS), null)
println("Copied version number: $versionS")
}
}