fix(autoversion): try to support configuration cache
This commit is contained in:
parent
d095a18b2b
commit
6c964e28ee
@ -0,0 +1,35 @@
|
|||||||
|
package io.gitlab.jfronny.scripts
|
||||||
|
|
||||||
|
import org.eclipse.jgit.api.Git
|
||||||
|
import org.gradle.api.DefaultTask
|
||||||
|
import org.gradle.api.file.DirectoryProperty
|
||||||
|
import org.gradle.api.provider.Property
|
||||||
|
import org.gradle.api.tasks.Input
|
||||||
|
import org.gradle.api.tasks.InputDirectory
|
||||||
|
import org.gradle.api.tasks.TaskAction
|
||||||
|
|
||||||
|
abstract class BumpVersionTask : DefaultTask() {
|
||||||
|
init {
|
||||||
|
description = "Bumps the version by parsing commits since the last tag and creating a new tag based on them"
|
||||||
|
}
|
||||||
|
|
||||||
|
@get:InputDirectory abstract val gitDir: DirectoryProperty
|
||||||
|
@get:Input abstract val isRelease: Property<Boolean>
|
||||||
|
@get:Input abstract val nextVersionType: Property<String>
|
||||||
|
@get:Input abstract val nextRelease: Property<SemanticVersion>
|
||||||
|
@get:Input abstract val lastRelease: Property<String>
|
||||||
|
|
||||||
|
@TaskAction
|
||||||
|
fun action() {
|
||||||
|
if (!gitDir.asFile.get().exists()) throw IllegalStateException("Cannot bump without repository")
|
||||||
|
if (isRelease.get()) throw IllegalStateException("Cannot bump while 'release' is set")
|
||||||
|
val vt = nextVersionType
|
||||||
|
.map { VersionType.byName(it) ?: throw IllegalStateException("Unrecognized version type: $this") }
|
||||||
|
.getOrThrow { IllegalStateException("bumpVersion requires you to set -PversionType=release|beta|alpha") }
|
||||||
|
val name = nextRelease.get().withType(vt).toString()
|
||||||
|
Git.open(gitDir.asFile.get()).use { git ->
|
||||||
|
git.tag().setName(name).call()
|
||||||
|
logger.warn("Created release $name (last was ${lastRelease.get()}). Make sure to push it!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package io.gitlab.jfronny.scripts
|
||||||
|
|
||||||
|
import org.gradle.api.DefaultTask
|
||||||
|
import org.gradle.api.provider.Property
|
||||||
|
import org.gradle.api.tasks.Input
|
||||||
|
import org.gradle.api.tasks.TaskAction
|
||||||
|
import java.awt.Toolkit
|
||||||
|
import java.awt.datatransfer.StringSelection
|
||||||
|
|
||||||
|
abstract class CopyTextTask : DefaultTask() {
|
||||||
|
init {
|
||||||
|
description = "Copies a piece of text to the system clipboard"
|
||||||
|
}
|
||||||
|
|
||||||
|
@get:Input abstract val text: Property<String>
|
||||||
|
|
||||||
|
@TaskAction
|
||||||
|
fun action() {
|
||||||
|
Toolkit.getDefaultToolkit().systemClipboard.setContents(StringSelection(project.versionS), null)
|
||||||
|
println("Copied version number: ${project.versionS}")
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,7 @@ import org.gradle.api.Action
|
|||||||
import org.gradle.api.DefaultTask
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.TaskContainer
|
import org.gradle.api.tasks.TaskContainer
|
||||||
import org.gradle.kotlin.dsl.extra
|
import org.gradle.kotlin.dsl.extra
|
||||||
import org.gradle.kotlin.dsl.named
|
import org.gradle.kotlin.dsl.named
|
||||||
@ -46,8 +47,14 @@ var Project.flavour: String
|
|||||||
val TaskContainer.deployDebug: Task get() = findByName("deployDebug") ?: register("deployDebug").get().dependsOn(named<DefaultTask>("build").get())
|
val TaskContainer.deployDebug: Task get() = findByName("deployDebug") ?: register("deployDebug").get().dependsOn(named<DefaultTask>("build").get())
|
||||||
val TaskContainer.deployRelease: Task get() = findByName("deployRelease") ?: register("deployRelease").get().dependsOn(deployDebug)
|
val TaskContainer.deployRelease: Task get() = findByName("deployRelease") ?: register("deployRelease").get().dependsOn(deployDebug)
|
||||||
|
|
||||||
fun Project.prop(name: String, default: String? = null): String =
|
fun Project.prop(name: String): String = property(name).toString()
|
||||||
if (default == null || hasProperty(name)) property(name).toString()
|
|
||||||
|
fun Project.prop(name: String, default: String): String =
|
||||||
|
if (hasProperty(name)) prop(name)
|
||||||
|
else default
|
||||||
|
|
||||||
|
fun Project.prop(name: String, default: String?): String? =
|
||||||
|
if (hasProperty(name)) prop(name)
|
||||||
else default
|
else default
|
||||||
|
|
||||||
// Utility to run actions on values
|
// Utility to run actions on values
|
||||||
@ -55,3 +62,7 @@ fun <T> T.runAction(action: Action<T>?): T {
|
|||||||
action?.execute(this!!)
|
action?.execute(this!!)
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun <T> Provider<T>.getOrThrow(exception: () -> Exception): T =
|
||||||
|
if (!isPresent) throw exception()
|
||||||
|
else get()
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
import io.gitlab.jfronny.scripts.*
|
import io.gitlab.jfronny.scripts.*
|
||||||
import org.eclipse.jgit.api.Git
|
import org.eclipse.jgit.api.Git
|
||||||
import java.awt.Toolkit
|
|
||||||
import java.awt.datatransfer.StringSelection
|
|
||||||
import kotlin.jvm.optionals.getOrDefault
|
import kotlin.jvm.optionals.getOrDefault
|
||||||
|
|
||||||
val isRelease = project.hasProperty("release")
|
val isRelease = project.hasProperty("release")
|
||||||
@ -60,25 +58,15 @@ if (!isRelease) {
|
|||||||
|
|
||||||
println(changelog)
|
println(changelog)
|
||||||
|
|
||||||
tasks.register("copyVersionNumber") {
|
tasks.register("copyVersionNumber", CopyTextTask::class) {
|
||||||
description = "Copy the current version number to the system clipboard"
|
description = "Copy the current version number to the system clipboard"
|
||||||
doLast {
|
text.set(versionS)
|
||||||
Toolkit.getDefaultToolkit().systemClipboard.setContents(StringSelection(versionS), null)
|
|
||||||
println("Copied version number: $versionS")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register("bumpVersion") {
|
tasks.register("bumpVersion", BumpVersionTask::class) {
|
||||||
description = "Bump the version by parsing commits since the last tag and creating a new tag based on them"
|
gitDir = File(projectDir, ".git")
|
||||||
doLast {
|
isRelease = this@Jf_autoversion_gradle.isRelease
|
||||||
if (!File(projectDir, ".git").exists()) throw IllegalStateException("Cannot bump without repository")
|
nextVersionType = project.provider { prop("nextVersionType", null) }
|
||||||
if (isRelease) throw IllegalStateException("Cannot bump while 'release' is set")
|
nextRelease = project.provider { project.nextRelease }
|
||||||
if (!project.hasProperty("versionType")) throw IllegalStateException("bumpVersion requires you to set -PversionType=release|beta|alpha")
|
lastRelease = project.provider { project.lastRelease }
|
||||||
val vt = prop("nextVersionType").run { VersionType.byName(this) ?: throw IllegalStateException("Unrecognized version type: $this") }
|
|
||||||
val name = nextRelease!!.withType(vt).toString()
|
|
||||||
Git.open(projectDir).use { git ->
|
|
||||||
git.tag().setName(name).call()
|
|
||||||
logger.warn("Created release $name (last was $lastRelease). Make sure to push it!")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user