Roman Elizarov | 1f74a2d | 2018-06-29 19:19:45 +0300 | [diff] [blame] | 1 | /* |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 2 | * Copyright 2016-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. |
Roman Elizarov | 1f74a2d | 2018-06-29 19:19:45 +0300 | [diff] [blame] | 3 | */ |
| 4 | |
Roman Elizarov | 65eff0b | 2017-12-20 15:51:31 +0300 | [diff] [blame] | 5 | // Configures publishing of Maven artifacts to Bintray |
| 6 | |
| 7 | apply plugin: 'maven' |
| 8 | apply plugin: 'maven-publish' |
Vsevolod Tolstopyatov | 3781a82 | 2018-12-13 11:58:29 +0300 | [diff] [blame] | 9 | apply plugin: "com.github.johnrengelman.shadow" |
Roman Elizarov | 65eff0b | 2017-12-20 15:51:31 +0300 | [diff] [blame] | 10 | |
Vsevolod Tolstopyatov | 4ddfc91 | 2018-07-12 18:36:02 +0300 | [diff] [blame] | 11 | apply from: project.rootProject.file('gradle/maven-central.gradle') |
| 12 | |
Roman Elizarov | 79e02bb | 2017-12-26 13:08:15 +0300 | [diff] [blame] | 13 | // ------------- tasks |
| 14 | |
Vsevolod Tolstopyatov | fe4e05c | 2019-07-19 12:28:15 +0300 | [diff] [blame] | 15 | def isMultiplatform = project.name == "kotlinx-coroutines-core" |
| 16 | def isBom = project.name == "kotlinx-coroutines-bom" |
Vsevolod Tolstopyatov | 4ddfc91 | 2018-07-12 18:36:02 +0300 | [diff] [blame] | 17 | |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 18 | if (!isMultiplatform) { |
| 19 | // Regular java modules need 'java-library' plugin for proper publication |
| 20 | apply plugin: 'java-library' |
Vsevolod Tolstopyatov | e50a0fa | 2019-01-28 11:34:24 +0300 | [diff] [blame] | 21 | |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 22 | // MPP projects pack their sources automatically, java libraries need to explicitly pack them |
| 23 | task sourcesJar(type: Jar) { |
| 24 | archiveClassifier = 'sources' |
Vsevolod Tolstopyatov | 4ddfc91 | 2018-07-12 18:36:02 +0300 | [diff] [blame] | 25 | from sourceSets.main.allSource |
| 26 | } |
Roman Elizarov | 65eff0b | 2017-12-20 15:51:31 +0300 | [diff] [blame] | 27 | } |
| 28 | |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 29 | // empty xxx-javadoc.jar |
| 30 | task javadocJar(type: Jar) { |
| 31 | archiveClassifier = 'javadoc' |
Vsevolod Tolstopyatov | e50a0fa | 2019-01-28 11:34:24 +0300 | [diff] [blame] | 32 | } |
| 33 | |
Roman Elizarov | 65eff0b | 2017-12-20 15:51:31 +0300 | [diff] [blame] | 34 | publishing { |
Vsevolod Tolstopyatov | 4ddfc91 | 2018-07-12 18:36:02 +0300 | [diff] [blame] | 35 | repositories { |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 36 | maven { |
| 37 | def user = 'kotlin' |
| 38 | def repo = 'kotlinx' |
| 39 | def name = 'kotlinx.coroutines' |
| 40 | url = "https://api.bintray.com/maven/$user/$repo/$name/;publish=0" |
| 41 | |
| 42 | credentials { |
| 43 | username = project.hasProperty('bintrayUser') ? project.property('bintrayUser') : System.getenv('BINTRAY_USER') |
| 44 | password = project.hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY') |
| 45 | } |
| 46 | } |
Vsevolod Tolstopyatov | 4ddfc91 | 2018-07-12 18:36:02 +0300 | [diff] [blame] | 47 | } |
| 48 | |
Vsevolod Tolstopyatov | fe4e05c | 2019-07-19 12:28:15 +0300 | [diff] [blame] | 49 | if (isBom) { |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 50 | // Configure mavenBom publication |
Vsevolod Tolstopyatov | fe4e05c | 2019-07-19 12:28:15 +0300 | [diff] [blame] | 51 | publications { |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 52 | mavenBom(MavenPublication) {} |
Vsevolod Tolstopyatov | fe4e05c | 2019-07-19 12:28:15 +0300 | [diff] [blame] | 53 | } |
Vsevolod Tolstopyatov | fe4e05c | 2019-07-19 12:28:15 +0300 | [diff] [blame] | 54 | } else if (!isMultiplatform) { |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 55 | // Configure java publications for regular non-MPP modules |
Vsevolod Tolstopyatov | e50a0fa | 2019-01-28 11:34:24 +0300 | [diff] [blame] | 56 | publications { |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 57 | maven(MavenPublication) { |
Vsevolod Tolstopyatov | 2f50363 | 2019-07-19 14:16:14 +0300 | [diff] [blame] | 58 | if (project.name == "kotlinx-coroutines-debug") { |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 59 | project.shadow.component(it) |
Vsevolod Tolstopyatov | 2f50363 | 2019-07-19 14:16:14 +0300 | [diff] [blame] | 60 | } else { |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 61 | from components.java |
Vsevolod Tolstopyatov | 2f50363 | 2019-07-19 14:16:14 +0300 | [diff] [blame] | 62 | } |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 63 | artifact sourcesJar |
Vsevolod Tolstopyatov | e50a0fa | 2019-01-28 11:34:24 +0300 | [diff] [blame] | 64 | } |
| 65 | } |
Vsevolod Tolstopyatov | e50a0fa | 2019-01-28 11:34:24 +0300 | [diff] [blame] | 66 | } |
| 67 | |
Vsevolod Tolstopyatov | e50a0fa | 2019-01-28 11:34:24 +0300 | [diff] [blame] | 68 | publications.all { |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 69 | pom.withXml(configureMavenCentralMetadata) |
| 70 | |
| 71 | // add empty javadocs (no need for MPP root publication which publishes only pom file) |
| 72 | if (it.name != 'kotlinMultiplatform' && !isBom) { |
| 73 | it.artifact(javadocJar) |
| 74 | } |
| 75 | |
| 76 | // Rename MPP artifacts for backward compatibility |
Vsevolod Tolstopyatov | e50a0fa | 2019-01-28 11:34:24 +0300 | [diff] [blame] | 77 | def type = it.name |
| 78 | switch (type) { |
| 79 | case 'kotlinMultiplatform': |
| 80 | it.artifactId = "$project.name-native" |
Vsevolod Tolstopyatov | e50a0fa | 2019-01-28 11:34:24 +0300 | [diff] [blame] | 81 | break |
Vsevolod Tolstopyatov | e50a0fa | 2019-01-28 11:34:24 +0300 | [diff] [blame] | 82 | case 'metadata': |
| 83 | it.artifactId = "$project.name-common" |
| 84 | break |
Vsevolod Tolstopyatov | e50a0fa | 2019-01-28 11:34:24 +0300 | [diff] [blame] | 85 | case 'jvm': |
| 86 | it.artifactId = "$project.name" |
| 87 | break |
| 88 | case 'js': |
| 89 | case 'native': |
| 90 | it.artifactId = "$project.name-$type" |
| 91 | break |
| 92 | } |
| 93 | |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 94 | // disable metadata everywhere, but in native modules |
| 95 | if (type == 'maven' || type == 'metadata' || type == 'jvm' || type == 'js') { |
| 96 | moduleDescriptorGenerator = null |
Vsevolod Tolstopyatov | 3179683 | 2018-11-12 14:49:41 +0300 | [diff] [blame] | 97 | } |
| 98 | } |
| 99 | } |
| 100 | |
| 101 | task publishDevelopSnapshot() { |
| 102 | def branch = System.getenv('currentBranch') |
Vsevolod Tolstopyatov | 3179683 | 2018-11-12 14:49:41 +0300 | [diff] [blame] | 103 | if (branch == "develop") { |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 104 | dependsOn(":publish") |
Vsevolod Tolstopyatov | 3179683 | 2018-11-12 14:49:41 +0300 | [diff] [blame] | 105 | } |
| 106 | } |
| 107 | |
Roman Elizarov | d2f4b2b | 2019-09-02 17:22:39 +0300 | [diff] [blame] | 108 | // Compatibility with old TeamCity configurations that perform :kotlinx-coroutines-core:bintrayUpload |
| 109 | task bintrayUpload(dependsOn: publish) |