From 6249cacf982bd04b4df96430e8d556cb8dee954f Mon Sep 17 00:00:00 2001 From: Noah Date: Mon, 24 Aug 2026 12:01:08 -0400 Subject: [PATCH 1/5] Migrate publishing to Central Portal Legacy OSSRH now rejects snapshot uploads. Upgrade the compatible Gradle and Vanniktech versions, target Central Portal, and prepare the 4.9.0 release workflow. --- .github/workflows/release-snapshot.yml | 6 +++--- .github/workflows/release.yml | 16 +++++----------- afterpay/build.gradle.kts | 16 ++++++++-------- gradle.properties | 2 +- gradle/libs.versions.toml | 3 +-- gradle/wrapper/gradle-wrapper.properties | 5 +++-- 6 files changed, 21 insertions(+), 27 deletions(-) diff --git a/.github/workflows/release-snapshot.yml b/.github/workflows/release-snapshot.yml index 57a516bb..aa94b917 100644 --- a/.github/workflows/release-snapshot.yml +++ b/.github/workflows/release-snapshot.yml @@ -25,6 +25,6 @@ jobs: env: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME_FOR_TOKEN }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_TOKEN }} - ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.PGP_SIGNING_KEY_ID }} - ORG_GRADLE_PROJECT_signingKey: ${{ secrets.PGP_SIGNING_KEY }} - ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.PGP_SIGNING_PASSWORD }} + ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.PGP_SIGNING_KEY_ID }} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.PGP_SIGNING_KEY }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.PGP_SIGNING_PASSWORD }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ddbe02dd..60a9fa1e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,17 +23,11 @@ jobs: - name: Clean repository before building SDK run: ./gradlew clean - - name: Build and upload archives to the Maven Central Repository - run: ./gradlew afterpay:publishAllPublicationsToMavenCentralRepository --no-daemon --no-parallel - env: - ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME_FOR_TOKEN }} - ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_TOKEN }} - ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.PGP_SIGNING_KEY_ID }} - ORG_GRADLE_PROJECT_signingKey: ${{ secrets.PGP_SIGNING_KEY }} - ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.PGP_SIGNING_PASSWORD }} - - - name: Publish release to the Maven Central Repository - run: ./gradlew closeAndReleaseRepository + - name: Build and publish release to Maven Central + run: ./gradlew afterpay:publishAndReleaseToMavenCentral --no-configuration-cache --no-daemon --no-parallel env: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME_FOR_TOKEN }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_TOKEN }} + ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.PGP_SIGNING_KEY_ID }} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.PGP_SIGNING_KEY }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.PGP_SIGNING_PASSWORD }} diff --git a/afterpay/build.gradle.kts b/afterpay/build.gradle.kts index 67180521..e3d65175 100644 --- a/afterpay/build.gradle.kts +++ b/afterpay/build.gradle.kts @@ -13,6 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import com.vanniktech.maven.publish.SonatypeHost +import org.gradle.plugins.signing.Sign + plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) @@ -78,15 +81,12 @@ dependencies { testImplementation(libs.mockK) } +mavenPublishing { + publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL) + signAllPublications() +} + tasks.withType { val version = project.version.toString() onlyIf { !version.endsWith("SNAPSHOT") } } - -signing { - useInMemoryPgpKeys( - findProperty("signingKeyId").toString(), - findProperty("signingKey").toString(), - findProperty("signingPassword").toString(), - ) -} diff --git a/gradle.properties b/gradle.properties index dda17fb6..78033f0d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ GROUP=com.afterpay -VERSION_NAME=4.8.3-SNAPSHOT +VERSION_NAME=4.9.0-SNAPSHOT POM_URL=https://github.com/afterpay/sdk-android/ POM_SCM_URL=https://github.com/afterpay/sdk-android/ diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 89f4e4fe..99e23c59 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ core_ktx = "1.10.1" junit = "4.13.2" ktlint = "0.48.2" material = "1.12.0" -maven_publish_plugin = "0.17.0" +maven_publish_plugin = "0.31.0" mockk = "1.13.5" moshi = "1.14.0" # latest version that is compatible with kotlin 1.7.x retrofit = "2.9.0" # latest version that is compatible with kotlin 1.7.x @@ -54,4 +54,3 @@ spotless = "com.diffplug.spotless:7.0.0.BETA1" kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } vanniktech-maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "maven_publish_plugin" } secrets-gradle-plugin = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin", version.ref = "secretsGradlePlugin" } - diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6b219fa0..1af9e093 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ -#Wed Dec 02 12:29:11 AEDT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip From 455388e596fdab0228a52747e78dc1ea171843ce Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 28 Aug 2026 13:25:51 -0400 Subject: [PATCH 2/5] Use Central Portal publishing secrets --- .github/workflows/release-snapshot.yml | 9 ++++----- .github/workflows/release.yml | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.github/workflows/release-snapshot.yml b/.github/workflows/release-snapshot.yml index aa94b917..5b008e98 100644 --- a/.github/workflows/release-snapshot.yml +++ b/.github/workflows/release-snapshot.yml @@ -23,8 +23,7 @@ jobs: - name: Build and upload archives to the Maven Central Repository run: ./gradlew afterpay:publishAllPublicationsToMavenCentralRepository --no-daemon --no-parallel env: - ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME_FOR_TOKEN }} - ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_TOKEN }} - ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.PGP_SIGNING_KEY_ID }} - ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.PGP_SIGNING_KEY }} - ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.PGP_SIGNING_PASSWORD }} + ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_CENTRAL_USERNAME }} + ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_CENTRAL_PASSWORD }} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_SECRET_KEY }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_SECRET_PASSPHRASE }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 60a9fa1e..271cb70e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,8 +26,7 @@ jobs: - name: Build and publish release to Maven Central run: ./gradlew afterpay:publishAndReleaseToMavenCentral --no-configuration-cache --no-daemon --no-parallel env: - ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME_FOR_TOKEN }} - ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_TOKEN }} - ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.PGP_SIGNING_KEY_ID }} - ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.PGP_SIGNING_KEY }} - ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.PGP_SIGNING_PASSWORD }} + ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_CENTRAL_USERNAME }} + ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_CENTRAL_PASSWORD }} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_SECRET_KEY }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_SECRET_PASSPHRASE }} From ec378e702289d607e575082f37b783cd75646926 Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 28 Aug 2026 13:52:41 -0400 Subject: [PATCH 3/5] Align Kotlin with publishing plugin --- gradle/libs.versions.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 99e23c59..295a5db7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ minSdk = "24" java = "17" # remember to update java version in .github/workflows as well androidGradlePlugin = "8.2.2" -kotlin = "1.7.20" +kotlin = "1.9.20" kotlinx_coroutines = "1.7.1" kotlinx_serialization = "1.5.1" @@ -17,8 +17,8 @@ ktlint = "0.48.2" material = "1.12.0" maven_publish_plugin = "0.31.0" mockk = "1.13.5" -moshi = "1.14.0" # latest version that is compatible with kotlin 1.7.x -retrofit = "2.9.0" # latest version that is compatible with kotlin 1.7.x +moshi = "1.14.0" +retrofit = "2.9.0" secretsGradlePlugin = "2.0.1" tools_desugar_sdk = "2.1.2" From 96dcd1017e80446bc36d4c0ae970bfd053fdf25d Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 28 Aug 2026 14:10:14 -0400 Subject: [PATCH 4/5] Use latest AGP 8 publishing stack --- afterpay/build.gradle.kts | 3 +-- gradle/libs.versions.toml | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/afterpay/build.gradle.kts b/afterpay/build.gradle.kts index e3d65175..91724b2f 100644 --- a/afterpay/build.gradle.kts +++ b/afterpay/build.gradle.kts @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import com.vanniktech.maven.publish.SonatypeHost import org.gradle.plugins.signing.Sign plugins { @@ -82,7 +81,7 @@ dependencies { } mavenPublishing { - publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL) + publishToMavenCentral() signAllPublications() } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 295a5db7..d3ca569b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ core_ktx = "1.10.1" junit = "4.13.2" ktlint = "0.48.2" material = "1.12.0" -maven_publish_plugin = "0.31.0" +maven_publish_plugin = "0.35.0" mockk = "1.13.5" moshi = "1.14.0" retrofit = "2.9.0" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1af9e093..37f853b1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From a5206e8f3d25d4c1d575b95820df7e02673a7f4e Mon Sep 17 00:00:00 2001 From: Noah Date: Fri, 28 Aug 2026 14:25:43 -0400 Subject: [PATCH 5/5] Update snapshot installation instructions --- docs/installation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/installation.md b/docs/installation.md index 9f4879ae..f379d4ed 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -38,7 +38,7 @@ Follow the steps below to add the latest snapshot build to your project. repositories { ... maven { - url = 'https://oss.sonatype.org/content/repositories/snapshots/' + url = 'https://central.sonatype.com/repository/maven-snapshots/' } ... } @@ -48,7 +48,7 @@ repositories { ``` gradle dependencies { - implementation 'com.afterpay:afterpay-android:4.8.3-SNAPSHOT' # or specific "vX.X.X-SNAPSHOT" version of this library. + implementation 'com.afterpay:afterpay-android:4.9.0-SNAPSHOT' # or specific "vX.X.X-SNAPSHOT" version of this library. } ```