From c80020c36a93a1aefedd6b37e7a82f8d09c0ce69 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 10 Mar 2017 16:56:24 -0800 Subject: [PATCH] Added AutoGitTagConfig. --- .../main/kotlin/com/beust/kobalt/misc/Git.kt | 14 ++-- .../kobalt/plugin/publish/PublishPlugin.kt | 66 ++++++++++++------- 2 files changed, 50 insertions(+), 30 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/Git.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/Git.kt index e8fec4fa..67eb8bef 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/Git.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/Git.kt @@ -6,10 +6,10 @@ import com.google.inject.Inject import java.io.File class Git @Inject constructor() { - fun maybeTagRelease(project: Project, uploadResult: TaskResult, autoGitTag: Triple) : TaskResult { + fun maybeTagRelease(project: Project, uploadResult: TaskResult, auto: Boolean, tag: String, message: String) : TaskResult { val result = - if (uploadResult.success && autoGitTag.first) { - val tagSuccess = tagRelease(project, autoGitTag) + if (uploadResult.success && auto) { + val tagSuccess = tagRelease(project, auto, tag, message) if (! tagSuccess) { TaskResult(false, "Couldn't tag the project") } else { @@ -21,9 +21,9 @@ class Git @Inject constructor() { return result } - private fun tagRelease(project: Project, autoGitTag: Triple) : Boolean { + private fun tagRelease(project: Project, auto: Boolean, tag: String, message: String) : Boolean { + val version = if (tag.isNullOrBlank()) project.version else tag val success = try { - val version = if (autoGitTag.second.isNullOrBlank()) project.version else autoGitTag.second log(2, "Tagging this release as \"$version\"") val repo = org.eclipse.jgit.storage.file.FileRepositoryBuilder() .setGitDir(File(KFiles.joinDir(project.directory, ".git"))) @@ -31,11 +31,11 @@ class Git @Inject constructor() { .findGitDir() .build() val git = org.eclipse.jgit.api.Git(repo) - val ref = git.tag().setName(version).setMessage(autoGitTag.third).call() + val ref = git.tag().setName(version).setMessage(message).call() git.push().setPushTags().call() true } catch(ex: Exception) { - warn("Couldn't create tag ${project.version}: ${ex.message}", ex) + warn("Couldn't create tag ${version}: ${ex.message}", ex) false } diff --git a/src/main/kotlin/com/beust/kobalt/plugin/publish/PublishPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/publish/PublishPlugin.kt index 78753ccc..122c536f 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/publish/PublishPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/publish/PublishPlugin.kt @@ -112,6 +112,7 @@ class PublishPlugin @Inject constructor(val files: KFiles, val factory: PomGener val jcenter = bintrayFactory.create(user, password, org) var success = false val configuration = bintrayConfigurations[project.name] + val autoGitTagConfig = autoGitTagConfigurations[project.name] val messages = arrayListOf() val tmpResult = @@ -133,7 +134,13 @@ class PublishPlugin @Inject constructor(val files: KFiles, val factory: PomGener messages.add(taskResult.errorMessage!!) } } - git.maybeTagRelease(project, TaskResult(), configuration.autoGitTag) + if (autoGitTagConfig != null) { + with(autoGitTagConfig) { + git.maybeTagRelease(project, TaskResult(), auto, tag, message) + } + } else { + TaskResult() + } } else { context.logger.log(project.name, 2, "Couldn't find any jcenter{} configuration, not uploading anything") TaskResult() @@ -153,6 +160,7 @@ class PublishPlugin @Inject constructor(val files: KFiles, val factory: PomGener private fun uploadGithub(project: Project) : TaskResult { val configuration = githubConfigurations[project.name] + val autoGitTagConfig = autoGitTagConfigurations[project.name] // // Upload individual files, if applicable @@ -163,7 +171,13 @@ class PublishPlugin @Inject constructor(val files: KFiles, val factory: PomGener logk(project.name, 2, "Uploading $it tag: ${project.version}") github.uploadRelease(project.name, project.version!!, it) } - git.maybeTagRelease(project, TaskResult(), configuration.autoGitTag) + if (autoGitTagConfig != null) { + with(autoGitTagConfig) { + git.maybeTagRelease(project, TaskResult(), auto, tag, message) + } + } else { + TaskResult() + } } else { warn("Couldn't find any github{} configuration, not uploading anything") TaskResult() @@ -187,20 +201,29 @@ class PublishPlugin @Inject constructor(val files: KFiles, val factory: PomGener fun addGithubConfiguration(projectName: String, config: GithubConfig) { githubConfigurations.put(projectName, config) } + + /** + * Map of project name -> AutoGitTagConfiguration + */ + private val autoGitTagConfigurations = hashMapOf() + fun addAutoGitTagConfiguration(projectName: String, config: AutoGitTagConfig) { + autoGitTagConfigurations.put(projectName, config) + } +} + +data class AutoGitTagConfig(val project: Project) { + @Directive + var auto: Boolean = true + + @Directive + var tag : String = project.version!! + + @Directive + var message : String = "" } data class GithubConfig(val project: Project) { val files = arrayListOf() - var autoGitTag = Triple(true, project.version!!, "") - - /** - * If true, automatically tag this release with the current version number and push that tag to origin when - * the uploadGithub task is called. - */ - @Directive - fun autoGitTag(auto: Boolean = autoGitTag.first, tag: String = project.version!!, message: String = autoGitTag.third) { - autoGitTag = Triple(auto, tag, message) - } @Directive fun file(filePath: String, url: String) { @@ -215,9 +238,8 @@ fun Project.github(init: GithubConfig.() -> Unit): GithubConfig = (Kobalt.findPlugin(PublishPlugin.PLUGIN_NAME) as PublishPlugin).addGithubConfiguration(name, config) } -data class BintrayConfig(val project: Project) { +data class BintrayConfig(val project: Project) { val files = arrayListOf>() - var autoGitTag = Triple(true, project.version!!, "") /** * If true, the uploaded file will be published in your personal space (e.g. https://dl.bintray.com/cbeust/maven). @@ -234,15 +256,6 @@ data class BintrayConfig(val project: Project) { @Directive var sign: Boolean = false - /** - * If true, automatically tag this release with the current version number and push that tag to origin when - * the uploadBintray task is called. - */ - @Directive - fun autoGitTag(auto: Boolean = autoGitTag.first, tag: String = project.version!!, message: String = autoGitTag.third) { - autoGitTag = Triple(auto, tag, message) - } - @Directive fun file(filePath: String, url: String) { files.add(Pair(filePath, url)) @@ -261,3 +274,10 @@ fun Project.bintray(init: BintrayConfig.() -> Unit) = config.init() (Kobalt.findPlugin(PublishPlugin.PLUGIN_NAME) as PublishPlugin).addBintrayConfiguration(name, config) } + +@Directive +fun Project.autoGitTag(init: AutoGitTagConfig.() -> Unit) = + AutoGitTagConfig(this).also { config -> + config.init() + (Kobalt.findPlugin(PublishPlugin.PLUGIN_NAME) as PublishPlugin).addAutoGitTagConfiguration(name, config) + }