Skip to content

Commit bad390e

Browse files
sebersoleDavideD
authored andcommitted
[#1095] Sign the artifacts for Sonatype
1 parent c06e818 commit bad390e

File tree

3 files changed

+89
-18
lines changed

3 files changed

+89
-18
lines changed

ci/release/Jenkinsfile

+3-3
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ pipeline {
168168
withCredentials([
169169
usernamePassword(credentialsId: 'ossrh.sonatype.org', passwordVariable: 'OSSRH_PASSWORD', usernameVariable: 'OSSRH_USER'),
170170
usernamePassword(credentialsId: 'gradle-plugin-portal-api-key', passwordVariable: 'PLUGIN_PORTAL_PASSWORD', usernameVariable: 'PLUGIN_PORTAL_USERNAME'),
171-
file(credentialsId: 'release.gpg.private-key', variable: 'RELEASE_GPG_PRIVATE_KEY_PATH'),
172-
string(credentialsId: 'release.gpg.passphrase', variable: 'RELEASE_GPG_PASSPHRASE')
171+
file(credentialsId: 'release.gpg.private-key', variable: 'SIGNING_GPG_PRIVATE_KEY_PATH'),
172+
string(credentialsId: 'release.gpg.passphrase', variable: 'SIGNING_GPG_PASSPHRASE')
173173
]) {
174174
sshagent(['ed25519.Hibernate-CI.github.com', 'hibernate.filemgmt.jboss.org', 'hibernate-ci.frs.sourceforge.net']) {
175175
// set release version
@@ -202,7 +202,7 @@ pipeline {
202202
usernamePassword(credentialsId: 'ossrh.sonatype.org', passwordVariable: 'OSSRH_PASSWORD', usernameVariable: 'OSSRH_USER'),
203203
usernamePassword(credentialsId: 'gradle-plugin-portal-api-key', passwordVariable: 'PLUGIN_PORTAL_PASSWORD', usernameVariable: 'PLUGIN_PORTAL_USERNAME'),
204204
file(credentialsId: 'release.gpg.private-key', variable: 'RELEASE_GPG_PRIVATE_KEY_PATH'),
205-
string(credentialsId: 'release.gpg.passphrase', variable: 'RELEASE_GPG_PASSPHRASE'),
205+
string(credentialsId: 'release.gpg.passphrase', variable: 'RELEASE_GPG_PASSPHRASE')
206206
gitUsernamePassword(credentialsId: 'username-and-token.Hibernate-CI.github.com', gitToolName: 'Default')
207207
]) {
208208
sshagent(['ed25519.Hibernate-CI.github.com', 'hibernate.filemgmt.jboss.org', 'hibernate-ci.frs.sourceforge.net']) {

ci/snapshot-publish.Jenkinsfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ pipeline {
3232
steps {
3333
withCredentials([
3434
usernamePassword(credentialsId: 'ossrh.sonatype.org', usernameVariable: 'hibernatePublishUsername', passwordVariable: 'hibernatePublishPassword'),
35-
string(credentialsId: 'release.gpg.passphrase', variable: 'SIGNING_PASS'),
36-
file(credentialsId: 'release.gpg.private-key', variable: 'SIGNING_KEYRING')
35+
file(credentialsId: 'release.gpg.private-key', variable: 'SIGNING_GPG_PRIVATE_KEY_PATH'),
36+
string(credentialsId: 'release.gpg.passphrase', variable: 'SIGNING_GPG_PASSPHRASE')
3737
]) {
3838
sh '''./gradlew clean publish \
3939
-PhibernatePublishUsername=$hibernatePublishUsername \

publish.gradle

+84-13
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1+
apply plugin: 'java'
12
apply plugin: 'maven-publish'
3+
apply plugin: 'signing'
24

3-
tasks.register( 'sourcesJar', Jar ) {
4-
from sourceSets.main.allJava
5-
archiveClassifier = 'sources'
6-
}
5+
// Java / publishing
76

8-
tasks.register( 'javadocJar', Jar ) {
9-
from javadoc
10-
archiveClassifier = 'javadoc'
7+
java {
8+
// include javadoc and sources jar in the Java component
9+
// - classes jar included by default
10+
withJavadocJar()
11+
withSourcesJar()
1112
}
1213

1314
jar {
@@ -35,14 +36,9 @@ javadoc {
3536

3637
publishing {
3738
publications {
38-
logger.lifecycle "Publishing groupId: '" + project.group + "', version: '" + project.version + "'"
39-
4039
publishedArtifacts(MavenPublication) {
41-
groupId = project.group
42-
version = project.version
4340
from components.java
44-
artifact sourcesJar
45-
artifact javadocJar
41+
4642
pom {
4743
name = project.mavenPomName
4844
description = project.description
@@ -80,3 +76,78 @@ publishing {
8076
}
8177
}
8278
}
79+
80+
81+
// signing
82+
83+
var signingExtension = project.getExtensions().getByType(SigningExtension) as SigningExtension
84+
85+
// create a `signPublications` "grouping" task which will execute all Sign tasks
86+
def signPublicationsTask = tasks.register('signPublications')
87+
tasks.named( "publishPublishedArtifactsPublicationToSonatypeRepository" ) {
88+
dependsOn signPublicationsTask
89+
}
90+
91+
gradle.taskGraph.whenReady { TaskExecutionGraph graph ->
92+
boolean wasSigningRequested = false
93+
boolean wasPublishingRequested = false
94+
List<Sign> signingTasks = []
95+
96+
graph.allTasks.each {task ->
97+
logger.lifecycle( "Checking task : $task" )
98+
if ( task instanceof Sign ) {
99+
logger.lifecycle( " - Task is Sign" )
100+
signingTasks.add( task )
101+
wasSigningRequested = true
102+
}
103+
else if ( task instanceof PublishToMavenRepository ) {
104+
logger.lifecycle( " - Task is PublishToMavenRepository" )
105+
wasPublishingRequested = true
106+
}
107+
}
108+
109+
if ( wasPublishingRequested ) {
110+
logger.lifecycle "Publishing groupId: '" + project.group + "', version: '" + project.version + "'"
111+
}
112+
113+
if ( wasSigningRequested || wasPublishingRequested ) {
114+
// signing was explicitly requested and/or we are publishing to Sonatype OSSRH
115+
// - we need the signing to happen
116+
signingExtension.required = true
117+
118+
var signingKey = resolveSigningKey()
119+
var signingPassword = resolveSigningPassphrase()
120+
signingExtension.useInMemoryPgpKeys( signingKey, signingPassword )
121+
signingExtension.sign publishing.publications.publishedArtifacts
122+
123+
signPublicationsTask.get().dependsOn( signingTasks )
124+
}
125+
else {
126+
// signing was not explicitly requested and we are not publishing to OSSRH,
127+
// - disable all Sign tasks
128+
signingTasks.each { enabled = false }
129+
}
130+
}
131+
132+
133+
static String resolveSigningKey() {
134+
var key = System.getenv().get( "SIGNING_GPG_PRIVATE_KEY" )
135+
if ( key != null ) {
136+
return key
137+
}
138+
139+
var keyFile = System.getenv().get( "SIGNING_GPG_PRIVATE_KEY_PATH" )
140+
if ( keyFile != null ) {
141+
return new File( keyFile ).text
142+
}
143+
144+
throw new RuntimeException( "Cannot perform signing without GPG details." )
145+
}
146+
147+
static String resolveSigningPassphrase() {
148+
var passphrase = System.getenv().get( "SIGNING_GPG_PASSPHRASE" )
149+
if ( passphrase == null ) {
150+
throw new RuntimeException( "Cannot perform signing without GPG details." )
151+
}
152+
return passphrase
153+
}

0 commit comments

Comments
 (0)