Skip to content

Commit 40392da

Browse files
authored
chore: migrated to vanniktech Maven plugin (#721)
* chore: migrated to vanniktech Maven plugin * chore: migrated to vanniktech Maven plugin * chore: migrated to vanniktech Maven plugin * chore: changed branch for testing * chore: changed branch for testing * chore: changed branch for testing * chore: base64 for secret * chore: base64 for secret * chore: calling new Gradle command * chore: using sed * chore: rename vars * chore: rename vars * chore: change branch to main * chore: change branch to main
1 parent b403d36 commit 40392da

File tree

6 files changed

+96
-118
lines changed

6 files changed

+96
-118
lines changed

.github/workflows/release.yml

Lines changed: 46 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -22,51 +22,52 @@ jobs:
2222
release:
2323
runs-on: ubuntu-latest
2424
steps:
25-
- name: Checkout
26-
uses: actions/checkout@v4
27-
with:
28-
token: ${{ secrets.SYNCED_GITHUB_TOKEN_REPO }}
29-
- uses: gradle/actions/wrapper-validation@v4
30-
- name: Set up JDK 21
31-
uses: actions/[email protected]
32-
with:
33-
java-version: '21'
34-
distribution: 'adopt'
35-
- name: Create .gpg key
36-
run: |
37-
echo $GPG_KEY_ARMOR | base64 --decode > ./release.asc
38-
gpg --quiet --output $GITHUB_WORKSPACE/release.gpg --dearmor ./release.asc
25+
- name: Checkout
26+
uses: actions/checkout@v4
27+
with:
28+
token: ${{ secrets.SYNCED_GITHUB_TOKEN_REPO }}
29+
- uses: gradle/actions/wrapper-validation@v4
30+
- name: Set up JDK 21
31+
uses: actions/[email protected]
32+
with:
33+
java-version: '21'
34+
distribution: 'adopt'
35+
- name: Set up Gradle Publishing Environment Variables
36+
run: |
37+
echo $GPG_KEY_ARMOR | base64 --decode > ./release.asc
38+
gpg --quiet --output $GITHUB_WORKSPACE/release.gpg --dearmor ./release.asc
3939
40-
echo "Build and publish"
41-
sed -i -e "s,sonatypeToken=,sonatypeToken=$SONATYPE_TOKEN_USERNAME,g" gradle.properties
42-
SONATYPE_TOKEN_PASSWORD_ESCAPED=$(printf '%s\n' "$SONATYPE_TOKEN_PASSWORD" | sed -e 's/[\/&]/\\&/g')
43-
sed -i -e "s,sonatypeTokenPassword=,sonatypeTokenPassword=$SONATYPE_TOKEN_PASSWORD_ESCAPED,g" gradle.properties
44-
sed -i -e "s,signing.keyId=,signing.keyId=$GPG_KEY_ID,g" gradle.properties
45-
sed -i -e "s,signing.password=,signing.password=$GPG_PASSWORD,g" gradle.properties
46-
sed -i -e "s,signing.secretKeyRingFile=,signing.secretKeyRingFile=$GITHUB_WORKSPACE/release.gpg,g" gradle.properties
47-
env:
48-
GPG_KEY_ARMOR: "${{ secrets.SYNCED_GPG_KEY_ARMOR }}"
49-
GPG_KEY_ID: ${{ secrets.SYNCED_GPG_KEY_ID }}
50-
GPG_PASSWORD: ${{ secrets.SYNCED_GPG_KEY_PASSWORD }}
51-
SONATYPE_TOKEN_PASSWORD: ${{ secrets.SONATYPE_TOKEN_PASSWORD }}
52-
SONATYPE_TOKEN_USERNAME: ${{ secrets.SONATYPE_TOKEN }}
40+
echo "Build and publish"
41+
sed -i -e "s,mavenCentralUsername=,mavenCentralUsername=$SONATYPE_TOKEN_USERNAME,g" gradle.properties
42+
SONATYPE_TOKEN_PASSWORD_ESCAPED=$(printf '%s\n' "$SONATYPE_TOKEN_PASSWORD" | sed -e 's/[\/&]/\\&/g')
43+
sed -i -e "s,mavenCentralPassword=,mavenCentralPassword=$SONATYPE_TOKEN_PASSWORD_ESCAPED,g" gradle.properties
44+
sed -i -e "s,signing.keyId=,signing.keyId=$GPG_KEY_ID,g" gradle.properties
45+
sed -i -e "s,signing.password=,signing.password=$GPG_PASSWORD,g" gradle.properties
46+
sed -i -e "s,signing.secretKeyRingFile=,signing.secretKeyRingFile=$GITHUB_WORKSPACE/release.gpg,g" gradle.properties
5347
54-
- uses: actions/setup-node@v4
55-
with:
56-
node-version: '14'
57-
58-
- name: Install conventionalcommits
59-
run: npm i -D conventional-changelog-conventionalcommits
48+
env:
49+
SONATYPE_TOKEN_USERNAME: ${{ secrets.SONATYPE_TOKEN }}
50+
SONATYPE_TOKEN_PASSWORD: ${{ secrets.SONATYPE_TOKEN_PASSWORD }}
51+
GPG_KEY_ARMOR: ${{ secrets.SYNCED_GPG_KEY_ARMOR }}
52+
GPG_PASSWORD: ${{ secrets.SYNCED_GPG_KEY_PASSWORD }}
53+
GPG_KEY_ID: ${{ secrets.SYNCED_GPG_KEY_ID }}
6054

61-
- name: Semantic Release
62-
uses: cycjimmy/[email protected]
63-
with:
64-
extra_plugins: |
65-
"@semantic-release/[email protected]"
66-
"@semantic-release/[email protected]"
67-
68-
"@semantic-release/[email protected]"
69-
"@semantic-release/[email protected]"
70-
"@semantic-release/[email protected]"
71-
env:
72-
GH_TOKEN: ${{ secrets.SYNCED_GITHUB_TOKEN_REPO }}
55+
- uses: actions/setup-node@v4
56+
with:
57+
node-version: '14'
58+
59+
- name: Install conventionalcommits
60+
run: npm i -D conventional-changelog-conventionalcommits
61+
62+
- name: Semantic Release
63+
uses: cycjimmy/[email protected]
64+
with:
65+
extra_plugins: |
66+
"@semantic-release/[email protected]"
67+
"@semantic-release/[email protected]"
68+
69+
"@semantic-release/[email protected]"
70+
"@semantic-release/[email protected]"
71+
"@semantic-release/[email protected]"
72+
env:
73+
GH_TOKEN: ${{ secrets.SYNCED_GITHUB_TOKEN_REPO }}

.releaserc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ plugins:
1515
to: ":${nextRelease.version}"
1616
- - "@semantic-release/exec"
1717
- prepareCmd: "./gradlew build --warn --stacktrace"
18-
publishCmd: "./gradlew publish --warn --stacktrace"
18+
publishCmd: "./gradlew publishToMavenCentral --warn --stacktrace"
1919
- - "@semantic-release/git"
2020
- assets:
2121
- "build.gradle.kts"

build-logic/convention/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ dependencies {
1414
implementation(libs.android.gradle.plugin)
1515
implementation(libs.dokka.plugin)
1616
implementation(libs.org.jacoco.core)
17+
implementation(libs.gradle.maven.publish.plugin)
18+
1719
}
1820

1921
gradlePlugin {
Lines changed: 37 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,29 @@
11
// buildSrc/src/main/kotlin/PublishingConventionPlugin.kt
2+
import com.vanniktech.maven.publish.AndroidSingleVariantLibrary
3+
import com.vanniktech.maven.publish.JavadocJar
4+
import com.vanniktech.maven.publish.MavenPublishBaseExtension
25
import org.gradle.api.Plugin
36
import org.gradle.api.Project
4-
import org.gradle.api.publish.PublishingExtension
5-
import org.gradle.api.publish.maven.MavenPublication
67
import org.gradle.kotlin.dsl.*
78
import org.gradle.testing.jacoco.plugins.JacocoPluginExtension
89
import org.gradle.api.tasks.testing.Test
910
import org.gradle.testing.jacoco.plugins.JacocoTaskExtension
10-
import org.gradle.plugins.signing.SigningExtension
11-
import org.gradle.api.publish.maven.*
1211

1312
class PublishingConventionPlugin : Plugin<Project> {
1413
override fun apply(project: Project) {
1514
project.run {
1615

1716
applyPlugins()
1817
configureJacoco()
19-
configurePublishing()
20-
configureSigning()
18+
configureVanniktechPublishing()
2119
}
2220
}
2321

2422
private fun Project.applyPlugins() {
2523
apply(plugin = "com.android.library")
2624
apply(plugin = "com.mxalbert.gradle.jacoco-android")
27-
apply(plugin = "maven-publish")
2825
apply(plugin = "org.jetbrains.dokka")
29-
apply(plugin = "signing")
26+
apply(plugin = "com.vanniktech.maven.publish")
3027
}
3128

3229
private fun Project.configureJacoco() {
@@ -43,68 +40,42 @@ class PublishingConventionPlugin : Plugin<Project> {
4340
}
4441
}
4542

46-
private fun Project.configurePublishing() {
47-
extensions.configure<com.android.build.gradle.LibraryExtension> {
48-
publishing {
49-
singleVariant("release") {
50-
withSourcesJar()
51-
withJavadocJar()
52-
}
53-
}
54-
}
55-
extensions.configure<PublishingExtension> {
56-
publications {
57-
create<MavenPublication>("aar") {
58-
afterEvaluate {
59-
from(components["release"])
60-
}
61-
pom {
62-
name.set(project.name)
63-
description.set("Jetpack Compose components for the Maps SDK for Android")
64-
url.set("https://github.com/googlemaps/android-maps-compose")
65-
scm {
66-
connection.set("scm:[email protected]:googlemaps/android-maps-compose.git")
67-
developerConnection.set("scm:[email protected]:googlemaps/android-maps-compose.git")
68-
url.set("https://github.com/googlemaps/android-maps-compose")
69-
}
70-
licenses {
71-
license {
72-
name.set("The Apache Software License, Version 2.0")
73-
url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
74-
distribution.set("repo")
75-
}
76-
}
77-
organization {
78-
name.set("Google Inc")
79-
url.set("http://developers.google.com/maps")
80-
}
81-
developers {
82-
developer {
83-
name.set("Google Inc.")
84-
}
85-
}
43+
private fun Project.configureVanniktechPublishing() {
44+
extensions.configure<MavenPublishBaseExtension> {
45+
configure(
46+
AndroidSingleVariantLibrary(
47+
variant = "release",
48+
sourcesJar = true,
49+
publishJavadocJar = true
50+
)
51+
)
52+
53+
publishToMavenCentral()
54+
signAllPublications()
55+
56+
pom {
57+
name.set(project.name)
58+
description.set("Jetpack Compose components for the Maps SDK for Android")
59+
url.set("https://github.com/googlemaps/android-maps-compose")
60+
licenses {
61+
license {
62+
name.set("The Apache Software License, Version 2.0")
63+
url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
64+
distribution.set("repo")
8665
}
8766
}
88-
}
89-
repositories {
90-
maven {
91-
val releasesRepoUrl =
92-
uri("https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/")
93-
val snapshotsRepoUrl =
94-
uri("https://central.sonatype.com/repository/maven-snapshots/")
95-
url = if (project.version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl
96-
credentials {
97-
username = project.findProperty("sonatypeToken") as String?
98-
password = project.findProperty("sonatypeTokenPassword") as String?
67+
scm {
68+
connection.set("scm:[email protected]:googlemaps/android-maps-compose.git")
69+
developerConnection.set("scm:[email protected]:googlemaps/android-maps-compose.git")
70+
url.set("https://github.com/googlemaps/android-maps-compose")
71+
}
72+
developers {
73+
developer {
74+
id.set("google")
75+
name.set("Google Inc.")
9976
}
10077
}
10178
}
10279
}
10380
}
104-
105-
private fun Project.configureSigning() {
106-
configure<SigningExtension> {
107-
sign(extensions.getByType<PublishingExtension>().publications["aar"])
108-
}
109-
}
110-
}
81+
}

gradle.properties

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,18 @@ android.enableJetifier=true
2323
# Kotlin code style for this project: "official" or "obsolete":
2424
kotlin.code.style=official
2525

26-
# variables required to allow build.gradle to parse,
27-
# override in ~/.gradle/gradle.properties
26+
mavenCentralUsername=
27+
mavenCentralPassword=
28+
2829
signing.keyId=
2930
signing.password=
3031
signing.secretKeyRingFile=
3132

32-
sonatypeToken=
33-
sonatypeTokenPassword=
34-
3533
android.nonTransitiveRClass=false
3634
android.nonFinalResIds=false
3735

38-
android.experimental.enableScreenshotTest=true
36+
android.experimental.enableScreenshotTest=true
37+
38+
# Add a property to enable automatic release to Maven Central (optional, but good for CI)
39+
# If true, publishToMavenCentral will also close and release the staging repository
40+
mavenCentralAutomaticRelease=false

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ androidxtest = "1.6.2"
77
compose-bom = "2025.04.00"
88
dokka = "2.0.0"
99
espresso = "3.6.1"
10+
gradleMavenPublishPlugin = "0.34.0"
1011
jacoco-plugin = "0.2.1"
1112
junit = "4.13.2"
1213
junitktx = "1.2.1"
@@ -35,6 +36,7 @@ androidx-test-junit-ktx = { module = "androidx.test.ext:junit-ktx", version.ref
3536
androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidCore" }
3637
androidx-test-runner = { module = "androidx.test:runner", version.ref = "androidxtest" }
3738
dokka-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" }
39+
gradle-maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version.ref = "gradleMavenPublishPlugin" }
3840
jacoco-android-plugin = { module = "com.mxalbert.gradle:jacoco-android", version.ref = "jacoco-plugin", version.require = "0.2.1" }
3941
kotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk7", version.ref = "kotlin" }
4042
kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }

0 commit comments

Comments
 (0)