xref: /aosp_15_r20/external/kotlinx.serialization/gradle/publishing.gradle (revision 57b5a4a64c534cf7f27ac9427ceab07f3d8ed3d8)
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