Browse Source

Publish gradle-plugins to Maven Central (#5333)

* Publish gradle-plugins to Maven Central

* Update .github/workflows/release-gradle-plugins.yml

Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>

Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
Anuraag Agrawal 3 years ago
parent
commit
aeee5b4fae

+ 9 - 3
.github/workflows/release-gradle-plugins.yml

@@ -156,10 +156,16 @@ jobs:
           distribution: adopt
           java-version: 11
 
-        # TODO (trask) cache gradle wrapper?
       - name: Build and publish gradle plugins
+        uses: gradle/gradle-build-action@v2
         env:
+          SONATYPE_USER: ${{ secrets.SONATYPE_USER }}
+          SONATYPE_KEY: ${{ secrets.SONATYPE_KEY }}
           GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }}
           GRADLE_PUBLISH_SECRET: ${{ secrets.GRADLE_PUBLISH_SECRET }}
-        run: ../gradlew build publishPlugins
-        working-directory: gradle-plugins
+          GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
+          GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }}
+        with:
+          # Don't use publishToSonatype since we don't want to publish the marker artifact
+          arguments: build publishPlugins publishPluginMavenPublicationToSonatypeRepository closeAndReleaseSonatypeStagingRepository
+          build-root-directory: gradle-plugins

+ 6 - 1
.github/workflows/release.yml

@@ -157,10 +157,15 @@ jobs:
       - name: Build and publish gradle plugins
         uses: gradle/gradle-build-action@v2
         env:
+          SONATYPE_USER: ${{ secrets.SONATYPE_USER }}
+          SONATYPE_KEY: ${{ secrets.SONATYPE_KEY }}
           GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }}
           GRADLE_PUBLISH_SECRET: ${{ secrets.GRADLE_PUBLISH_SECRET }}
+          GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
+          GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }}
         with:
-          arguments: build publishPlugins
+          # Don't use publishToSonatype since we don't want to publish the marker artifact
+          arguments: build publishPlugins publishPluginMavenPublicationToSonatypeRepository closeAndReleaseSonatypeStagingRepository
           build-root-directory: gradle-plugins
 
       - name: Set release version

+ 65 - 2
gradle-plugins/build.gradle.kts

@@ -3,6 +3,7 @@ import java.time.Duration
 plugins {
   `kotlin-dsl`
   `maven-publish`
+  signing
 
   id("com.gradle.plugin-publish")
   id("io.github.gradle-nexus.publish-plugin")
@@ -44,8 +45,16 @@ dependencies {
   testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
 }
 
-tasks.withType<Test>().configureEach {
-  useJUnitPlatform()
+tasks {
+  withType<Test>().configureEach {
+    useJUnitPlatform()
+  }
+
+  withType<JavaCompile>().configureEach {
+    with(options) {
+      release.set(8)
+    }
+  }
 }
 
 pluginBundle {
@@ -67,6 +76,14 @@ gradlePlugin {
   }
 }
 
+java {
+  toolchain {
+    languageVersion.set(JavaLanguageVersion.of(11))
+  }
+  withJavadocJar()
+  withSourcesJar()
+}
+
 nexusPublishing {
   packageGroup.set("io.opentelemetry")
 
@@ -86,3 +103,49 @@ tasks {
     enabled = !version.toString().contains("SNAPSHOT")
   }
 }
+
+afterEvaluate {
+  publishing {
+    publications {
+      named<MavenPublication>("pluginMaven") {
+        pom {
+          name.set("OpenTelemetry Instrumentation Gradle Plugins")
+          description.set("Gradle plugins to assist developing OpenTelemetry instrumentation")
+          url.set("https://github.com/open-telemetry/opentelemetry-java-instrumentation")
+
+          licenses {
+            license {
+              name.set("The Apache License, Version 2.0")
+              url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
+            }
+          }
+
+          developers {
+            developer {
+              id.set("opentelemetry")
+              name.set("OpenTelemetry")
+              url.set("https://github.com/open-telemetry/opentelemetry-java-instrumentation/discussions")
+            }
+          }
+
+          scm {
+            connection.set("scm:git:git@github.com:open-telemetry/opentelemetry-java-instrumentation.git")
+            developerConnection.set("scm:git:git@github.com:open-telemetry/opentelemetry-java-instrumentation.git")
+            url.set("git@github.com:open-telemetry/opentelemetry-java-instrumentation.git")
+          }
+        }
+      }
+    }
+  }
+
+// Sign only if we have a key to do so
+  val signingKey: String? = System.getenv("GPG_PRIVATE_KEY")
+// Stub out entire signing block off of CI since Gradle provides no way of lazy configuration of
+// signing tasks.
+  if (System.getenv("CI") != null && signingKey != null) {
+    signing {
+      useInMemoryPgpKeys(signingKey, System.getenv("GPG_PASSWORD"))
+      sign(publishing.publications["pluginMaven"])
+    }
+  }
+}