|
19 | 19 | import org.gradle.api.DefaultTask; |
20 | 20 | import org.gradle.api.Plugin; |
21 | 21 | import org.gradle.api.Project; |
| 22 | +import org.gradle.api.artifacts.Dependency; |
22 | 23 | import org.gradle.api.artifacts.MinimalExternalModuleDependency; |
23 | 24 | import org.gradle.api.artifacts.VersionCatalog; |
24 | 25 | import org.gradle.api.artifacts.VersionCatalogsExtension; |
| 26 | +import org.gradle.api.file.RegularFile; |
| 27 | +import org.gradle.api.file.RegularFileProperty; |
25 | 28 | import org.gradle.api.plugins.JavaBasePlugin; |
| 29 | +import org.gradle.api.provider.Property; |
| 30 | +import org.gradle.api.provider.Provider; |
| 31 | +import org.gradle.api.tasks.CacheableTask; |
| 32 | +import org.gradle.api.tasks.Input; |
| 33 | +import org.gradle.api.tasks.OutputFile; |
26 | 34 | import org.gradle.api.tasks.TaskAction; |
| 35 | +import org.gradle.api.tasks.TaskExecutionException; |
27 | 36 | import org.gradle.api.tasks.TaskProvider; |
| 37 | +import org.gradle.api.tasks.VerificationException; |
| 38 | + |
| 39 | +import java.io.File; |
| 40 | +import java.io.IOException; |
| 41 | +import java.nio.file.Files; |
| 42 | +import java.util.Optional; |
28 | 43 |
|
29 | 44 | public class VerifyDependenciesVersionsPlugin implements Plugin<Project> { |
30 | 45 |
|
31 | 46 | @Override |
32 | 47 | public void apply(Project project) { |
| 48 | +VersionCatalog versionCatalog = project.getExtensions().getByType(VersionCatalogsExtension.class).named("libs"); |
| 49 | +Optional<Provider<MinimalExternalModuleDependency>> oauth2OidcSdk = versionCatalog.findLibrary("com-nimbusds-oauth2-oidc-sdk"); |
| 50 | +Optional<Provider<MinimalExternalModuleDependency>> nimbusJoseJwt = versionCatalog.findLibrary("com-nimbusds-nimbus-jose-jwt"); |
| 51 | + |
| 52 | +if (oauth2OidcSdk.isEmpty()) { |
| 53 | +throw new VerificationException("Library [com-nimbusds-oauth2-oidc-sdk] does not exist in the version catalog named libs."); |
| 54 | +} |
| 55 | + |
| 56 | +if (nimbusJoseJwt.isEmpty()) { |
| 57 | +throw new VerificationException("Library [com-nimbusds-nimbus-jose-jwt] does not exist in the version catalog named libs."); |
| 58 | +} |
| 59 | + |
33 | 60 | TaskProvider<VerifyDependenciesVersionsTask> verifyDependenciesVersionsTaskProvider = project.getTasks().register("verifyDependenciesVersions", VerifyDependenciesVersionsTask.class, (task) -> { |
34 | 61 | task.setGroup("Verification"); |
35 | 62 | task.setDescription("Verify that specific dependencies are using the same version"); |
36 | | -VersionCatalog versionCatalog = project.getExtensions().getByType(VersionCatalogsExtension.class).named("libs"); |
37 | | -MinimalExternalModuleDependency oauth2OidcSdk = versionCatalog.findLibrary("com-nimbusds-oauth2-oidc-sdk").get().get(); |
38 | | -MinimalExternalModuleDependency nimbusJoseJwt = versionCatalog.findLibrary("com-nimbusds-nimbus-jose-jwt").get().get(); |
39 | | -task.setOauth2OidcSdkVersion(oauth2OidcSdk.getVersion()); |
40 | | -task.setExpectedNimbusJoseJwtVersion(nimbusJoseJwt.getVersion()); |
| 63 | +task.getOauth2OidcSdkVersion().convention(oauth2OidcSdk.get().map(Dependency::getVersion)); |
| 64 | +task.getExpectedNimbusJoseJwtVersion().convention(nimbusJoseJwt.get().map(Dependency::getVersion)); |
| 65 | +task.getOutputFile().convention(project.getLayout().getBuildDirectory().file("verify-dependencies-versions")); |
41 | 66 | }); |
42 | 67 | project.getTasks().named(JavaBasePlugin.CHECK_TASK_NAME, checkTask -> checkTask.dependsOn(verifyDependenciesVersionsTaskProvider)); |
43 | 68 | } |
44 | 69 |
|
45 | | -public static class VerifyDependenciesVersionsTask extends DefaultTask { |
| 70 | +@CacheableTask |
| 71 | +public abstract static class VerifyDependenciesVersionsTask extends DefaultTask { |
46 | 72 |
|
47 | | -private String oauth2OidcSdkVersion; |
| 73 | +@Input |
| 74 | +abstract Property<String> getOauth2OidcSdkVersion(); |
48 | 75 |
|
49 | | -private String expectedNimbusJoseJwtVersion; |
| 76 | +@Input |
| 77 | +abstract Property<String> getExpectedNimbusJoseJwtVersion(); |
50 | 78 |
|
51 | | -public void setOauth2OidcSdkVersion(String oauth2OidcSdkVersion) { |
52 | | -this.oauth2OidcSdkVersion = oauth2OidcSdkVersion; |
53 | | -} |
54 | | - |
55 | | -public void setExpectedNimbusJoseJwtVersion(String expectedNimbusJoseJwtVersion) { |
56 | | -this.expectedNimbusJoseJwtVersion = expectedNimbusJoseJwtVersion; |
57 | | -} |
| 79 | +@OutputFile |
| 80 | +abstract RegularFileProperty getOutputFile(); |
58 | 81 |
|
59 | 82 | @TaskAction |
60 | | -public void verify() { |
61 | | -String transitiveNimbusJoseJwtVersion = TransitiveDependencyLookupUtils.lookupJwtVersion(this.oauth2OidcSdkVersion); |
62 | | -if (!transitiveNimbusJoseJwtVersion.equals(this.expectedNimbusJoseJwtVersion)) { |
63 | | -String message = String.format("Found transitive nimbus-jose-jwt:%s in oauth2-oidc-sdk:%s, but the project contains a different version of nimbus-jose-jwt [%s]. Please align the versions.", transitiveNimbusJoseJwtVersion, this.oauth2OidcSdkVersion, this.expectedNimbusJoseJwtVersion); |
64 | | -throw new IllegalStateException(message); |
| 83 | +public void verify() { |
| 84 | +String oauth2OidcSdkVersion = this.getOauth2OidcSdkVersion().get(); |
| 85 | +String transitiveNimbusJoseJwtVersion = TransitiveDependencyLookupUtils.lookupJwtVersion(oauth2OidcSdkVersion); |
| 86 | +String expectedNimbusJoseJwtVersion = this.getExpectedNimbusJoseJwtVersion().get(); |
| 87 | +if (!transitiveNimbusJoseJwtVersion.equals(expectedNimbusJoseJwtVersion)) { |
| 88 | +String message = String.format("Found transitive nimbus-jose-jwt:%s in oauth2-oidc-sdk:%s, but the project contains a different version of nimbus-jose-jwt [%s]. Please align the versions.", transitiveNimbusJoseJwtVersion, oauth2OidcSdkVersion, expectedNimbusJoseJwtVersion); |
| 89 | +throw new VerificationException(message); |
| 90 | +} |
| 91 | +String message = String.format("Found transitive nimbus-jose-jwt:%s in oauth2-oidc-sdk:%s, the project contains expected version of nimbus-jose-jwt [%s]. Verified all versions align.", transitiveNimbusJoseJwtVersion, oauth2OidcSdkVersion, expectedNimbusJoseJwtVersion); |
| 92 | +try { |
| 93 | +Files.writeString(getOutputFile().get().getAsFile().toPath(), message); |
| 94 | +} catch (IOException e) { |
| 95 | +throw new TaskExecutionException(this, e); |
65 | 96 | } |
66 | 97 | } |
67 | | - |
68 | 98 | } |
69 | | - |
70 | 99 | } |
0 commit comments