1*57b5a4a6SAndroid Build Coastguard Worker/* 2*57b5a4a6SAndroid Build Coastguard Worker * Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3*57b5a4a6SAndroid Build Coastguard Worker */ 4*57b5a4a6SAndroid Build Coastguard Worker 5*57b5a4a6SAndroid Build Coastguard Worker// Configures publishing of Maven artifacts to MavenCentral 6*57b5a4a6SAndroid Build Coastguard Worker 7*57b5a4a6SAndroid Build Coastguard Workerapply plugin: 'maven-publish' 8*57b5a4a6SAndroid Build Coastguard Workerapply plugin: 'signing' 9*57b5a4a6SAndroid Build Coastguard Worker 10*57b5a4a6SAndroid Build Coastguard Workerapply from: project.rootProject.file('gradle/maven-metadata.gradle') 11*57b5a4a6SAndroid Build Coastguard Worker 12*57b5a4a6SAndroid Build Coastguard Workerdef isMultiplatform = project.name in ["kotlinx-serialization-core", "kotlinx-serialization-json", "kotlinx-serialization-json-okio", 13*57b5a4a6SAndroid Build Coastguard Worker "kotlinx-serialization-json-tests", "kotlinx-serialization-protobuf", "kotlinx-serialization-cbor", 14*57b5a4a6SAndroid Build Coastguard Worker "kotlinx-serialization-properties"] 15*57b5a4a6SAndroid Build Coastguard Workerdef isBom = project.name == "kotlinx-serialization-bom" 16*57b5a4a6SAndroid Build Coastguard Worker 17*57b5a4a6SAndroid Build Coastguard Workerif (!isBom) { 18*57b5a4a6SAndroid Build Coastguard Worker task stubSources(type: Jar) { 19*57b5a4a6SAndroid Build Coastguard Worker archiveClassifier = 'sources' 20*57b5a4a6SAndroid Build Coastguard Worker } 21*57b5a4a6SAndroid Build Coastguard Worker 22*57b5a4a6SAndroid Build Coastguard Worker task stubJavadoc(type: Jar) { 23*57b5a4a6SAndroid Build Coastguard Worker archiveClassifier = 'javadoc' 24*57b5a4a6SAndroid Build Coastguard Worker } 25*57b5a4a6SAndroid Build Coastguard Worker} 26*57b5a4a6SAndroid Build Coastguard Worker 27*57b5a4a6SAndroid Build Coastguard Workertask emptyJar(type: Jar) { 28*57b5a4a6SAndroid Build Coastguard Worker} 29*57b5a4a6SAndroid Build Coastguard Worker 30*57b5a4a6SAndroid Build Coastguard WorkerafterEvaluate { 31*57b5a4a6SAndroid Build Coastguard Worker task mainSourcesJar(type: Jar) { 32*57b5a4a6SAndroid Build Coastguard Worker classifier = 'sources' 33*57b5a4a6SAndroid Build Coastguard Worker if (isMultiplatform) { 34*57b5a4a6SAndroid Build Coastguard Worker from kotlin.sourceSets.commonMain.kotlin 35*57b5a4a6SAndroid Build Coastguard Worker } else if (isBom) { 36*57b5a4a6SAndroid Build Coastguard Worker // no-op: sourceSets is [] for BOM, as it does not have sources. 37*57b5a4a6SAndroid Build Coastguard Worker } else { 38*57b5a4a6SAndroid Build Coastguard Worker from sourceSets.main.allSource 39*57b5a4a6SAndroid Build Coastguard Worker } 40*57b5a4a6SAndroid Build Coastguard Worker } 41*57b5a4a6SAndroid Build Coastguard Worker} 42*57b5a4a6SAndroid Build Coastguard Worker 43*57b5a4a6SAndroid Build Coastguard WorkerafterEvaluate { 44*57b5a4a6SAndroid Build Coastguard Worker publishing { 45*57b5a4a6SAndroid Build Coastguard Worker def variantName = "${project.name}" 46*57b5a4a6SAndroid Build Coastguard Worker 47*57b5a4a6SAndroid Build Coastguard Worker if (!isMultiplatform && !isBom) { 48*57b5a4a6SAndroid Build Coastguard Worker publications { 49*57b5a4a6SAndroid Build Coastguard Worker maven(MavenPublication) { publication -> 50*57b5a4a6SAndroid Build Coastguard Worker artifactId variantName 51*57b5a4a6SAndroid Build Coastguard Worker publication.from components.java 52*57b5a4a6SAndroid Build Coastguard Worker publication.artifact mainSourcesJar 53*57b5a4a6SAndroid Build Coastguard Worker artifact stubJavadoc 54*57b5a4a6SAndroid Build Coastguard Worker 55*57b5a4a6SAndroid Build Coastguard Worker PublishingKt.configureMavenCentralMetadata(publication.pom, project) 56*57b5a4a6SAndroid Build Coastguard Worker PublishingKt.signPublicationIfKeyPresent(project, publication) 57*57b5a4a6SAndroid Build Coastguard Worker } 58*57b5a4a6SAndroid Build Coastguard Worker } 59*57b5a4a6SAndroid Build Coastguard Worker 60*57b5a4a6SAndroid Build Coastguard Worker return 61*57b5a4a6SAndroid Build Coastguard Worker } 62*57b5a4a6SAndroid Build Coastguard Worker 63*57b5a4a6SAndroid Build Coastguard Worker // Rename artifacts for backward compatibility 64*57b5a4a6SAndroid Build Coastguard Worker publications.all { 65*57b5a4a6SAndroid Build Coastguard Worker def type = it.name 66*57b5a4a6SAndroid Build Coastguard Worker logger.info("Configuring $type") 67*57b5a4a6SAndroid Build Coastguard Worker switch (type) { 68*57b5a4a6SAndroid Build Coastguard Worker case 'kotlinMultiplatform': 69*57b5a4a6SAndroid Build Coastguard Worker // With Kotlin 1.4.0, the root module ID has no suffix, but for compatibility with 70*57b5a4a6SAndroid Build Coastguard Worker // the consumers who can't read Gradle module metadata, we publish the JVM artifacts in it 71*57b5a4a6SAndroid Build Coastguard Worker it.artifactId = variantName 72*57b5a4a6SAndroid Build Coastguard Worker apply from: "$rootDir/gradle/publish-mpp-root-module-in-platform.gradle" 73*57b5a4a6SAndroid Build Coastguard Worker publishPlatformArtifactsInRootModule(publications["jvm"]) 74*57b5a4a6SAndroid Build Coastguard Worker break 75*57b5a4a6SAndroid Build Coastguard Worker case 'metadata': 76*57b5a4a6SAndroid Build Coastguard Worker case 'jvm': 77*57b5a4a6SAndroid Build Coastguard Worker case 'js': 78*57b5a4a6SAndroid Build Coastguard Worker it.artifactId = "$variantName-$type" 79*57b5a4a6SAndroid Build Coastguard Worker break 80*57b5a4a6SAndroid Build Coastguard Worker } 81*57b5a4a6SAndroid Build Coastguard Worker logger.info("Artifact id = ${it.artifactId}") 82*57b5a4a6SAndroid Build Coastguard Worker 83*57b5a4a6SAndroid Build Coastguard Worker PublishingKt.configureMavenCentralMetadata(pom, project) 84*57b5a4a6SAndroid Build Coastguard Worker PublishingKt.signPublicationIfKeyPresent(project, it) 85*57b5a4a6SAndroid Build Coastguard Worker 86*57b5a4a6SAndroid Build Coastguard Worker // The 'root' module publishes the JVM module's Javadoc JAR as per publishPlatformArtifactsInRootModule, and 87*57b5a4a6SAndroid Build Coastguard Worker // every other module should publish an empty Javadoc JAR. TODO: provide proper documentation artifacts? 88*57b5a4a6SAndroid Build Coastguard Worker if (name != "kotlinMultiplatform" && !isBom) { 89*57b5a4a6SAndroid Build Coastguard Worker artifact stubJavadoc 90*57b5a4a6SAndroid Build Coastguard Worker } 91*57b5a4a6SAndroid Build Coastguard Worker } 92*57b5a4a6SAndroid Build Coastguard Worker } 93*57b5a4a6SAndroid Build Coastguard Worker} 94*57b5a4a6SAndroid Build Coastguard Worker 95*57b5a4a6SAndroid Build Coastguard Workerpublishing { 96*57b5a4a6SAndroid Build Coastguard Worker repositories { 97*57b5a4a6SAndroid Build Coastguard Worker PublishingKt.configureMavenPublication(delegate, project) 98*57b5a4a6SAndroid Build Coastguard Worker } 99*57b5a4a6SAndroid Build Coastguard Worker} 100*57b5a4a6SAndroid Build Coastguard Worker 101*57b5a4a6SAndroid Build Coastguard Worker// Compatibility with old TeamCity configurations that perform :kotlinx-coroutines-core:bintrayUpload 102*57b5a4a6SAndroid Build Coastguard Workertask bintrayUpload(dependsOn: publish) 103*57b5a4a6SAndroid Build Coastguard Worker 104*57b5a4a6SAndroid Build Coastguard Worker// This is required for K/N publishing 105*57b5a4a6SAndroid Build Coastguard WorkerbintrayUpload.dependsOn publishToMavenLocal 106*57b5a4a6SAndroid Build Coastguard Worker 107