xref: /aosp_15_r20/external/kotlinx.atomicfu/buildSrc/src/main/kotlin/Publishing.kt (revision 68017707106cb9da9fed635c150bc497c09c160f)
1*68017707SAndroid Build Coastguard Worker /*
2*68017707SAndroid Build Coastguard Worker  * Copyright 2016-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3*68017707SAndroid Build Coastguard Worker  */
4*68017707SAndroid Build Coastguard Worker 
5*68017707SAndroid Build Coastguard Worker @file:Suppress("UnstableApiUsage")
6*68017707SAndroid Build Coastguard Worker 
7*68017707SAndroid Build Coastguard Worker import org.gradle.api.*
8*68017707SAndroid Build Coastguard Worker import org.gradle.api.artifacts.dsl.*
9*68017707SAndroid Build Coastguard Worker import org.gradle.api.provider.*
10*68017707SAndroid Build Coastguard Worker import org.gradle.api.publish.maven.*
11*68017707SAndroid Build Coastguard Worker import org.gradle.plugins.signing.*
12*68017707SAndroid Build Coastguard Worker import java.net.*
13*68017707SAndroid Build Coastguard Worker 
14*68017707SAndroid Build Coastguard Worker // Pom configuration
15*68017707SAndroid Build Coastguard Worker 
bynull16*68017707SAndroid Build Coastguard Worker infix fun <T> Property<T>.by(value: T) {
17*68017707SAndroid Build Coastguard Worker     set(value)
18*68017707SAndroid Build Coastguard Worker }
19*68017707SAndroid Build Coastguard Worker 
configureMavenCentralMetadatanull20*68017707SAndroid Build Coastguard Worker fun MavenPom.configureMavenCentralMetadata(project: Project) {
21*68017707SAndroid Build Coastguard Worker     name by project.name
22*68017707SAndroid Build Coastguard Worker     description by "AtomicFU utilities"
23*68017707SAndroid Build Coastguard Worker     url by "https://github.com/Kotlin/kotlinx.atomicfu"
24*68017707SAndroid Build Coastguard Worker 
25*68017707SAndroid Build Coastguard Worker     licenses {
26*68017707SAndroid Build Coastguard Worker         license {
27*68017707SAndroid Build Coastguard Worker             name by "The Apache Software License, Version 2.0"
28*68017707SAndroid Build Coastguard Worker             url by "https://www.apache.org/licenses/LICENSE-2.0.txt"
29*68017707SAndroid Build Coastguard Worker             distribution by "repo"
30*68017707SAndroid Build Coastguard Worker         }
31*68017707SAndroid Build Coastguard Worker     }
32*68017707SAndroid Build Coastguard Worker 
33*68017707SAndroid Build Coastguard Worker     developers {
34*68017707SAndroid Build Coastguard Worker         developer {
35*68017707SAndroid Build Coastguard Worker             id by "JetBrains"
36*68017707SAndroid Build Coastguard Worker             name by "JetBrains Team"
37*68017707SAndroid Build Coastguard Worker             organization by "JetBrains"
38*68017707SAndroid Build Coastguard Worker             organizationUrl by "https://www.jetbrains.com"
39*68017707SAndroid Build Coastguard Worker         }
40*68017707SAndroid Build Coastguard Worker     }
41*68017707SAndroid Build Coastguard Worker 
42*68017707SAndroid Build Coastguard Worker     scm {
43*68017707SAndroid Build Coastguard Worker         url by "https://github.com/Kotlin/kotlinx.atomicfu"
44*68017707SAndroid Build Coastguard Worker     }
45*68017707SAndroid Build Coastguard Worker }
46*68017707SAndroid Build Coastguard Worker 
mavenRepositoryUrinull47*68017707SAndroid Build Coastguard Worker fun mavenRepositoryUri(): URI {
48*68017707SAndroid Build Coastguard Worker     val repositoryId: String? = System.getenv("libs.repository.id")
49*68017707SAndroid Build Coastguard Worker     return if (repositoryId == null) {
50*68017707SAndroid Build Coastguard Worker         // Using implicitly created staging, for MPP it's likely to be a mistake because
51*68017707SAndroid Build Coastguard Worker         // publication on TeamCity will create 3 independent staging repositories
52*68017707SAndroid Build Coastguard Worker         URI("https://oss.sonatype.org/service/local/staging/deploy/maven2/")
53*68017707SAndroid Build Coastguard Worker     } else {
54*68017707SAndroid Build Coastguard Worker         URI("https://oss.sonatype.org/service/local/staging/deployByRepositoryId/$repositoryId")
55*68017707SAndroid Build Coastguard Worker     }
56*68017707SAndroid Build Coastguard Worker }
57*68017707SAndroid Build Coastguard Worker 
configureMavenPublicationnull58*68017707SAndroid Build Coastguard Worker fun configureMavenPublication(rh: RepositoryHandler, project: Project) {
59*68017707SAndroid Build Coastguard Worker     rh.maven {
60*68017707SAndroid Build Coastguard Worker         url = mavenRepositoryUri()
61*68017707SAndroid Build Coastguard Worker         credentials {
62*68017707SAndroid Build Coastguard Worker             username = project.getSensitiveProperty("libs.sonatype.user")
63*68017707SAndroid Build Coastguard Worker             password = project.getSensitiveProperty("libs.sonatype.password")
64*68017707SAndroid Build Coastguard Worker         }
65*68017707SAndroid Build Coastguard Worker     }
66*68017707SAndroid Build Coastguard Worker }
67*68017707SAndroid Build Coastguard Worker 
signPublicationIfKeyPresentnull68*68017707SAndroid Build Coastguard Worker fun signPublicationIfKeyPresent(project: Project, publication: MavenPublication) {
69*68017707SAndroid Build Coastguard Worker     val keyId = project.getSensitiveProperty("libs.sign.key.id")
70*68017707SAndroid Build Coastguard Worker     val signingKey = project.getSensitiveProperty("libs.sign.key.private")
71*68017707SAndroid Build Coastguard Worker     val signingKeyPassphrase = project.getSensitiveProperty("libs.sign.passphrase")
72*68017707SAndroid Build Coastguard Worker     if (!signingKey.isNullOrBlank()) {
73*68017707SAndroid Build Coastguard Worker         project.extensions.configure<SigningExtension>("signing") {
74*68017707SAndroid Build Coastguard Worker             useInMemoryPgpKeys(keyId, signingKey, signingKeyPassphrase)
75*68017707SAndroid Build Coastguard Worker             sign(publication)
76*68017707SAndroid Build Coastguard Worker         }
77*68017707SAndroid Build Coastguard Worker     }
78*68017707SAndroid Build Coastguard Worker }
79*68017707SAndroid Build Coastguard Worker 
getSensitivePropertynull80*68017707SAndroid Build Coastguard Worker private fun Project.getSensitiveProperty(name: String): String? {
81*68017707SAndroid Build Coastguard Worker     return project.findProperty(name) as? String ?: System.getenv(name)
82*68017707SAndroid Build Coastguard Worker }
83