|
| 1 | +apply plugin: 'java' |
1 | 2 | apply plugin: 'maven-publish'
|
| 3 | +apply plugin: 'signing' |
2 | 4 |
|
3 |
| -tasks.register( 'sourcesJar', Jar ) { |
4 |
| - from sourceSets.main.allJava |
5 |
| - archiveClassifier = 'sources' |
6 |
| -} |
| 5 | +// Java / publishing |
7 | 6 |
|
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() |
11 | 12 | }
|
12 | 13 |
|
13 | 14 | jar {
|
@@ -35,14 +36,9 @@ javadoc {
|
35 | 36 |
|
36 | 37 | publishing {
|
37 | 38 | publications {
|
38 |
| - logger.lifecycle "Publishing groupId: '" + project.group + "', version: '" + project.version + "'" |
39 |
| - |
40 | 39 | publishedArtifacts(MavenPublication) {
|
41 |
| - groupId = project.group |
42 |
| - version = project.version |
43 | 40 | from components.java
|
44 |
| - artifact sourcesJar |
45 |
| - artifact javadocJar |
| 41 | + |
46 | 42 | pom {
|
47 | 43 | name = project.mavenPomName
|
48 | 44 | description = project.description
|
@@ -80,3 +76,78 @@ publishing {
|
80 | 76 | }
|
81 | 77 | }
|
82 | 78 | }
|
| 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