Implement proper artifacts signing, add missing install and publish tasks

This commit is contained in:
Ilya Chernikov
2017-08-31 15:00:48 +03:00
parent 08e2ee0951
commit e7ac8443ee
2 changed files with 96 additions and 46 deletions
+6 -1
View File
@@ -75,6 +75,7 @@ extra["distKotlinHomeDir"] = distKotlinHomeDir
extra["distLibDir"] = project.file(distLibDir) extra["distLibDir"] = project.file(distLibDir)
extra["libsDir"] = project.file(distLibDir) extra["libsDir"] = project.file(distLibDir)
extra["ideaPluginDir"] = project.file(ideaPluginDir) extra["ideaPluginDir"] = project.file(ideaPluginDir)
extra["isSonatypeRelease"] = false
Properties().apply { Properties().apply {
load(File(rootDir, "resources", "kotlinManifest.properties").reader()) load(File(rootDir, "resources", "kotlinManifest.properties").reader())
@@ -141,7 +142,11 @@ apply {
from("libraries/commonConfiguration.gradle") from("libraries/commonConfiguration.gradle")
from("libraries/gradlePluginsConfiguration.gradle") from("libraries/gradlePluginsConfiguration.gradle")
from("libraries/configureGradleTools.gradle") from("libraries/configureGradleTools.gradle")
// from("libraries/prepareSonatypeStaging.gradle")
if (extra["isSonatypeRelease"] as? Boolean == true) {
logger.info("Applying configuration for sonatype release")
from("libraries/prepareSonatypeStaging.gradle")
}
} }
val importedAntTasksPrefix = "imported-ant-update-" val importedAntTasksPrefix = "imported-ant-update-"
@@ -3,12 +3,14 @@ package plugins
import org.codehaus.groovy.runtime.InvokerHelper import org.codehaus.groovy.runtime.InvokerHelper
import org.gradle.api.Plugin import org.gradle.api.Plugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.artifacts.dsl.RepositoryHandler import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.maven.GroovyMavenDeployer import org.gradle.api.artifacts.maven.MavenResolver
import org.gradle.api.plugins.MavenRepositoryHandlerConvention import org.gradle.api.plugins.MavenRepositoryHandlerConvention
import org.gradle.api.tasks.Upload import org.gradle.api.tasks.Upload
import org.gradle.kotlin.dsl.* import org.gradle.kotlin.dsl.*
import org.gradle.plugins.signing.Sign
import org.gradle.plugins.signing.SigningExtension
/** /**
@@ -23,26 +25,27 @@ open class PublishedKotlinModule : Plugin<Project> {
plugins.apply("maven") plugins.apply("maven")
(tasks.getByName("uploadArchives") as Upload).apply { if (!project.hasProperty("prebuiltJar")) {
plugins.apply("signing")
val preparePublication = project.rootProject.tasks.getByName("preparePublication") val signingProp = project.rootProject.properties["signingRequired"]
dependsOn(preparePublication) val signingRequired = when (signingProp) {
is Boolean -> signingProp == true
is String -> listOf("true", "yes").contains(signingProp.toLowerCase().trim())
else -> project.rootProject.extra["isSonatypeRelease"] as? Boolean == true
}
val username: String? by preparePublication.extra configure<SigningExtension> {
val password: String? by preparePublication.extra isRequired = signingRequired
sign(configurations["archives"])
}
repositories { (tasks.getByName("signArchives") as Sign).apply {
withConvention(MavenRepositoryHandlerConvention::class) { enabled = signingRequired
mavenDeployer {
withGroovyBuilder {
"repository"("url" to uri(preparePublication.extra["repoUrl"]))
if (username != null && password != null) {
"authentication"("userName" to username, "password" to password)
} }
} }
fun MavenResolver.configurePom() {
pom.project { pom.project {
withGroovyBuilder { withGroovyBuilder {
"licenses" { "licenses" {
@@ -85,9 +88,51 @@ open class PublishedKotlinModule : Plugin<Project> {
} }
} }
} }
val preparePublication = project.rootProject.tasks.getByName("preparePublication")
val uploadArchives = (tasks.getByName("uploadArchives") as Upload).apply {
dependsOn(preparePublication)
val username: String? by preparePublication.extra
val password: String? by preparePublication.extra
repositories {
withConvention(MavenRepositoryHandlerConvention::class) {
mavenDeployer {
withGroovyBuilder {
"repository"("url" to uri(preparePublication.extra["repoUrl"]))
if (username != null && password != null) {
"authentication"("userName" to username, "password" to password)
}
}
configurePom()
} }
} }
} }
} }
val install = if (tasks.names.contains("install")) tasks.getByName("install") as Upload
else tasks.create("install", Upload::class.java)
install.apply {
configuration = project.configurations.getByName(Dependency.ARCHIVES_CONFIGURATION)
description = "Installs the 'archives' artifacts into the local Maven repository."
repositories {
withConvention(MavenRepositoryHandlerConvention::class) {
mavenInstaller {
configurePom()
}
}
}
}
tasks.create("publish") {
dependsOn(uploadArchives)
}
}
} }
} }