Skip to content

Commit 094e3b8

Browse files
Merge branch '5.8.x' into 6.0.x
2 parents 017e8d9 + 6654479 commit 094e3b8

File tree

1 file changed

+35
-37
lines changed

1 file changed

+35
-37
lines changed

buildSrc/src/main/java/org/springframework/security/convention/versions/VerifyDependenciesVersionsPlugin.java

Lines changed: 35 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -21,50 +21,30 @@
2121
import java.util.List;
2222
import java.util.Map;
2323
import java.util.Set;
24-
import java.util.function.Supplier;
2524
import java.util.stream.Collectors;
2625

26+
import org.gradle.api.DefaultTask;
2727
import org.gradle.api.Plugin;
2828
import org.gradle.api.Project;
29-
import org.gradle.api.Task;
3029
import org.gradle.api.artifacts.Configuration;
3130
import org.gradle.api.artifacts.ModuleVersionIdentifier;
31+
import org.gradle.api.plugins.JavaBasePlugin;
32+
import org.gradle.api.tasks.TaskAction;
3233
import org.gradle.api.tasks.TaskProvider;
3334

3435
public class VerifyDependenciesVersionsPlugin implements Plugin<Project> {
3536

3637
@Override
3738
public void apply(Project project) {
38-
TaskProvider<Task> provider = project.getTasks().register("verifyDependenciesVersions", (verifyDependenciesVersionsTask) -> {
39-
verifyDependenciesVersionsTask.setGroup("Verification");
40-
verifyDependenciesVersionsTask.setDescription("Verify that specific dependencies are using the same version");
39+
TaskProvider<VerifyDependenciesVersionsTask> verifyDependenciesVersionsTaskProvider = project.getTasks().register("verifyDependenciesVersions", VerifyDependenciesVersionsTask.class, (task) -> {
40+
task.setGroup("Verification");
41+
task.setDescription("Verify that specific dependencies are using the same version");
4142
List<Configuration> allConfigurations = new ArrayList<>();
4243
allConfigurations.addAll(getConfigurations(project));
4344
allConfigurations.addAll(getSubprojectsConfigurations(project.getSubprojects()));
44-
verifyDependenciesVersionsTask.getInputs().property("dependenciesVersions", new DependencySupplier(allConfigurations));
45-
verifyDependenciesVersionsTask.doLast((task) -> {
46-
DependencySupplier dependencies = (DependencySupplier) task.getInputs().getProperties().get("dependenciesVersions");
47-
Map<String, List<Artifact>> artifacts = dependencies.get();
48-
List<Artifact> oauth2OidcSdk = artifacts.get("oauth2-oidc-sdk");
49-
List<Artifact> nimbusJoseJwt = artifacts.get("nimbus-jose-jwt");
50-
if (oauth2OidcSdk.size() > 1) {
51-
throw new IllegalStateException("Found multiple versions of oauth2-oidc-sdk: " + oauth2OidcSdk);
52-
}
53-
Artifact oauth2OidcSdkArtifact = oauth2OidcSdk.get(0);
54-
String nimbusJoseJwtVersion = TransitiveDependencyLookupUtils.lookupJwtVersion(oauth2OidcSdkArtifact.version());
55-
List<Artifact> differentVersions = nimbusJoseJwt.stream()
56-
.filter((artifact) -> !artifact.version().equals(nimbusJoseJwtVersion))
57-
.filter((artifact -> !artifact.configurationName().contains("spring-security-cas"))) // CAS uses a different version
58-
.toList();
59-
if (!differentVersions.isEmpty()) {
60-
String message = "Found transitive nimbus-jose-jwt version [" + nimbusJoseJwtVersion + "] in oauth2-oidc-sdk " + oauth2OidcSdkArtifact
61-
+ ", but the project contains a different version of nimbus-jose-jwt " + differentVersions
62-
+ ". Please align the versions of nimbus-jose-jwt.";
63-
throw new IllegalStateException(message);
64-
}
65-
});
45+
task.setConfigurations(allConfigurations);
6646
});
67-
project.getTasks().getByName("build").dependsOn(provider);
47+
project.getTasks().named(JavaBasePlugin.CHECK_TASK_NAME, checkTask -> checkTask.dependsOn(verifyDependenciesVersionsTaskProvider));
6848
}
6949

7050
private List<Configuration> getConfigurations(Project project) {
@@ -86,20 +66,34 @@ private List<Configuration> getSubprojectsConfigurations(Set<Project> subproject
8666
return subprojectConfigurations;
8767
}
8868

89-
private record Artifact(String name, String version, String configurationName) {
90-
}
69+
public static class VerifyDependenciesVersionsTask extends DefaultTask {
9170

92-
private static final class DependencySupplier implements Supplier<Map<String, List<Artifact>>> {
71+
private List<Configuration> configurations;
9372

94-
private final List<Configuration> configurations;
95-
96-
private DependencySupplier(List<Configuration> configurations) {
73+
public void setConfigurations(List<Configuration> configurations) {
9774
this.configurations = configurations;
9875
}
9976

100-
@Override
101-
public Map<String, List<Artifact>> get() {
102-
return getDependencies(this.configurations);
77+
@TaskAction
78+
public void verify() {
79+
Map<String, List<Artifact>> artifacts = getDependencies(this.configurations);
80+
List<Artifact> oauth2OidcSdk = artifacts.get("oauth2-oidc-sdk");
81+
List<Artifact> nimbusJoseJwt = artifacts.get("nimbus-jose-jwt");
82+
if (oauth2OidcSdk.size() > 1) {
83+
throw new IllegalStateException("Found multiple versions of oauth2-oidc-sdk: " + oauth2OidcSdk);
84+
}
85+
Artifact oauth2OidcSdkArtifact = oauth2OidcSdk.get(0);
86+
String nimbusJoseJwtVersion = TransitiveDependencyLookupUtils.lookupJwtVersion(oauth2OidcSdkArtifact.version());
87+
List<Artifact> differentVersions = nimbusJoseJwt.stream()
88+
.filter((artifact) -> !artifact.version().equals(nimbusJoseJwtVersion))
89+
.filter((artifact -> !artifact.configurationName().contains("spring-security-cas"))) // CAS uses a different version
90+
.toList();
91+
if (!differentVersions.isEmpty()) {
92+
String message = "Found transitive nimbus-jose-jwt version [" + nimbusJoseJwtVersion + "] in oauth2-oidc-sdk " + oauth2OidcSdkArtifact
93+
+ ", but the project contains a different version of nimbus-jose-jwt " + differentVersions
94+
+ ". Please align the versions of nimbus-jose-jwt.";
95+
throw new IllegalStateException(message);
96+
}
10397
}
10498

10599
private Map<String, List<Artifact>> getDependencies(List<Configuration> configurations) {
@@ -113,6 +107,10 @@ private Map<String, List<Artifact>> getDependencies(List<Configuration> configur
113107
.distinct()
114108
.collect(Collectors.groupingBy(Artifact::name));
115109
}
110+
111+
}
112+
113+
private record Artifact(String name, String version, String configurationName) {
116114
}
117115

118116
}

0 commit comments

Comments
 (0)