Rework registration of release tasks #39
@ -5,7 +5,7 @@ atomicfu = "0.17.1"
|
|||||||
binary-compatibility-validator = "0.8.0"
|
binary-compatibility-validator = "0.8.0"
|
||||||
changelog = "1.3.1"
|
changelog = "1.3.1"
|
||||||
dokka = "1.6.10"
|
dokka = "1.6.10"
|
||||||
kotlin-jupyter = "0.11.0-53"
|
kotlin-jupyter = "0.11.0-62"
|
||||||
kotlinx-benchmark = "0.4.2"
|
kotlinx-benchmark = "0.4.2"
|
||||||
kotlinx-cli = "0.3.4"
|
kotlinx-cli = "0.3.4"
|
||||||
kotlinx-collections-immutable = "0.3.5"
|
kotlinx-collections-immutable = "0.3.5"
|
||||||
|
@ -4,7 +4,9 @@ import kotlinx.validation.ApiValidationExtension
|
|||||||
import kotlinx.validation.BinaryCompatibilityValidatorPlugin
|
import kotlinx.validation.BinaryCompatibilityValidatorPlugin
|
||||||
import org.gradle.api.Plugin
|
import org.gradle.api.Plugin
|
||||||
import org.gradle.api.Project
|
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.gradle.kotlin.dsl.*
|
||||||
import org.jetbrains.changelog.ChangelogPlugin
|
import org.jetbrains.changelog.ChangelogPlugin
|
||||||
import org.jetbrains.changelog.ChangelogPluginExtension
|
import org.jetbrains.changelog.ChangelogPluginExtension
|
||||||
@ -12,11 +14,12 @@ import org.jetbrains.dokka.gradle.AbstractDokkaTask
|
|||||||
import org.jetbrains.dokka.gradle.DokkaPlugin
|
import org.jetbrains.dokka.gradle.DokkaPlugin
|
||||||
import ru.mipt.npm.gradle.internal.*
|
import ru.mipt.npm.gradle.internal.*
|
||||||
|
|
||||||
private fun Project.allTasks(): Set<Task> = allprojects.flatMapTo(HashSet()) { it.tasks }
|
/**
|
||||||
|
* Simplifies adding repositories for Maven publishing, responds for releasing tasks for projects.
|
||||||
@Suppress("unused")
|
*/
|
||||||
public class KSciencePublishingExtension(public val project: Project) {
|
public class KSciencePublishingExtension(public val project: Project) {
|
||||||
private var isVcsInitialized = false
|
private var isVcsInitialized = false
|
||||||
|
internal val repositoryNames = mutableSetOf<String>()
|
||||||
|
|
||||||
@Deprecated("Use git function and report an issue if other VCS is used.")
|
@Deprecated("Use git function and report an issue if other VCS is used.")
|
||||||
public fun vcs(vcsUrl: String) {
|
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.
|
* 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) {
|
if (addToRelease) {
|
||||||
try {
|
try {
|
||||||
project.addGithubPublishing(githubOrg, githubProject)
|
project.addGithubPublishing(githubOrg, githubProject)
|
||||||
linkPublicationsToReleaseTask("github")
|
repositoryNames += "github"
|
||||||
} catch (t: Throwable) {
|
} catch (t: Throwable) {
|
||||||
project.logger.error("Failed to set up github publication", t)
|
project.logger.error("Failed to set up github publication", t)
|
||||||
}
|
}
|
||||||
@ -108,15 +95,9 @@ public class KSciencePublishingExtension(public val project: Project) {
|
|||||||
) {
|
) {
|
||||||
project.addSpacePublishing(spaceRepo)
|
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.
|
* 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" }
|
require(isVcsInitialized) { "The project vcs is not set up use 'git' method to do so" }
|
||||||
project.addSonatypePublishing()
|
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> {
|
public open class KScienceProjectPlugin : Plugin<Project> {
|
||||||
override fun apply(target: Project): Unit = target.run {
|
override fun apply(target: Project): Unit = target.run {
|
||||||
apply<ChangelogPlugin>()
|
apply<ChangelogPlugin>()
|
||||||
|
|
||||||
apply<DokkaPlugin>()
|
apply<DokkaPlugin>()
|
||||||
apply<BinaryCompatibilityValidatorPlugin>()
|
apply<BinaryCompatibilityValidatorPlugin>()
|
||||||
|
|
||||||
@ -156,7 +136,8 @@ public open class KScienceProjectPlugin : Plugin<Project> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val rootReadmeExtension = KScienceReadmeExtension(this)
|
val rootReadmeExtension = KScienceReadmeExtension(this)
|
||||||
extensions.add("ksciencePublish", KSciencePublishingExtension(this))
|
val ksciencePublish = KSciencePublishingExtension(this)
|
||||||
|
extensions.add("ksciencePublish", ksciencePublish)
|
||||||
extensions.add("readme", rootReadmeExtension)
|
extensions.add("readme", rootReadmeExtension)
|
||||||
|
|
||||||
//Add readme generators to individual subprojects
|
//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 {
|
val generateReadme by tasks.creating {
|
||||||
group = "documentation"
|
group = "documentation"
|
||||||
description = "Generate a README file and a feature matrix if stub is present"
|
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 name = subproject.name
|
||||||
val path = subproject.path.replaceFirst(":", "").replace(":", "/")
|
val path = subproject.path.replaceFirst(":", "").replace(":", "/")
|
||||||
val ext = subproject.extensions.findByType<KScienceReadmeExtension>()
|
val ext = subproject.extensions.findByType<KScienceReadmeExtension>()
|
||||||
appendLine("<hr/>")
|
appendLine("\n### [$name]($path)")
|
||||||
appendLine("\n* ### [$name]($path)")
|
|
||||||
if (ext != null) {
|
if (ext != null) {
|
||||||
appendLine("> ${ext.description}")
|
appendLine("> ${ext.description}")
|
||||||
appendLine(">\n> **Maturity**: ${ext.maturity}")
|
appendLine(">\n> **Maturity**: ${ext.maturity}")
|
||||||
@ -240,7 +243,6 @@ public open class KScienceProjectPlugin : Plugin<Project> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
appendLine("<hr/>")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rootReadmeExtension.property("modules", modulesString)
|
rootReadmeExtension.property("modules", modulesString)
|
||||||
|
Loading…
Reference in New Issue
Block a user