Skip to content

Commit 2294e36

Browse files
committed
Modify build publishing
- Add signing plugin - Add nexus publishing plugin - Tweak publish to separate artifactory and nexus for release vs. snapshot/milestone - Remove docs publish from root as antora will have separate publishing system. - Modify ci workflow to use publishArtifacts task which would then pick either artifactory or nexus. - Relates #165
1 parent 3b237ce commit 2294e36

File tree

8 files changed

+162
-64
lines changed

8 files changed

+162
-64
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ jobs:
5151
ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
5252
ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
5353
run: |
54-
./gradlew build artifactoryPublish \
54+
./gradlew build publishArtifacts \
5555
-PartifactoryUsername="$ARTIFACTORY_USERNAME" \
5656
-PartifactoryPassword="$ARTIFACTORY_PASSWORD"
5757
docs:

buildSrc/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ dependencies {
2828
implementation 'org.jfrog.buildinfo:build-info-extractor-gradle:4.29.0'
2929
implementation 'org.antora:gradle-antora-plugin:1.0.0'
3030
implementation 'io.spring.gradle.antora:spring-antora-plugin:0.0.1'
31+
implementation 'io.github.gradle-nexus:publish-plugin:1.1.0'
3132
}
3233

3334
gradlePlugin {

buildSrc/src/main/java/org/springframework/security/kerberos/gradle/DocsPlugin.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ public void apply(Project project) {
4242
pluginManager.apply(JavaPlugin.class);
4343
pluginManager.apply(JavaLibraryPlugin.class);
4444
pluginManager.apply(ManagementConfigurationPlugin.class);
45-
pluginManager.apply(SpringMavenPlugin.class);
4645
pluginManager.apply(AntoraPlugin.class);
4746
pluginManager.apply(GenerateAntoraYmlPlugin.class);
4847

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright 2023 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of 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,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.springframework.security.kerberos.gradle;
17+
18+
import org.gradle.api.Action;
19+
import org.gradle.api.Plugin;
20+
import org.gradle.api.Project;
21+
import org.gradle.api.Task;
22+
23+
public class PublishArtifactsPlugin implements Plugin<Project> {
24+
25+
@Override
26+
public void apply(Project project) {
27+
project.getTasks().register("publishArtifacts", new Action<Task>() {
28+
@Override
29+
public void execute(Task publishArtifacts) {
30+
publishArtifacts.setGroup("Publishing");
31+
publishArtifacts.setDescription("Publish the artifacts to either Artifactory or Maven Central based on the version");
32+
if (Utils.isRelease(project)) {
33+
publishArtifacts.dependsOn("publishToOssrh");
34+
}
35+
else {
36+
publishArtifacts.dependsOn("artifactoryPublish");
37+
}
38+
}
39+
});
40+
}
41+
}
Lines changed: 2 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2022 the original author or authors.
2+
* Copyright 2022-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,18 +15,10 @@
1515
*/
1616
package org.springframework.security.kerberos.gradle;
1717

18-
import java.io.File;
19-
20-
import org.asciidoctor.gradle.jvm.AsciidoctorJPlugin;
2118
import org.gradle.api.Plugin;
2219
import org.gradle.api.Project;
23-
import org.gradle.api.plugins.JavaPluginConvention;
2420
import org.gradle.api.plugins.PluginManager;
2521
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin;
26-
import org.gradle.api.tasks.SourceSet;
27-
import org.gradle.api.tasks.bundling.Zip;
28-
import org.gradle.api.tasks.javadoc.Javadoc;
29-
import org.gradle.external.javadoc.CoreJavadocOptions;
3022

3123
/**
3224
* Manages tasks creating zip file for docs and publishing it.
@@ -39,59 +31,7 @@ class RootPlugin implements Plugin<Project> {
3931
public void apply(Project project) {
4032
PluginManager pluginManager = project.getPluginManager();
4133
pluginManager.apply(MavenPublishPlugin.class);
42-
pluginManager.apply(PublishLocalPlugin.class);
34+
pluginManager.apply(SpringNexusPublishPlugin.class);
4335
new ArtifactoryConventions().apply(project);
44-
Javadoc apiTask = createApiTask(project);
45-
Zip zipTask = createZipTask(project);
46-
zipTask.dependsOn(apiTask);
47-
}
48-
49-
private Zip createZipTask(Project project) {
50-
Zip zipTask = project.getTasks().create("distZip", Zip.class, zip -> {
51-
zip.setGroup("Distribution");
52-
zip.from("spring-shell-docs/build/docs/asciidoc", copy -> {
53-
copy.into("docs");
54-
});
55-
zip.from("build/api", copy -> {
56-
copy.into("api");
57-
});
58-
});
59-
60-
project.getRootProject().getAllprojects().forEach(p -> {
61-
p.getPlugins().withType(AsciidoctorJPlugin.class, a -> {
62-
p.getTasksByName("asciidoctor", false).forEach(t -> {
63-
zipTask.dependsOn(t);
64-
});;
65-
});
66-
});
67-
68-
project.getArtifacts().add("archives", zipTask);
69-
return zipTask;
70-
}
71-
72-
private Javadoc createApiTask(Project project) {
73-
Javadoc api = project.getTasks().create("api", Javadoc.class, a -> {
74-
a.setGroup("Documentation");
75-
a.setDescription("Generates aggregated Javadoc API documentation.");
76-
a.setDestinationDir(new File(project.getBuildDir(), "api"));
77-
CoreJavadocOptions options = (CoreJavadocOptions) a.getOptions();
78-
options.source("17");
79-
options.encoding("UTF-8");
80-
options.addStringOption("Xdoclint:none", "-quiet");
81-
});
82-
83-
project.getRootProject().getSubprojects().forEach(p -> {
84-
p.getPlugins().withType(ModulePlugin.class, m -> {
85-
JavaPluginConvention java = p.getConvention().getPlugin(JavaPluginConvention.class);
86-
SourceSet mainSourceSet = java.getSourceSets().getByName("main");
87-
88-
api.setSource(api.getSource().plus(mainSourceSet.getAllJava()));
89-
90-
p.getTasks().withType(Javadoc.class, j -> {
91-
api.setClasspath(api.getClasspath().plus(j.getClasspath()));
92-
});
93-
});
94-
});
95-
return api;
9636
}
9737
}

buildSrc/src/main/java/org/springframework/security/kerberos/gradle/SpringMavenPlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,10 @@ public class SpringMavenPlugin implements Plugin<Project> {
4545
public void apply(Project project) {
4646
PluginManager pluginManager = project.getPluginManager();
4747
pluginManager.apply(MavenPublishPlugin.class);
48+
pluginManager.apply(SpringSigningPlugin.class);
4849
pluginManager.apply(PublishLocalPlugin.class);
4950
pluginManager.apply(PublishAllJavaComponentsPlugin.class);
51+
pluginManager.apply(PublishArtifactsPlugin.class);
5052

5153
project.getPlugins().withType(MavenPublishPlugin.class).all(mavenPublish -> {
5254
PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class);
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright 2023 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of 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,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.springframework.security.kerberos.gradle;
17+
18+
import java.net.URI;
19+
import java.time.Duration;
20+
21+
import org.gradle.api.Action;
22+
import org.gradle.api.Plugin;
23+
import org.gradle.api.Project;
24+
25+
import io.github.gradlenexus.publishplugin.NexusPublishExtension;
26+
import io.github.gradlenexus.publishplugin.NexusPublishPlugin;
27+
import io.github.gradlenexus.publishplugin.NexusRepository;
28+
29+
public class SpringNexusPublishPlugin implements Plugin<Project> {
30+
31+
@Override
32+
public void apply(Project project) {
33+
project.getPlugins().apply(NexusPublishPlugin.class);
34+
NexusPublishExtension nexusPublishing = project.getExtensions().findByType(NexusPublishExtension.class);
35+
nexusPublishing.getRepositories().create("ossrh", new Action<NexusRepository>() {
36+
@Override
37+
public void execute(NexusRepository nexusRepository) {
38+
nexusRepository.getNexusUrl().set(URI.create("https://s01.oss.sonatype.org/service/local/"));
39+
nexusRepository.getSnapshotRepositoryUrl()
40+
.set(URI.create("https://s01.oss.sonatype.org/content/repositories/snapshots/"));
41+
}
42+
});
43+
nexusPublishing.getConnectTimeout().set(Duration.ofMinutes(3));
44+
nexusPublishing.getClientTimeout().set(Duration.ofMinutes(3));
45+
}
46+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Copyright 2023 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of 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,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.springframework.security.kerberos.gradle;
17+
18+
import java.util.concurrent.Callable;
19+
20+
import org.gradle.api.Action;
21+
import org.gradle.api.Plugin;
22+
import org.gradle.api.Project;
23+
import org.gradle.api.publish.Publication;
24+
import org.gradle.api.publish.PublishingExtension;
25+
import org.gradle.plugins.signing.SigningExtension;
26+
import org.gradle.plugins.signing.SigningPlugin;
27+
28+
public class SpringSigningPlugin implements Plugin<Project> {
29+
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("signing.keyId") || 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).all(new Action<PublishAllJavaComponentsPlugin>() {
61+
@Override
62+
public void execute(PublishAllJavaComponentsPlugin publishingPlugin) {
63+
PublishingExtension publishing = project.getExtensions().findByType(PublishingExtension.class);
64+
Publication maven = publishing.getPublications().getByName("mavenJava");
65+
signing.sign(maven);
66+
}
67+
});
68+
}
69+
}

0 commit comments

Comments
 (0)