blob: 3a0a4224ab9259a8f8cb23719cd6feea0f0111aa [file] [log] [blame]
Roman Elizarov1f74a2d2018-06-29 19:19:45 +03001/*
Vsevolod Tolstopyatov41a2e302021-02-04 07:16:48 -08002 * Copyright 2016-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
Roman Elizarov1f74a2d2018-06-29 19:19:45 +03003 */
4
Vsevolod Tolstopyatov41a2e302021-02-04 07:16:48 -08005import org.gradle.util.VersionNumber
6
Vsevolod Tolstopyatov347feed2021-04-22 12:58:39 +03007// Configures publishing of Maven artifacts to Maven Central
Roman Elizarov65eff0b2017-12-20 15:51:31 +03008
9apply plugin: 'maven'
10apply plugin: 'maven-publish'
Vsevolod Tolstopyatovc9905682020-12-31 06:01:07 -080011apply plugin: 'signing'
Roman Elizarov65eff0b2017-12-20 15:51:31 +030012
Roman Elizarov79e02bb2017-12-26 13:08:15 +030013// ------------- tasks
14
Vsevolod Tolstopyatovfe4e05c2019-07-19 12:28:15 +030015def isMultiplatform = project.name == "kotlinx-coroutines-core"
16def isBom = project.name == "kotlinx-coroutines-bom"
Vsevolod Tolstopyatov4ddfc912018-07-12 18:36:02 +030017
Sergey Shatunovc5a42da2019-09-22 19:50:35 +070018if (!isBom) {
19 apply plugin: "com.github.johnrengelman.shadow"
20
21 // empty xxx-javadoc.jar
22 task javadocJar(type: Jar) {
23 archiveClassifier = 'javadoc'
24 }
25}
26
27if (!isMultiplatform && !isBom) {
Roman Elizarovd2f4b2b2019-09-02 17:22:39 +030028 // Regular java modules need 'java-library' plugin for proper publication
29 apply plugin: 'java-library'
Vsevolod Tolstopyatove50a0fa2019-01-28 11:34:24 +030030
Roman Elizarovd2f4b2b2019-09-02 17:22:39 +030031 // MPP projects pack their sources automatically, java libraries need to explicitly pack them
32 task sourcesJar(type: Jar) {
33 archiveClassifier = 'sources'
Vsevolod Tolstopyatov4ddfc912018-07-12 18:36:02 +030034 from sourceSets.main.allSource
35 }
Roman Elizarov65eff0b2017-12-20 15:51:31 +030036}
37
38publishing {
Vsevolod Tolstopyatov4ddfc912018-07-12 18:36:02 +030039 repositories {
Vsevolod Tolstopyatov347feed2021-04-22 12:58:39 +030040 PublishingKt.configureMavenPublication(delegate, project)
Vsevolod Tolstopyatov4ddfc912018-07-12 18:36:02 +030041 }
42
Sergey Shatunovc5a42da2019-09-22 19:50:35 +070043 if (!isMultiplatform && !isBom) {
Roman Elizarovd2f4b2b2019-09-02 17:22:39 +030044 // Configure java publications for regular non-MPP modules
Vsevolod Tolstopyatove50a0fa2019-01-28 11:34:24 +030045 publications {
Roman Elizarovd2f4b2b2019-09-02 17:22:39 +030046 maven(MavenPublication) {
Vsevolod Tolstopyatov2f503632019-07-19 14:16:14 +030047 if (project.name == "kotlinx-coroutines-debug") {
Roman Elizarovd2f4b2b2019-09-02 17:22:39 +030048 project.shadow.component(it)
Vsevolod Tolstopyatov2f503632019-07-19 14:16:14 +030049 } else {
Roman Elizarovd2f4b2b2019-09-02 17:22:39 +030050 from components.java
Vsevolod Tolstopyatov2f503632019-07-19 14:16:14 +030051 }
Roman Elizarovd2f4b2b2019-09-02 17:22:39 +030052 artifact sourcesJar
Vsevolod Tolstopyatove50a0fa2019-01-28 11:34:24 +030053 }
54 }
Vsevolod Tolstopyatove50a0fa2019-01-28 11:34:24 +030055 }
56
Vsevolod Tolstopyatove50a0fa2019-01-28 11:34:24 +030057 publications.all {
Vsevolod Tolstopyatovc9905682020-12-31 06:01:07 -080058 PublishingKt.configureMavenCentralMetadata(pom, project)
Vsevolod Tolstopyatov347feed2021-04-22 12:58:39 +030059 PublishingKt.signPublicationIfKeyPresent(project, it)
Sergey Igushkin17248c82020-05-22 12:28:25 +030060 // add empty javadocs
61 if (!isBom && it.name != "kotlinMultiplatform") {
Roman Elizarovd2f4b2b2019-09-02 17:22:39 +030062 it.artifact(javadocJar)
63 }
64
Vsevolod Tolstopyatove50a0fa2019-01-28 11:34:24 +030065 def type = it.name
66 switch (type) {
67 case 'kotlinMultiplatform':
Sergey Igushkin17248c82020-05-22 12:28:25 +030068 // With Kotlin 1.4 & HMPP, the root module should have no suffix in the ID, but for compatibility with
69 // the consumers who can't read Gradle module metadata, we publish the JVM artifacts in it, too
Vsevolod Tolstopyatov520afcb2020-12-18 05:56:22 -080070 it.artifactId = project.name
71 apply from: "$rootDir/gradle/publish-mpp-root-module-in-platform.gradle"
72 publishPlatformArtifactsInRootModule(publications["jvm"])
Vsevolod Tolstopyatove50a0fa2019-01-28 11:34:24 +030073 break
Vsevolod Tolstopyatove50a0fa2019-01-28 11:34:24 +030074 case 'metadata':
Vsevolod Tolstopyatove50a0fa2019-01-28 11:34:24 +030075 case 'jvm':
Vsevolod Tolstopyatove50a0fa2019-01-28 11:34:24 +030076 case 'js':
77 case 'native':
78 it.artifactId = "$project.name-$type"
79 break
80 }
Vsevolod Tolstopyatov31796832018-11-12 14:49:41 +030081 }
82}
83
Sergey Igushkin17248c82020-05-22 12:28:25 +030084tasks.matching { it.name == "generatePomFileForKotlinMultiplatformPublication"}.configureEach {
85 dependsOn(tasks["generatePomFileForJvmPublication"])
86}
87
Roman Elizarovd2f4b2b2019-09-02 17:22:39 +030088// Compatibility with old TeamCity configurations that perform :kotlinx-coroutines-core:bintrayUpload
Sergey Shatunovc5a42da2019-09-22 19:50:35 +070089task bintrayUpload(dependsOn: publish)