From 35fd86319c0af9f1938029923d1b41dbb0f637f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Jastrze=CC=A8bski?= Date: Wed, 26 Feb 2025 11:46:50 +0100 Subject: [PATCH 1/8] chore: publish to maven central --- gradle-plugins/publish-to-maven-central.sh | 10 +++ gradle-plugins/publish-to-maven-local.sh | 10 ++- .../react/brownfield/build.gradle.kts | 64 +++++++++++++++++++ .../react/brownfield/gradle.properties | 5 +- 4 files changed, 86 insertions(+), 3 deletions(-) create mode 100755 gradle-plugins/publish-to-maven-central.sh mode change 100644 => 100755 gradle-plugins/publish-to-maven-local.sh diff --git a/gradle-plugins/publish-to-maven-central.sh b/gradle-plugins/publish-to-maven-central.sh new file mode 100755 index 00000000..18ceb254 --- /dev/null +++ b/gradle-plugins/publish-to-maven-central.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -e + +cd ./gradle-plugins/react + +./gradlew build +./gradlew :brownfield:publishToMavenLocal +./gradlew signing + diff --git a/gradle-plugins/publish-to-maven-local.sh b/gradle-plugins/publish-to-maven-local.sh old mode 100644 new mode 100755 index e9864258..7c128698 --- a/gradle-plugins/publish-to-maven-local.sh +++ b/gradle-plugins/publish-to-maven-local.sh @@ -1,2 +1,8 @@ -cd ./gradle-plugins/react && ./gradlew build || exit 1 -./gradlew :brownfield:publishToMavenLocal \ No newline at end of file +#!/bin/bash + +set -e + +cd ./react + +./gradlew build +./gradlew :brownfield:publishToMavenLocal diff --git a/gradle-plugins/react/brownfield/build.gradle.kts b/gradle-plugins/react/brownfield/build.gradle.kts index 2b51e2c9..72fcf2f7 100644 --- a/gradle-plugins/react/brownfield/build.gradle.kts +++ b/gradle-plugins/react/brownfield/build.gradle.kts @@ -1,9 +1,12 @@ +import java.util.Properties + plugins { alias(libs.plugins.kotlinJvm) `java-gradle-plugin` alias(libs.plugins.ktlint) alias(libs.plugins.detekt) `maven-publish` + signing } ktlint { @@ -42,6 +45,67 @@ publishing { publications.withType().configureEach { artifactId = property("ARTIFACT_ID").toString() } + + publications { + create("mavenCentral") { + from(components["java"]) + + groupId = property("GROUP").toString() + artifactId = property("ARTIFACT_ID").toString() + version = property("VERSION").toString() + + pom { + name.set(property("DISPLAY_NAME").toString()) + description.set(property("DESCRIPTION").toString()) + url.set(property("GITHUB_URL").toString()) + + licenses { + license { + name.set("The MIT License") + url.set("https://opensource.org/licenses/MIT") + distribution.set("repo") + } + } + developers { + developer { + id.set("callstack") + name.set("Callstack Team") + email.set("it-admin@callstack.com") + } + } + scm { + connection.set(property("SCM_CONNECTION").toString()) + developerConnection.set(property("SCM_DEV_CONNECTION").toString()) + url.set(property("GITHUB_URL").toString()) + } + } + } + } + + repositories { + maven { + name = "MavenCentral" + url = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") // Maven Central URL + + credentials { + username = findProperty("mavenCentralUsername") as String? ?: "" + password = findProperty("mavenCentralToken") as String? ?: "" + } + } + } +} + + +val localProperties = Properties().apply { + file("local.properties").takeIf { it.exists() }?.inputStream()?.use { load(it) } +} + +signing { + useInMemoryPgpKeys( + localProperties.getProperty("signingKey"), // GPG private key + localProperties.getProperty("signingPassword") // Passphrase + ) + sign(publishing.publications["mavenCentral"]) // Sign the Maven publication } repositories { diff --git a/gradle-plugins/react/brownfield/gradle.properties b/gradle-plugins/react/brownfield/gradle.properties index 63b6369e..3ccb2c9f 100644 --- a/gradle-plugins/react/brownfield/gradle.properties +++ b/gradle-plugins/react/brownfield/gradle.properties @@ -5,4 +5,7 @@ GROUP=com.callstack.react IMPLEMENTATION_CLASS=com.callstack.react.brownfield.plugin.RNBrownfieldPlugin DISPLAY_NAME=React Native Brownfield Gradle Plugin -DESCRIPTION=Helps you generate Fat Aar for React Native Brownfield Projects \ No newline at end of file +DESCRIPTION=Helps you generate Fat Aar for React Native Brownfield Projects +GITHUB_URL=https://github.com/callstack/react-native-brownfield/ +SCM_CONNECTION=scm:git:git://github.com/callstack/react-native-brownfield.git +SCM_DEV_CONNECTION=scm:git:ssh://git@github.com:callstack/react-native-brownfield.git From 9694448d537689986ef610b30d17e48b7906ae71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Jastrze=CC=A8bski?= Date: Fri, 21 Mar 2025 14:24:54 +0100 Subject: [PATCH 2/8] . --- gradle-plugins/publish-to-maven-local.sh | 2 ++ .../react/brownfield/build.gradle.kts | 23 +++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/gradle-plugins/publish-to-maven-local.sh b/gradle-plugins/publish-to-maven-local.sh index 7c128698..ad0c4f24 100755 --- a/gradle-plugins/publish-to-maven-local.sh +++ b/gradle-plugins/publish-to-maven-local.sh @@ -6,3 +6,5 @@ cd ./react ./gradlew build ./gradlew :brownfield:publishToMavenLocal +./gradlew signing + diff --git a/gradle-plugins/react/brownfield/build.gradle.kts b/gradle-plugins/react/brownfield/build.gradle.kts index 72fcf2f7..400b76c6 100644 --- a/gradle-plugins/react/brownfield/build.gradle.kts +++ b/gradle-plugins/react/brownfield/build.gradle.kts @@ -83,6 +83,7 @@ publishing { } repositories { + mavenLocal() maven { name = "MavenCentral" url = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") // Maven Central URL @@ -101,11 +102,7 @@ val localProperties = Properties().apply { } signing { - useInMemoryPgpKeys( - localProperties.getProperty("signingKey"), // GPG private key - localProperties.getProperty("signingPassword") // Passphrase - ) - sign(publishing.publications["mavenCentral"]) // Sign the Maven publication + sign(publishing.publications["mavenCentral"]) } repositories { @@ -126,3 +123,19 @@ tasks.named("detekt").configure { tasks.register("lint") { dependsOn(":ktlintFormat") } + +java { + withJavadocJar() + withSourcesJar() +} + +tasks.javadoc { + if (JavaVersion.current().isJava9Compatible) { + (options as StandardJavadocDocletOptions).addBooleanOption("html5", true) + } + options { + encoding = "UTF-8" + source = "8" + } +} + From 7db81f9cd477fe44b022092359f0474d0c648d3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Ro=C5=BCniata?= <56474758+krozniata@users.noreply.github.com> Date: Tue, 25 Mar 2025 10:57:46 +0100 Subject: [PATCH 3/8] chore: improve publishing script --- gradle-plugins/publish-to-maven-local.sh | 8 ++++---- gradle-plugins/react/brownfield/build.gradle.kts | 13 ++----------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/gradle-plugins/publish-to-maven-local.sh b/gradle-plugins/publish-to-maven-local.sh index ad0c4f24..fc78e6ef 100755 --- a/gradle-plugins/publish-to-maven-local.sh +++ b/gradle-plugins/publish-to-maven-local.sh @@ -2,9 +2,9 @@ set -e -cd ./react - +cd ./gradle-plugins/react +./gradlew clean ./gradlew build -./gradlew :brownfield:publishToMavenLocal -./gradlew signing +./gradlew :brownfield:publishMavenLocalPublicationToMavenLocalRepository +./gradlew :brownfield:signMavenLocalPublication diff --git a/gradle-plugins/react/brownfield/build.gradle.kts b/gradle-plugins/react/brownfield/build.gradle.kts index 400b76c6..005a5411 100644 --- a/gradle-plugins/react/brownfield/build.gradle.kts +++ b/gradle-plugins/react/brownfield/build.gradle.kts @@ -47,7 +47,7 @@ publishing { } publications { - create("mavenCentral") { + create("mavenLocal") { from(components["java"]) groupId = property("GROUP").toString() @@ -84,15 +84,6 @@ publishing { repositories { mavenLocal() - maven { - name = "MavenCentral" - url = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") // Maven Central URL - - credentials { - username = findProperty("mavenCentralUsername") as String? ?: "" - password = findProperty("mavenCentralToken") as String? ?: "" - } - } } } @@ -102,7 +93,7 @@ val localProperties = Properties().apply { } signing { - sign(publishing.publications["mavenCentral"]) + sign(publishing.publications["mavenLocal"]) } repositories { From 81d7136255619911482529ed021c48e44746ee37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Ro=C5=BCniata?= <56474758+krozniata@users.noreply.github.com> Date: Tue, 25 Mar 2025 13:22:43 +0100 Subject: [PATCH 4/8] chore: clean --- gradle-plugins/publish-to-maven-central.sh | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100755 gradle-plugins/publish-to-maven-central.sh diff --git a/gradle-plugins/publish-to-maven-central.sh b/gradle-plugins/publish-to-maven-central.sh deleted file mode 100755 index 18ceb254..00000000 --- a/gradle-plugins/publish-to-maven-central.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -set -e - -cd ./gradle-plugins/react - -./gradlew build -./gradlew :brownfield:publishToMavenLocal -./gradlew signing - From 44c12db884bc9bf112371ea54729ad6eda7b335e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Ro=C5=BCniata?= <56474758+krozniata@users.noreply.github.com> Date: Wed, 26 Mar 2025 16:03:57 +0100 Subject: [PATCH 5/8] chore: remove unused val --- gradle-plugins/react/brownfield/build.gradle.kts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/gradle-plugins/react/brownfield/build.gradle.kts b/gradle-plugins/react/brownfield/build.gradle.kts index 005a5411..5a19793c 100644 --- a/gradle-plugins/react/brownfield/build.gradle.kts +++ b/gradle-plugins/react/brownfield/build.gradle.kts @@ -87,11 +87,6 @@ publishing { } } - -val localProperties = Properties().apply { - file("local.properties").takeIf { it.exists() }?.inputStream()?.use { load(it) } -} - signing { sign(publishing.publications["mavenLocal"]) } From b2635c54593e8d5ee073482b623099ad8f7a5fbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Ro=C5=BCniata?= <56474758+krozniata@users.noreply.github.com> Date: Wed, 26 Mar 2025 16:05:33 +0100 Subject: [PATCH 6/8] chore: remove sign step --- gradle-plugins/publish-to-maven-local.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/gradle-plugins/publish-to-maven-local.sh b/gradle-plugins/publish-to-maven-local.sh index fc78e6ef..39db8b77 100755 --- a/gradle-plugins/publish-to-maven-local.sh +++ b/gradle-plugins/publish-to-maven-local.sh @@ -5,6 +5,4 @@ set -e cd ./gradle-plugins/react ./gradlew clean ./gradlew build -./gradlew :brownfield:publishMavenLocalPublicationToMavenLocalRepository -./gradlew :brownfield:signMavenLocalPublication - +./gradlew :brownfield:publishMavenLocalPublicationToMavenLocalRepository \ No newline at end of file From 6fae28d59be5bfc4e39bd3b0de523b46009542c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Ro=C5=BCniata?= <56474758+krozniata@users.noreply.github.com> Date: Thu, 27 Mar 2025 11:29:05 +0100 Subject: [PATCH 7/8] chore: add PUBLISHING.md --- gradle-plugins/react/PUBLISHING.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 gradle-plugins/react/PUBLISHING.md diff --git a/gradle-plugins/react/PUBLISHING.md b/gradle-plugins/react/PUBLISHING.md new file mode 100644 index 00000000..d87ad040 --- /dev/null +++ b/gradle-plugins/react/PUBLISHING.md @@ -0,0 +1,23 @@ +# Publishing a Signed Plugin + +To publish a signed plugin (currently to `mavenLocal` only), you need to configure the signing key data in plugin's `gradle.properties` file + +### 1. Add Signing Key Data +Update `gradle.properties` file with the following properties: +``` +signing.keyId= +signing.password= +signing.secretKeyRingFile= +``` +* `keyId`: The public key ID. +* `password`: The passphrase used when creating the key. +* `secretKeyRingFile`: The absolute path to the private key file. + +### 2. Publish the Plugin +Once the signing key is set up correctly, run the following command: +```sh +yarn brownfield:plugin:publish:local +``` + +### 3. Output +If everything is configured properly, the signed plugin will be published to the `~/.m2` repository. \ No newline at end of file From de296876e93795114591c4d81052848aa70788f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Ro=C5=BCniata?= <56474758+krozniata@users.noreply.github.com> Date: Thu, 10 Apr 2025 11:32:48 +0200 Subject: [PATCH 8/8] chore: update --- gradle-plugins/react/PUBLISHING.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gradle-plugins/react/PUBLISHING.md b/gradle-plugins/react/PUBLISHING.md index d87ad040..048eb7a8 100644 --- a/gradle-plugins/react/PUBLISHING.md +++ b/gradle-plugins/react/PUBLISHING.md @@ -2,6 +2,9 @@ To publish a signed plugin (currently to `mavenLocal` only), you need to configure the signing key data in plugin's `gradle.properties` file +> [!IMPORTANT] +> Make sure to clear `~/.m2` directory before starting publishing process + ### 1. Add Signing Key Data Update `gradle.properties` file with the following properties: ``` @@ -20,4 +23,8 @@ yarn brownfield:plugin:publish:local ``` ### 3. Output -If everything is configured properly, the signed plugin will be published to the `~/.m2` repository. \ No newline at end of file +If everything is configured properly, the signed plugin will be published to the `~/.m2` repository. + +### 4. Publishing +Go to `~/.m2/repository`, ZIP created plugin at `com` directory level (make sure there isn't any other plugin inside it) and upload it to [Maven Central](https://central.sonatype.com/) +