Skip to content

Commit 67f2ebb

Browse files
committed
Add signing plugin
- Gradle build can now sign artifacts conditionally - Relates #1033
1 parent 831f2cf commit 67f2ebb

File tree

2 files changed

+71
-22
lines changed

2 files changed

+71
-22
lines changed

buildSrc/src/main/java/org/springframework/shell/gradle/SpringMavenPlugin.java

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
import org.gradle.api.Plugin;
2222
import org.gradle.api.Project;
2323
import org.gradle.api.attributes.Usage;
24-
import org.gradle.api.component.AdhocComponentWithVariants;
25-
import org.gradle.api.component.ConfigurationVariantDetails;
2624
import org.gradle.api.plugins.JavaPlugin;
2725
import org.gradle.api.plugins.JavaPluginExtension;
2826
import org.gradle.api.plugins.PluginManager;
@@ -45,6 +43,7 @@ public class SpringMavenPlugin implements Plugin<Project> {
4543
public void apply(Project project) {
4644
PluginManager pluginManager = project.getPluginManager();
4745
pluginManager.apply(MavenPublishPlugin.class);
46+
pluginManager.apply(SpringSigningPlugin.class);
4847
pluginManager.apply(PublishLocalPlugin.class);
4948
pluginManager.apply(PublishAllJavaComponentsPlugin.class);
5049

@@ -64,35 +63,15 @@ private void customizeMavenPublication(MavenPublication publication, Project pro
6463
customizePom(publication.getPom(), project);
6564
project.getPlugins().withType(JavaPlugin.class)
6665
.all((javaPlugin) -> customizeJavaMavenPublication(publication, project));
67-
suppressMavenOptionalFeatureWarnings(publication);
6866
}
6967

7068
private void customizeJavaMavenPublication(MavenPublication publication, Project project) {
71-
addMavenOptionalFeature(project);
7269
publication.versionMapping((strategy) -> strategy.usage(Usage.JAVA_API, (mappingStrategy) -> mappingStrategy
7370
.fromResolutionOf(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME)));
7471
publication.versionMapping(
7572
(strategy) -> strategy.usage(Usage.JAVA_RUNTIME, VariantVersionMappingStrategy::fromResolutionResult));
7673
}
7774

78-
private void suppressMavenOptionalFeatureWarnings(MavenPublication publication) {
79-
publication.suppressPomMetadataWarningsFor("mavenOptionalApiElements");
80-
publication.suppressPomMetadataWarningsFor("mavenOptionalRuntimeElements");
81-
}
82-
83-
private void addMavenOptionalFeature(Project project) {
84-
JavaPluginExtension extension = project.getExtensions().getByType(JavaPluginExtension.class);
85-
extension.registerFeature("mavenOptional",
86-
(feature) -> feature.usingSourceSet(extension.getSourceSets().getByName("main")));
87-
AdhocComponentWithVariants javaComponent = (AdhocComponentWithVariants) project.getComponents()
88-
.findByName("java");
89-
if (javaComponent != null) {
90-
javaComponent.addVariantsFromConfiguration(
91-
project.getConfigurations().findByName("mavenOptionalRuntimeElements"),
92-
ConfigurationVariantDetails::mapToOptional);
93-
}
94-
}
95-
9675
private void customizePom(MavenPom pom, Project project) {
9776
pom.getUrl().set("https://spring.io/projects/spring-shell");
9877
pom.getName().set(project.provider(project::getName));
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* Copyright 2016-2019 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
5+
* use this file except in compliance with the License. You may obtain a copy of
6+
* the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
* License for the specific language governing permissions and limitations under
14+
* the License.
15+
*/
16+
17+
package org.springframework.shell.gradle;
18+
19+
import java.util.concurrent.Callable;
20+
21+
import org.gradle.api.Action;
22+
import org.gradle.api.Plugin;
23+
import org.gradle.api.Project;
24+
import org.gradle.api.publish.Publication;
25+
import org.gradle.api.publish.PublishingExtension;
26+
import org.gradle.plugins.signing.SigningExtension;
27+
import org.gradle.plugins.signing.SigningPlugin;
28+
29+
public class SpringSigningPlugin implements Plugin<Project> {
30+
@Override
31+
public void apply(Project project) {
32+
project.getPluginManager().apply(SigningPlugin.class);
33+
project.getPlugins().withType(SigningPlugin.class).all(new Action<SigningPlugin>() {
34+
@Override
35+
public void execute(SigningPlugin signingPlugin) {
36+
boolean hasSigningKey = project.hasProperty("signingKey");
37+
if (hasSigningKey) {
38+
sign(project);
39+
}
40+
}
41+
});
42+
}
43+
44+
private void sign(Project project) {
45+
SigningExtension signing = project.getExtensions().findByType(SigningExtension.class);
46+
signing.setRequired(new Callable<Boolean>() {
47+
@Override
48+
public Boolean call() throws Exception {
49+
return project.getGradle().getTaskGraph().hasTask("publishArtifacts");
50+
}
51+
});
52+
String signingKeyId = (String) project.findProperty("signingKeyId");
53+
String signingKey = (String) project.findProperty("signingKey");
54+
String signingPassword = (String) project.findProperty("signingPassword");
55+
if (signingKeyId != null) {
56+
signing.useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword);
57+
} else {
58+
signing.useInMemoryPgpKeys(signingKey, signingPassword);
59+
}
60+
project.getPlugins().withType(PublishAllJavaComponentsPlugin.class)
61+
.all(new Action<PublishAllJavaComponentsPlugin>() {
62+
@Override
63+
public void execute(PublishAllJavaComponentsPlugin publishingPlugin) {
64+
PublishingExtension publishing = project.getExtensions().findByType(PublishingExtension.class);
65+
Publication maven = publishing.getPublications().getByName("mavenJava");
66+
signing.sign(maven);
67+
}
68+
});
69+
}
70+
}

0 commit comments

Comments
 (0)