Rework registration of release tasks

This commit is contained in:
Iaroslav Postovalov 2022-03-09 00:51:00 +07:00
parent 25c1c45818
commit 572cbce67f
2 changed files with 37 additions and 35 deletions

View File

@ -5,7 +5,7 @@ atomicfu = "0.17.1"
binary-compatibility-validator = "0.8.0"
changelog = "1.3.1"
dokka = "1.6.10"
kotlin-jupyter = "0.11.0-53"
kotlin-jupyter = "0.11.0-62"
kotlinx-benchmark = "0.4.2"
kotlinx-cli = "0.3.4"
kotlinx-collections-immutable = "0.3.5"

View File

@ -4,7 +4,9 @@ import kotlinx.validation.ApiValidationExtension
import kotlinx.validation.BinaryCompatibilityValidatorPlugin
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.plugins.BasePluginExtension
import org.gradle.api.publish.maven.tasks.PublishToMavenLocal
import org.gradle.api.publish.maven.tasks.PublishToMavenRepository
import org.gradle.kotlin.dsl.*
import org.jetbrains.changelog.ChangelogPlugin
import org.jetbrains.changelog.ChangelogPluginExtension
@ -12,11 +14,12 @@ import org.jetbrains.dokka.gradle.AbstractDokkaTask
import org.jetbrains.dokka.gradle.DokkaPlugin
import ru.mipt.npm.gradle.internal.*
private fun Project.allTasks(): Set<Task> = allprojects.flatMapTo(HashSet()) { it.tasks }
@Suppress("unused")
/**
* Simplifies adding repositories for Maven publishing, responds for releasing tasks for projects.
*/
public class KSciencePublishingExtension(public val project: Project) {
private var isVcsInitialized = false
internal val repositoryNames = mutableSetOf<String>()
@Deprecated("Use git function and report an issue if other VCS is used.")
public fun vcs(vcsUrl: String) {
@ -53,22 +56,6 @@ public class KSciencePublishingExtension(public val project: Project) {
}
}
private fun linkPublicationsToReleaseTask(name: String) = project.afterEvaluate {
allTasks()
.filter { it.name.startsWith("publish") && it.name.endsWith("To${name.capitalize()}Repository") }
.forEach {
val theName = "release${it.name.removePrefix("publish").removeSuffix("To${name.capitalize()}Repository")}"
logger.info("Making $theName task depend on ${it.name}")
val releaseTask = project.tasks.findByName(theName) ?: project.tasks.create(theName) {
group = KScienceProjectPlugin.RELEASE_GROUP
description = "Publish development or production release based on version suffix"
}
releaseTask.dependsOn(it)
}
}
/**
* Adds GitHub as VCS and adds GitHub Packages Maven repository to publishing.
*
@ -89,7 +76,7 @@ public class KSciencePublishingExtension(public val project: Project) {
if (addToRelease) {
try {
project.addGithubPublishing(githubOrg, githubProject)
linkPublicationsToReleaseTask("github")
repositoryNames += "github"
} catch (t: Throwable) {
project.logger.error("Failed to set up github publication", t)
}
@ -108,15 +95,9 @@ public class KSciencePublishingExtension(public val project: Project) {
) {
project.addSpacePublishing(spaceRepo)
if (addToRelease) linkPublicationsToReleaseTask("space")
if (addToRelease) repositoryNames += "space"
}
// // Bintray publishing
// var bintrayOrg: String? by project.extra
// var bintrayUser: String? by project.extra
// var bintrayApiKey: String? by project.extra
// var bintrayRepo: String? by project.extra
/**
* Adds Sonatype Maven repository to publishing.
*
@ -128,7 +109,7 @@ public class KSciencePublishingExtension(public val project: Project) {
require(isVcsInitialized) { "The project vcs is not set up use 'git' method to do so" }
project.addSonatypePublishing()
if (addToRelease) linkPublicationsToReleaseTask("sonatype")
if (addToRelease) repositoryNames += "sonatype"
}
}
@ -139,7 +120,6 @@ public class KSciencePublishingExtension(public val project: Project) {
public open class KScienceProjectPlugin : Plugin<Project> {
override fun apply(target: Project): Unit = target.run {
apply<ChangelogPlugin>()
apply<DokkaPlugin>()
apply<BinaryCompatibilityValidatorPlugin>()
@ -156,7 +136,8 @@ public open class KScienceProjectPlugin : Plugin<Project> {
}
val rootReadmeExtension = KScienceReadmeExtension(this)
extensions.add("ksciencePublish", KSciencePublishingExtension(this))
val ksciencePublish = KSciencePublishingExtension(this)
extensions.add("ksciencePublish", ksciencePublish)
extensions.add("readme", rootReadmeExtension)
//Add readme generators to individual subprojects
@ -192,6 +173,29 @@ public open class KScienceProjectPlugin : Plugin<Project> {
}
}
allprojects {
afterEvaluate {
ksciencePublish.repositoryNames.forEach { repositoryName ->
val repositoryNameCapitalized = repositoryName.capitalize()
tasks.withType<PublishToMavenRepository>()
.filter { it.name.startsWith("publish") && it.name.endsWith("To${repositoryNameCapitalized}Repository") }
.forEach {
val theName = "release${
it.name.removePrefix("publish").removeSuffix("To${repositoryNameCapitalized}Repository")
}"
val releaseTask = tasks.findByName(theName) ?: tasks.create(theName) {
group = RELEASE_GROUP
description = "Publish development or production release based on version suffix"
}
releaseTask.dependsOn(it)
}
}
}
}
val generateReadme by tasks.creating {
group = "documentation"
description = "Generate a README file and a feature matrix if stub is present"
@ -228,8 +232,7 @@ public open class KScienceProjectPlugin : Plugin<Project> {
val name = subproject.name
val path = subproject.path.replaceFirst(":", "").replace(":", "/")
val ext = subproject.extensions.findByType<KScienceReadmeExtension>()
appendLine("<hr/>")
appendLine("\n* ### [$name]($path)")
appendLine("\n### [$name]($path)")
if (ext != null) {
appendLine("> ${ext.description}")
appendLine(">\n> **Maturity**: ${ext.maturity}")
@ -240,7 +243,6 @@ public open class KScienceProjectPlugin : Plugin<Project> {
}
}
}
appendLine("<hr/>")
}
rootReadmeExtension.property("modules", modulesString)