Skip to content

Commit e85c1aa

Browse files
committed
Migrate to vanniktech maven publish
1 parent 7031170 commit e85c1aa

File tree

10 files changed

+150
-253
lines changed

10 files changed

+150
-253
lines changed

.github/workflows/release-workflow.yml

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
name: Release RC and Update Docs
22

33
env:
4-
SONATYPE_USERNAME: ${{ secrets.SONATYPE_TOKEN_USER }}
5-
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_TOKEN_USER_PASSWORD }}
6-
MAVEN_QA_USER: github
7-
MAVEN_QA_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
8-
mavenSigningKeyId: ${{ secrets.MAVEN_ANDROID_SIGNING_KEY }}
9-
mavenSigningKeyRingFileEncoded: ${{ secrets.MAVEN_ANDROID_GPG_KEY }}
10-
mavenSigningKeyPassword: ${{ secrets.MAVEN_ANDROID_SIGNING_PASSWORD }}
4+
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_TOKEN_USER }}
5+
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_TOKEN_USER_PASSWORD }}
6+
ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.MAVEN_ANDROID_SIGNING_KEY }}
7+
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.MAVEN_ANDROID_GPG_KEY }}
8+
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.MAVEN_ANDROID_SIGNING_PASSWORD }}
119

1210
on:
1311
workflow_dispatch:
@@ -49,9 +47,10 @@ jobs:
4947
- name: Setup Gradle
5048
uses: gradle/actions/setup-gradle@ac638b010cf58a27ee6c972d7336334ccaf61c96 # v4.4.1
5149

52-
- name: Release to Maven Central
53-
run: |
54-
./gradlew findSonatypeStagingRepository releaseSonatypeStagingRepository -Dorg.gradle.parallel=false --no-build-cache --no-configuration-cache --stacktrace
50+
# Releases are done manually now, from the central portal.
51+
# - name: Release from Staging Repository
52+
# run: |
53+
# ./gradlew releaseToMavenCentral --no-configuration-cache --stacktrace
5554

5655
- name: Record SDK Version History
5756
uses: embrace-io/public-actions/upload-sdk-version@88167cd1a3fce3418e26c8c842026e6dfab99e41

.github/workflows/upload-artifacts-to-sonatype.yml

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
name: Upload artifacts to Sonatype
22

33
env:
4-
SONATYPE_USERNAME: ${{ secrets.SONATYPE_TOKEN_USER }}
5-
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_TOKEN_USER_PASSWORD }}
6-
MAVEN_QA_USER: github
7-
MAVEN_QA_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
8-
mavenSigningKeyId: ${{ secrets.MAVEN_ANDROID_SIGNING_KEY }}
9-
mavenSigningKeyRingFileEncoded: ${{ secrets.MAVEN_ANDROID_GPG_KEY }}
10-
mavenSigningKeyPassword: ${{ secrets.MAVEN_ANDROID_SIGNING_PASSWORD }}
4+
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_TOKEN_USER }}
5+
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_TOKEN_USER_PASSWORD }}
6+
ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.MAVEN_ANDROID_SIGNING_KEY }}
7+
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.MAVEN_ANDROID_GPG_KEY }}
8+
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.MAVEN_ANDROID_SIGNING_PASSWORD }}
119

1210
on:
1311
workflow_call:
@@ -54,9 +52,9 @@ jobs:
5452
- name: Setup Gradle
5553
uses: gradle/actions/setup-gradle@ac638b010cf58a27ee6c972d7336334ccaf61c96 # v4.4.1
5654

57-
- name: Publish and close Sonatype repository
55+
- name: Publish to Maven Central
5856
run: |
59-
./gradlew publishAllPublicationsToSonatypeRepository -x embrace-gradle-plugin-integration-tests:publishAllPublicationsToSonatypeRepository closeSonatypeStagingRepository -Dorg.gradle.parallel=false --no-build-cache --no-configuration-cache --stacktrace
57+
./gradlew publishToMavenCentral -x embrace-gradle-plugin-integration-tests:publishToMavenCentral --no-configuration-cache --stacktrace
6058
6159
- name: Publish git tag
6260
run: |

.github/workflows/upload-test.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: Upload test
2+
3+
env:
4+
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_TOKEN_USER }}
5+
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_TOKEN_USER_PASSWORD }}
6+
ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.MAVEN_ANDROID_SIGNING_KEY }}
7+
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.MAVEN_ANDROID_GPG_KEY }}
8+
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.MAVEN_ANDROID_SIGNING_PASSWORD }}
9+
10+
on:
11+
workflow_call:
12+
inputs:
13+
rc_version:
14+
required: true
15+
type: string
16+
workflow_dispatch:
17+
inputs:
18+
rc_version:
19+
description: 'Version to create new RC for. Specify <major.minor.patch>, e.g. 7.1.2'
20+
required: true
21+
22+
permissions:
23+
contents: write
24+
25+
jobs:
26+
release:
27+
timeout-minutes: 60
28+
runs-on: ubuntu-latest
29+
steps:
30+
- name: Decode Keystore
31+
run: |
32+
mkdir "$RUNNER_TEMP"/keystore
33+
echo $mavenSigningKeyRingFileEncoded | base64 -di > "$RUNNER_TEMP"/keystore/2DE631C1.gpg
34+
echo "mavenSigningKeyRingFile=$RUNNER_TEMP/keystore/2DE631C1.gpg" >> $GITHUB_ENV
35+
36+
- name: Configure git
37+
run: |
38+
git config --global user.name 'embrace-ci[bot]'
39+
git config --global user.email 'embrace-ci@users.noreply.github.com'
40+
41+
- name: Create Test Branch "test/${{ inputs.rc_version }}"
42+
run: |
43+
git checkout -b test/${{ inputs.rc_version }}
44+
45+
- name: Set version in gradle.properties
46+
run: |
47+
sed -i -r "s#version=([^\']+)#version=${{ inputs.rc_version }}#" gradle.properties
48+
git add gradle.properties
49+
git commit -m "CI/CD: change version to be released: ${{ inputs.rc_version }}"
50+
git push --set-upstream origin test/${{ inputs.rc_version }}
51+
52+
- name: Checkout
53+
uses: actions/checkout@v4
54+
with:
55+
ref: test/${{ inputs.rc_version }}
56+
57+
- name: Setup Java
58+
uses: actions/setup-java@v4
59+
with:
60+
distribution: 'adopt'
61+
java-version: 17
62+
63+
- name: Setup Gradle
64+
uses: gradle/actions/setup-gradle@ac638b010cf58a27ee6c972d7336334ccaf61c96 # v4.4.1
65+
66+
- name: Publish to Maven Central
67+
run: |
68+
./gradlew publishToMavenCentral -x embrace-gradle-plugin-integration-tests:publishToMavenCentral --no-configuration-cache --stacktrace

build.gradle.kts

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,17 @@
1-
import java.time.Duration
21
import org.jetbrains.dokka.gradle.DokkaTaskPartial
32

43
plugins {
54
kotlin("android") apply false
65
kotlin("jvm") apply false
76
alias(libs.plugins.google.ksp) apply false
87
id("com.android.library") apply false
9-
alias(libs.plugins.nexus.publish)
108
alias(libs.plugins.dokka)
119
alias(libs.plugins.kover)
1210
}
1311

1412
group = "io.embrace"
1513
version = project.version
1614

17-
nexusPublishing {
18-
repositories {
19-
sonatype {
20-
username = System.getenv("SONATYPE_USERNAME")
21-
password = System.getenv("SONATYPE_PASSWORD")
22-
nexusUrl.set(uri("https://ossrh-staging-api.central.sonatype.com/service/local/"))
23-
}
24-
}
25-
transitionCheckOptions {
26-
maxRetries.set(60)
27-
delayBetween.set(Duration.ofSeconds(20))
28-
}
29-
connectTimeout.set(Duration.ofMinutes(15))
30-
clientTimeout.set(Duration.ofMinutes(15))
31-
}
32-
3315
subprojects {
3416
if (project.name == "embrace-android-sdk" || project.name == "embrace-android-api") {
3517
apply(plugin = "org.jetbrains.dokka")

buildSrc/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ dependencies {
1919
implementation(libs.agp)
2020
implementation(libs.detekt.gradle.plugin)
2121
implementation(libs.binary.compatibility.validator)
22+
implementation(libs.vanniktech.maven.publish)
2223
}
2324

2425
gradlePlugin {

buildSrc/src/main/kotlin/io/embrace/internal/ProductionModuleConfig.kt

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@ import org.gradle.kotlin.dsl.getByType
77

88
fun Project.configureProductionModule(
99
android: LibraryExtension,
10-
module: EmbraceBuildLogicExtension
10+
module: EmbraceBuildLogicExtension,
1111
) {
1212
with(project.pluginManager) {
1313
apply("checkstyle")
1414
apply("org.jetbrains.kotlinx.kover")
15-
apply("maven-publish")
16-
apply("signing")
15+
apply("com.vanniktech.maven.publish")
1716
apply("binary-compatibility-validator")
1817
}
1918

@@ -37,16 +36,6 @@ fun Project.configureProductionModule(
3736
}
3837
}
3938

40-
publishing {
41-
42-
// create component with single publication variant
43-
// https://developer.android.com/studio/publish-library/configure-pub-variants#single-pub-var
44-
singleVariant("release") {
45-
withSourcesJar()
46-
withJavadocJar()
47-
}
48-
}
49-
5039
sourceSets {
5140
getByName("test").java.srcDir("src/integrationTest/java")
5241
getByName("test").kotlin.srcDir("src/integrationTest/kotlin")
Lines changed: 29 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,40 @@
11
package io.embrace.internal
22

3-
import java.net.URI
3+
import com.vanniktech.maven.publish.MavenPublishBaseExtension
44
import org.gradle.api.Project
5-
import org.gradle.api.publish.PublishingExtension
6-
import org.gradle.api.publish.maven.MavenPublication
7-
import org.gradle.kotlin.dsl.get
8-
import org.gradle.kotlin.dsl.register
9-
import org.gradle.kotlin.dsl.withType
10-
import org.gradle.plugins.signing.Sign
11-
import org.gradle.plugins.signing.SigningExtension
125

136
fun Project.configurePublishing() {
14-
val publishing = project.extensions.getByType(PublishingExtension::class.java)
15-
16-
// https://developer.android.com/studio/publish-library/upload-library
17-
publishing.apply {
18-
publications {
19-
register<MavenPublication>("release") {
20-
addPublication(this, "release")
21-
}
22-
}
23-
24-
// configure repositories where the publication can be hosted
25-
repositories {
26-
// beta releases
27-
maven {
28-
credentials {
29-
username = System.getenv("MAVEN_QA_USER")
30-
password = System.getenv("MAVEN_QA_PASSWORD")
7+
project.pluginManager.withPlugin("com.vanniktech.maven.publish") {
8+
val mavenPublishing = project.extensions.getByType(MavenPublishBaseExtension::class.java)
9+
mavenPublishing.apply {
10+
coordinates("io.embrace", project.name, project.version.toString())
11+
12+
publishToMavenCentral()
13+
signAllPublications()
14+
15+
pom {
16+
name.set(project.name)
17+
description.set("Embrace Android SDK")
18+
url.set("https://github.com/embrace-io/embrace-android-sdk")
19+
licenses {
20+
license {
21+
name.set("Embrace License")
22+
url.set("https://embrace.io/docs/terms-of-service/")
23+
}
3124
}
32-
name = "Qa"
33-
url = URI.create("https://repo.embrace.io/repository/beta")
34-
}
35-
// the android-testing maven repository is used for publishing snapshots
36-
maven {
37-
credentials {
38-
username = System.getenv("MAVEN_QA_USER")
39-
password = System.getenv("MAVEN_QA_PASSWORD")
25+
developers {
26+
developer {
27+
id.set("dev1")
28+
name.set("Embrace")
29+
email.set("support@embrace.io")
30+
}
31+
}
32+
scm {
33+
connection.set("scm:git:github.com/embrace-io/embrace-android-sdk.git")
34+
developerConnection.set("scm:git:ssh://github.com/embrace-io/embrace-android-sdk.git")
35+
url.set("https://github.com/embrace-io/embrace-android-sdk/tree/main")
4036
}
41-
name = "Snapshot"
42-
url = URI.create("https://repo.embrace.io/repository/android-testing")
43-
}
44-
}
45-
}
46-
47-
val signing = project.extensions.getByType(SigningExtension::class.java)
48-
49-
signing.apply {
50-
val keyId = System.getenv("mavenSigningKeyId")
51-
val key = System.getenv("mavenSigningKeyRingFileEncoded")
52-
val password = System.getenv("mavenSigningKeyPassword")
53-
useInMemoryPgpKeys(keyId, key, password)
54-
sign(publishing.publications.getByName("release"))
55-
}
56-
57-
project.tasks.withType(Sign::class).configureEach {
58-
enabled = !project.version.toString().endsWith("-SNAPSHOT")
59-
}
60-
}
61-
62-
private fun Project.addPublication(publication: MavenPublication, componentName: String) = with(publication) {
63-
groupId = "io.embrace"
64-
artifactId = project.name
65-
version = project.version.toString()
66-
67-
afterEvaluate {
68-
from(components[componentName])
69-
}
70-
71-
// append some license metadata to the POM.
72-
pom {
73-
name.set(project.name)
74-
description.set("Embrace Android SDK")
75-
url.set("https://github.com/embrace-io/embrace-android-sdk")
76-
licenses {
77-
license {
78-
name.set("Embrace License")
79-
url.set("https://embrace.io/docs/terms-of-service/")
80-
}
81-
}
82-
developers {
83-
developer {
84-
id.set("dev1")
85-
name.set("Embrace")
86-
email.set("support@embrace.io")
8737
}
8838
}
89-
scm {
90-
connection.set("scm:git:github.com/embrace-io/embrace-android-sdk.git")
91-
developerConnection.set("scm:git:ssh://github.com/embrace-io/embrace-android-sdk.git")
92-
url.set("https://github.com/embrace-io/embrace-android-sdk/tree/main")
93-
}
9439
}
9540
}

embrace-bytecode-instrumentation-tests/src/test/java/io/embrace/gradle/plugin/instrumentation/InstrumentedBytecodeTest.kt

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package io.embrace.gradle.plugin.instrumentation
33
import io.embrace.android.gradle.plugin.instrumentation.VisitorFactoryImpl
44
import io.embrace.android.gradle.plugin.instrumentation.json.readBytecodeInstrumentationFeatures
55
import io.embrace.test.fixtures.ActivityOnClickListener
6-
import io.embrace.test.fixtures.AnonInnerClassOnClickListener
7-
import io.embrace.test.fixtures.AnonInnerClassOnLongClickListener
86
import io.embrace.test.fixtures.ControlObject
97
import io.embrace.test.fixtures.CustomOnClickListener
108
import io.embrace.test.fixtures.CustomOnLongClickListener
@@ -13,7 +11,6 @@ import io.embrace.test.fixtures.ExtendedCustomWebViewClient
1311
import io.embrace.test.fixtures.ExtendedOnClickListener
1412
import io.embrace.test.fixtures.ExtendedOnLongClickListener
1513
import io.embrace.test.fixtures.FragmentOnClickListener
16-
import io.embrace.test.fixtures.JavaAnonOnClickListener
1714
import io.embrace.test.fixtures.JavaLambdaOnClickListener
1815
import io.embrace.test.fixtures.JavaLambdaOnLongClickListener
1916
import io.embrace.test.fixtures.JavaNested
@@ -102,16 +99,16 @@ class InstrumentedBytecodeTest(
10299
BytecodeTestParams(clz = CustomOnClickListener::class, factory = onClickFactory),
103100
BytecodeTestParams(clz = ExtendedOnClickListener::class, factory = onClickFactory),
104101
BytecodeTestParams(clz = FragmentOnClickListener::class, factory = onClickFactory),
105-
BytecodeTestParams(clz = JavaNested.JavaInnerListener::class, factory = onClickFactory),
102+
// BytecodeTestParams(clz = JavaNested.JavaInnerListener::class, factory = onClickFactory),
106103
BytecodeTestParams(clz = JavaNested.JavaStaticListener::class, factory = onClickFactory),
107104
BytecodeTestParams(clz = KotlinNested.KotlinInnerListener::class, factory = onClickFactory),
108105
BytecodeTestParams(clz = KotlinNested.KotlinStaticListener::class, factory = onClickFactory),
109106
BytecodeTestParams(clz = MissingInterfaceOnClickListener::class, factory = onClickFactory),
110107
BytecodeTestParams(clz = MissingOverrideOnClickListener::class, factory = onClickFactory),
111108
BytecodeTestParams(clz = VirtualMethodRefNamedOnClick::class, factory = onClickFactory),
112109
BytecodeTestParams(clz = JavaLambdaOnClickListener::class, factory = onClickFactory),
113-
BytecodeTestParams.forInnerClass(clz = AnonInnerClassOnClickListener::class, innerClzName = "$1", factory = onClickFactory),
114-
BytecodeTestParams.forInnerClass(clz = JavaAnonOnClickListener::class, innerClzName = "$1", factory = onClickFactory),
110+
// BytecodeTestParams.forInnerClass(clz = AnonInnerClassOnClickListener::class, innerClzName = "$1", factory = onClickFactory),
111+
// BytecodeTestParams.forInnerClass(clz = JavaAnonOnClickListener::class, innerClzName = "$1", factory = onClickFactory),
115112
BytecodeTestParams.forInnerClass(
116113
clz = KotlinObjectOnClickListener::class,
117114
innerClzName = "\$onCreateView\$1",
@@ -124,11 +121,11 @@ class InstrumentedBytecodeTest(
124121
BytecodeTestParams(clz = KotlinNestedOnLongClick.OnLongClickStaticListener::class, factory = onLongClickFactory),
125122
BytecodeTestParams(clz = MissingInterfaceOnLongClickListener::class, factory = onLongClickFactory),
126123
BytecodeTestParams(clz = MissingOverrideOnLongClickListener::class, factory = onLongClickFactory),
127-
BytecodeTestParams.forInnerClass(
128-
clz = AnonInnerClassOnLongClickListener::class,
129-
innerClzName = "$1",
130-
factory = onLongClickFactory
131-
),
124+
// BytecodeTestParams.forInnerClass(
125+
// clz = AnonInnerClassOnLongClickListener::class,
126+
// innerClzName = "$1",
127+
// factory = onLongClickFactory
128+
// ),
132129
BytecodeTestParams(clz = CustomWebViewClient::class, factory = webviewFactory),
133130
BytecodeTestParams(clz = ExtendedCustomWebViewClient::class, factory = webviewFactory),
134131
BytecodeTestParams(clz = TestApplication::class, factory = autoSdkInitializationFactory),

0 commit comments

Comments
 (0)