This is an automated email from the ASF dual-hosted git repository.

jdaugherty pushed a commit to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/grails-core.git


The following commit(s) were added to refs/heads/7.0.x by this push:
     new 07bd6c5e7c [skip ci] adopt ASF signing workflow
07bd6c5e7c is described below

commit 07bd6c5e7cfe8bb30991bba2b37fa369de5cec36
Author: James Daugherty <[email protected]>
AuthorDate: Tue May 27 15:24:35 2025 -0400

    [skip ci] adopt ASF signing workflow
---
 .github/workflows/release.yml                      | 21 +++++++++-------
 grails-gradle/gradle/signing-config.gradle         |  2 ++
 .../publishing/GrailsPublishGradlePlugin.groovy    | 29 ++++++++++++++++++----
 3 files changed, 38 insertions(+), 14 deletions(-)

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index b91898528d..27db5491fb 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -35,6 +35,12 @@ jobs:
         uses: actions/checkout@v4
       - name: 'Ensure Common Build Date' # to ensure a reproducible build
         run: echo "SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)" >> 
"$GITHUB_ENV"
+      - name: '🔐 Set up GPG'
+        run: |
+          echo "${{ secrets.GRAILS_GPG_KEY }}" | gpg --batch --import
+          gpg --list-keys
+        env:
+          GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
       - name: "☕️ Setup JDK"
         uses: actions/setup-java@v4
         with:
@@ -90,9 +96,8 @@ jobs:
           NEXUS_PUBLISH_USERNAME: ${{ secrets.NEXUS_STAGE_DEPLOYER_USER }}
           NEXUS_PUBLISH_PASSWORD: ${{ secrets.NEXUS_STAGE_DEPLOYER_PW }}
           NEXUS_PUBLISH_URL: ${{ secrets.GRAILS_NEXUS_PUBLISH_RELEASE_URL }}
-          NEXUS_PUBLISH_STAGING_PROFILE_ID: ${{ 
secrets.NEXUS_PUBLISH_STAGING_PROFILE_ID }} # TODO: unknown at this time
-          SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
-          SIGNING_PASSPHRASE: ${{ secrets.SIGNING_PASSPHRASE }}
+          NEXUS_PUBLISH_STAGING_PROFILE_ID: ${{ secrets.STAGING_PROFILE_ID }}
+          SIGNING_KEY: ${{ secrets.GPG_KEY_ID }}
         working-directory: 'grails-gradle'
         run: >
           ./gradlew 
@@ -104,9 +109,8 @@ jobs:
           NEXUS_PUBLISH_USERNAME: ${{ secrets.NEXUS_STAGE_DEPLOYER_USER }}
           NEXUS_PUBLISH_PASSWORD: ${{ secrets.NEXUS_STAGE_DEPLOYER_PW }}
           NEXUS_PUBLISH_URL: ${{ secrets.GRAILS_NEXUS_PUBLISH_RELEASE_URL }}
-          NEXUS_PUBLISH_STAGING_PROFILE_ID: ${{ 
secrets.NEXUS_PUBLISH_STAGING_PROFILE_ID }} # TODO: unknown at this time
-          SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
-          SIGNING_PASSPHRASE: ${{ secrets.SIGNING_PASSPHRASE }}
+          NEXUS_PUBLISH_STAGING_PROFILE_ID: ${{ secrets.STAGING_PROFILE_ID }}
+          SIGNING_KEY: ${{ secrets.GPG_KEY_ID }}
         working-directory: 'grails-gradle'
         run: >
           ./gradlew
@@ -122,9 +126,8 @@ jobs:
           NEXUS_PUBLISH_USERNAME: ${{ secrets.NEXUS_STAGE_DEPLOYER_USER }}
           NEXUS_PUBLISH_PASSWORD: ${{ secrets.NEXUS_STAGE_DEPLOYER_PW }}
           NEXUS_PUBLISH_URL: ${{ secrets.GRAILS_NEXUS_PUBLISH_RELEASE_URL }}
-          NEXUS_PUBLISH_STAGING_PROFILE_ID: ${{ 
secrets.NEXUS_PUBLISH_STAGING_PROFILE_ID }} # TODO: unknown at this time
-          SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
-          SIGNING_PASSPHRASE: ${{ secrets.SIGNING_PASSPHRASE }}
+          NEXUS_PUBLISH_STAGING_PROFILE_ID: ${{ secrets.STAGING_PROFILE_ID }}
+          SIGNING_KEY: ${{ secrets.GPG_KEY_ID }}
         run: >
           ./gradlew
           -Psigning.secretKeyRingFile=${{ github.workspace }}/secring.gpg 
diff --git a/grails-gradle/gradle/signing-config.gradle 
b/grails-gradle/gradle/signing-config.gradle
index d06001245e..25d7d90c44 100644
--- a/grails-gradle/gradle/signing-config.gradle
+++ b/grails-gradle/gradle/signing-config.gradle
@@ -24,6 +24,8 @@ if (isReleaseVersion) {
     afterEvaluate {
         signing {
             required { isReleaseVersion && gradle.taskGraph.hasTask('publish') 
}
+            useGpgCmd()
+
             Publication[] publications = new 
Publication[publishing.publications.size()]
             publishing.publications.findAll().toArray(publications)
             sign(publications)
diff --git 
a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/publishing/GrailsPublishGradlePlugin.groovy
 
b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/publishing/GrailsPublishGradlePlugin.groovy
index 8b6366528f..bb8d2d2154 100644
--- 
a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/publishing/GrailsPublishGradlePlugin.groovy
+++ 
b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/publishing/GrailsPublishGradlePlugin.groovy
@@ -105,7 +105,7 @@ The credentials and connection url must be specified as a 
project property or an
     NEXUS_PUBLISH_SNAPSHOT_URL
     NEXUS_PUBLISH_STAGING_PROFILE_ID
 
-When using `NEXUS_PUBLISH`, the property `signing.secretKeyRingFile` must be 
set to the path of the GPG keyring file.
+When using `NEXUS_PUBLISH`, either the property `signing.secretKeyRingFile` 
must be set to the path of the GPG keyring file or local gpg must be configured 
to sign artifacts.
 
 Note: if project properties are used, the properties must be defined prior to 
applying this plugin.
 """
@@ -125,10 +125,6 @@ Note: if project properties are used, the properties must 
be defined prior to ap
 
         final ExtraPropertiesExtension extraPropertiesExtension = 
project.extensions.findByType(ExtraPropertiesExtension)
 
-        extraPropertiesExtension.setProperty('signing.keyId', 
project.findProperty('signing.keyId') ?: System.getenv('SIGNING_KEY'))
-        extraPropertiesExtension.setProperty('signing.password', 
project.findProperty('signing.password') ?: System.getenv('SIGNING_PASSPHRASE'))
-        extraPropertiesExtension.setProperty('signing.secretKeyRingFile', 
project.findProperty('signing.secretKeyRingFile') ?: 
System.getenv('SIGNING_KEYRING'))
-
         PublishType snapshotPublishType = 
project.hasProperty(SNAPSHOT_PUBLISH_TYPE_PROPERTY) ? 
PublishType.valueOf(project.property(SNAPSHOT_PUBLISH_TYPE_PROPERTY) as String) 
: PublishType.MAVEN_PUBLISH
         PublishType releasePublishType = 
project.hasProperty(RELEASE_PUBLISH_TYPE_PROPERTY) ? 
PublishType.valueOf(project.property(RELEASE_PUBLISH_TYPE_PROPERTY) as String) 
: PublishType.NEXUS_PUBLISH
 
@@ -178,6 +174,26 @@ Note: if project properties are used, the properties must 
be defined prior to ap
         final PluginManager projectPluginManager = project.pluginManager
         projectPluginManager.apply(MavenPublishPlugin)
 
+        boolean localSigning = false
+        if(isRelease) {
+            String signingKeyId = project.findProperty('signing.keyId') ?: 
System.getenv('SIGNING_KEY')
+            extraPropertiesExtension.setProperty('signing.keyId', signingKeyId)
+            String secringFile = 
project.findProperty('signing.secretKeyRingFile') ?: 
System.getenv('SIGNING_KEYRING')
+            if(!secringFile) {
+                project.logger.info("No keyring file has been specified. 
Assuming the use of local gpgCommand instead.")
+                localSigning = true
+                extraPropertiesExtension.setProperty('signing.gnupg.keyName', 
signingKeyId)
+            }
+            else {
+                
extraPropertiesExtension.setProperty('signing.secretKeyRingFile', secringFile)
+
+                String signingPassphrase = 
project.findProperty('signing.password') ?: System.getenv('SIGNING_PASSPHRASE')
+                if(signingPassphrase) {
+                    extraPropertiesExtension.setProperty('signing.password', 
signingPassphrase)
+                }
+            }
+        }
+
         if (isRelease || useNexusPublish) {
             if (project.pluginManager.hasPlugin(SIGNING_PLUGIN_ID)) {
                 project.rootProject.logger.debug('Signing Plugin already 
applied to project {}', project.name)
@@ -407,6 +423,9 @@ Note: if project properties are used, the properties must 
be defined prior to ap
             if (isRelease) {
                 extensionContainer.configure(SigningExtension, {
                     it.required = isRelease
+                    if(localSigning) {
+                        it.useGpgCmd()
+                    }
                     it.sign project.publishing.publications.maven
                 })
             }

Reply via email to