xref: /aosp_15_r20/external/kotlinx.serialization/buildSrc/src/main/kotlin/Publishing.kt (revision 57b5a4a64c534cf7f27ac9427ceab07f3d8ed3d8)
1*57b5a4a6SAndroid Build Coastguard Worker /*
2*57b5a4a6SAndroid Build Coastguard Worker  * Copyright 2016-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 @file:Suppress("UnstableApiUsage")
6*57b5a4a6SAndroid Build Coastguard Worker 
7*57b5a4a6SAndroid Build Coastguard Worker import org.gradle.api.*
8*57b5a4a6SAndroid Build Coastguard Worker import org.gradle.api.artifacts.dsl.*
9*57b5a4a6SAndroid Build Coastguard Worker import org.gradle.api.provider.*
10*57b5a4a6SAndroid Build Coastguard Worker import org.gradle.api.publish.maven.*
11*57b5a4a6SAndroid Build Coastguard Worker import org.gradle.plugins.signing.*
12*57b5a4a6SAndroid Build Coastguard Worker import java.net.*
13*57b5a4a6SAndroid Build Coastguard Worker 
14*57b5a4a6SAndroid Build Coastguard Worker // Pom configuration
15*57b5a4a6SAndroid Build Coastguard Worker 
bynull16*57b5a4a6SAndroid Build Coastguard Worker infix fun <T> Property<T>.by(value: T) {
17*57b5a4a6SAndroid Build Coastguard Worker     set(value)
18*57b5a4a6SAndroid Build Coastguard Worker }
19*57b5a4a6SAndroid Build Coastguard Worker 
configureMavenCentralMetadatanull20*57b5a4a6SAndroid Build Coastguard Worker fun MavenPom.configureMavenCentralMetadata(project: Project) {
21*57b5a4a6SAndroid Build Coastguard Worker     name by project.name
22*57b5a4a6SAndroid Build Coastguard Worker     description by "Kotlin multiplatform serialization runtime library"
23*57b5a4a6SAndroid Build Coastguard Worker     url by "https://github.com/Kotlin/kotlinx.serialization"
24*57b5a4a6SAndroid Build Coastguard Worker 
25*57b5a4a6SAndroid Build Coastguard Worker     licenses {
26*57b5a4a6SAndroid Build Coastguard Worker         license {
27*57b5a4a6SAndroid Build Coastguard Worker             name by "The Apache Software License, Version 2.0"
28*57b5a4a6SAndroid Build Coastguard Worker             url by "https://www.apache.org/licenses/LICENSE-2.0.txt"
29*57b5a4a6SAndroid Build Coastguard Worker             distribution by "repo"
30*57b5a4a6SAndroid Build Coastguard Worker         }
31*57b5a4a6SAndroid Build Coastguard Worker     }
32*57b5a4a6SAndroid Build Coastguard Worker 
33*57b5a4a6SAndroid Build Coastguard Worker     developers {
34*57b5a4a6SAndroid Build Coastguard Worker         developer {
35*57b5a4a6SAndroid Build Coastguard Worker             id by "JetBrains"
36*57b5a4a6SAndroid Build Coastguard Worker             name by "JetBrains Team"
37*57b5a4a6SAndroid Build Coastguard Worker             organization by "JetBrains"
38*57b5a4a6SAndroid Build Coastguard Worker             organizationUrl by "https://www.jetbrains.com"
39*57b5a4a6SAndroid Build Coastguard Worker         }
40*57b5a4a6SAndroid Build Coastguard Worker     }
41*57b5a4a6SAndroid Build Coastguard Worker 
42*57b5a4a6SAndroid Build Coastguard Worker     scm {
43*57b5a4a6SAndroid Build Coastguard Worker         url by "https://github.com/Kotlin/kotlinx.serialization"
44*57b5a4a6SAndroid Build Coastguard Worker     }
45*57b5a4a6SAndroid Build Coastguard Worker }
46*57b5a4a6SAndroid Build Coastguard Worker 
mavenRepositoryUrinull47*57b5a4a6SAndroid Build Coastguard Worker fun mavenRepositoryUri(): URI {
48*57b5a4a6SAndroid Build Coastguard Worker     // TODO -SNAPSHOT detection can be made here as well
49*57b5a4a6SAndroid Build Coastguard Worker     val repositoryId: String? = System.getenv("libs.repository.id")
50*57b5a4a6SAndroid Build Coastguard Worker     return if (repositoryId == null) {
51*57b5a4a6SAndroid Build Coastguard Worker         URI("https://oss.sonatype.org/service/local/staging/deploy/maven2/")
52*57b5a4a6SAndroid Build Coastguard Worker     } else {
53*57b5a4a6SAndroid Build Coastguard Worker         URI("https://oss.sonatype.org/service/local/staging/deployByRepositoryId/$repositoryId")
54*57b5a4a6SAndroid Build Coastguard Worker     }
55*57b5a4a6SAndroid Build Coastguard Worker }
56*57b5a4a6SAndroid Build Coastguard Worker 
configureMavenPublicationnull57*57b5a4a6SAndroid Build Coastguard Worker fun configureMavenPublication(rh: RepositoryHandler, project: Project) {
58*57b5a4a6SAndroid Build Coastguard Worker     rh.maven {
59*57b5a4a6SAndroid Build Coastguard Worker         url = mavenRepositoryUri()
60*57b5a4a6SAndroid Build Coastguard Worker         credentials {
61*57b5a4a6SAndroid Build Coastguard Worker             username = project.getSensitiveProperty("libs.sonatype.user")
62*57b5a4a6SAndroid Build Coastguard Worker             password = project.getSensitiveProperty("libs.sonatype.password")
63*57b5a4a6SAndroid Build Coastguard Worker         }
64*57b5a4a6SAndroid Build Coastguard Worker     }
65*57b5a4a6SAndroid Build Coastguard Worker }
66*57b5a4a6SAndroid Build Coastguard Worker 
signPublicationIfKeyPresentnull67*57b5a4a6SAndroid Build Coastguard Worker fun signPublicationIfKeyPresent(project: Project, publication: MavenPublication) {
68*57b5a4a6SAndroid Build Coastguard Worker     val keyId = project.getSensitiveProperty("libs.sign.key.id")
69*57b5a4a6SAndroid Build Coastguard Worker     val signingKey = project.getSensitiveProperty("libs.sign.key.private")
70*57b5a4a6SAndroid Build Coastguard Worker     val signingKeyPassphrase = project.getSensitiveProperty("libs.sign.passphrase")
71*57b5a4a6SAndroid Build Coastguard Worker     if (!signingKey.isNullOrBlank()) {
72*57b5a4a6SAndroid Build Coastguard Worker         project.extensions.configure<SigningExtension>("signing") {
73*57b5a4a6SAndroid Build Coastguard Worker             useInMemoryPgpKeys(keyId, signingKey, signingKeyPassphrase)
74*57b5a4a6SAndroid Build Coastguard Worker             sign(publication)
75*57b5a4a6SAndroid Build Coastguard Worker         }
76*57b5a4a6SAndroid Build Coastguard Worker     }
77*57b5a4a6SAndroid Build Coastguard Worker }
78*57b5a4a6SAndroid Build Coastguard Worker 
getSensitivePropertynull79*57b5a4a6SAndroid Build Coastguard Worker private fun Project.getSensitiveProperty(name: String): String? {
80*57b5a4a6SAndroid Build Coastguard Worker     return project.findProperty(name) as? String ?: System.getenv(name)
81*57b5a4a6SAndroid Build Coastguard Worker }
82