From 41b5b85a1468752af1ec850f35a374c326dfb78a Mon Sep 17 00:00:00 2001 From: luisgomez29 Date: Sat, 10 May 2025 17:07:08 -0500 Subject: [PATCH 01/15] feat(gradle): add cache configuration --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../java/co/com/bancolombia/Constants.java | 2 +- .../actions/UpgradeY2025M05D10Cache.java | 110 ++++++++++++++++++ .../AbstractCleanArchitectureDefaultTask.java | 7 +- .../structure/root/.gitignore.mustache | 2 +- .../structure/root/gradle.properties.mustache | 4 + .../structure/root/settings.gradle.mustache | 6 + .../actions/UpgradeY2025M05D10CacheTest.java | 78 +++++++++++++ .../gradle-8.14-cache/.gitignore-after.txt | 4 + .../gradle-8.14-cache/.gitignore-before.txt | 3 + .../gradle.properties-after.txt | 13 +++ .../gradle.properties-before.txt | 9 ++ .../gradle-8.14-cache/settings-after.txt | 27 +++++ .../gradle-8.14-cache/settings-before.txt | 21 ++++ 15 files changed, 282 insertions(+), 8 deletions(-) create mode 100644 src/main/java/co/com/bancolombia/factory/upgrades/actions/UpgradeY2025M05D10Cache.java create mode 100644 src/test/java/co/com/bancolombia/factory/upgrades/actions/UpgradeY2025M05D10CacheTest.java create mode 100644 src/test/resources/gradle-8.14-cache/.gitignore-after.txt create mode 100644 src/test/resources/gradle-8.14-cache/.gitignore-before.txt create mode 100644 src/test/resources/gradle-8.14-cache/gradle.properties-after.txt create mode 100644 src/test/resources/gradle-8.14-cache/gradle.properties-before.txt create mode 100644 src/test/resources/gradle-8.14-cache/settings-after.txt create mode 100644 src/test/resources/gradle-8.14-cache/settings-before.txt diff --git a/build.gradle b/build.gradle index 74399064..de18f81f 100644 --- a/build.gradle +++ b/build.gradle @@ -289,7 +289,7 @@ tasks.register('installGitHooks') { } tasks.named('wrapper') { - gradleVersion = '8.13' + gradleVersion = '8.14' } tasks.register('ci-updater', JavaExec) { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37f853b1..ca025c83 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/co/com/bancolombia/Constants.java b/src/main/java/co/com/bancolombia/Constants.java index f5534eeb..3c1b86f7 100644 --- a/src/main/java/co/com/bancolombia/Constants.java +++ b/src/main/java/co/com/bancolombia/Constants.java @@ -35,7 +35,7 @@ public final class Constants { public static final String DEPENDENCY_CHECK_VERSION = "12.1.1"; public static final String PITEST_VERSION = "1.15.0"; // custom - public static final String GRADLE_WRAPPER_VERSION = "8.13"; + public static final String GRADLE_WRAPPER_VERSION = "8.14"; @NoArgsConstructor(access = AccessLevel.PRIVATE) public static class MainFiles { diff --git a/src/main/java/co/com/bancolombia/factory/upgrades/actions/UpgradeY2025M05D10Cache.java b/src/main/java/co/com/bancolombia/factory/upgrades/actions/UpgradeY2025M05D10Cache.java new file mode 100644 index 00000000..0679400b --- /dev/null +++ b/src/main/java/co/com/bancolombia/factory/upgrades/actions/UpgradeY2025M05D10Cache.java @@ -0,0 +1,110 @@ +package co.com.bancolombia.factory.upgrades.actions; + +import static co.com.bancolombia.Constants.MainFiles.GRADLE_PROPERTIES; +import static co.com.bancolombia.Constants.MainFiles.SETTINGS_GRADLE; + +import co.com.bancolombia.factory.ModuleBuilder; +import co.com.bancolombia.factory.upgrades.UpdateUtils; +import co.com.bancolombia.factory.upgrades.UpgradeAction; +import lombok.SneakyThrows; + +public class UpgradeY2025M05D10Cache implements UpgradeAction { + private static final String BUILD_CACHE = "buildCache"; + private static final String MATCH_CACHE = "rootProject.name"; + private static final String APPEND_CACHE = + "buildCache {\n" + + " local {\n" + + " directory = new File(rootDir, 'build-cache')\n" + + " }\n" + + "}\n\n"; + + private static final String PARALLEL_CHECK = "org.gradle.parallel=true"; + private static final String CACHING = "org.gradle.caching=true"; + private static final String CACHING_REGEX = "\\borg\\.gradle\\.caching=false\\b"; + private static final String CONFIGURATION_CACHE = "org.gradle.configuration-cache=true"; + private static final String CONFIGURATION_CACHE_REGEX = + "\\borg\\.gradle\\.configuration-cache=false\\b"; + private static final String CONFIGURATION_CACHE_PARALLEL = + "org.gradle.configuration-cache.parallel=true"; + private static final String CONFIGURATION_CACHE_PARALLEL_REGEX = + "\\borg\\.gradle\\.configuration-cache.parallel=false\\b"; + private static final String CONFIGURATION_CACHE_INTEGRITY = + "org.gradle.configuration-cache.integrity-check=true"; + private static final String CONFIGURATION_CACHE_INTEGRITY_REGEX = + "\\borg\\.gradle\\.configuration-cache.integrity-check=false\\b"; + + @Override + @SneakyThrows + public boolean up(ModuleBuilder builder) { + return builder.updateFile( + SETTINGS_GRADLE, + content -> + UpdateUtils.insertBeforeMatch(content, MATCH_CACHE, BUILD_CACHE, APPEND_CACHE)) + | builder.updateFile( + GRADLE_PROPERTIES, + content -> { + String modifiedContent = content; + + modifiedContent = + updateGradleProperties( + builder, + modifiedContent, + CONFIGURATION_CACHE_INTEGRITY_REGEX, + "org.gradle.configuration-cache.integrity-check=false", + "org.gradle.configuration-cache.integrity-check=", + CONFIGURATION_CACHE_INTEGRITY); + + modifiedContent = + updateGradleProperties( + builder, + modifiedContent, + CONFIGURATION_CACHE_PARALLEL_REGEX, + "org.gradle.configuration-cache.parallel=false", + "org.gradle.configuration-cache.parallel=", + CONFIGURATION_CACHE_PARALLEL); + + modifiedContent = + updateGradleProperties( + builder, + modifiedContent, + CONFIGURATION_CACHE_REGEX, + "org.gradle.configuration-cache=false", + "org.gradle.configuration-cache=", + CONFIGURATION_CACHE); + modifiedContent = + updateGradleProperties( + builder, + modifiedContent, + CACHING_REGEX, + "org.gradle.caching=false", + "org.gradle.caching=", + CACHING); + + return modifiedContent; + }) + | UpdateUtils.appendIfNotContains(builder, "./.gitignore", "build-cache", "\nbuild-cache"); + } + + private String updateGradleProperties( + ModuleBuilder builder, + String content, + String regex, + String previous, + String containsValue, + String newValue) { + return !builder.findExpressions(GRADLE_PROPERTIES, regex).isEmpty() + ? UpdateUtils.replace(content, previous, newValue) + : UpdateUtils.insertAfterMatch( + content, PARALLEL_CHECK, containsValue, "\n".concat(newValue)); + } + + @Override + public String name() { + return "3.22.4->3.22.5"; + } + + @Override + public String description() { + return "Add block hound validations"; + } +} diff --git a/src/main/java/co/com/bancolombia/task/AbstractCleanArchitectureDefaultTask.java b/src/main/java/co/com/bancolombia/task/AbstractCleanArchitectureDefaultTask.java index e9661663..4a9b03a4 100644 --- a/src/main/java/co/com/bancolombia/task/AbstractCleanArchitectureDefaultTask.java +++ b/src/main/java/co/com/bancolombia/task/AbstractCleanArchitectureDefaultTask.java @@ -15,7 +15,6 @@ import java.util.List; import java.util.Optional; import java.util.function.Supplier; -import java.util.stream.Collectors; import javax.inject.Inject; import lombok.SneakyThrows; import org.gradle.api.DefaultTask; @@ -26,7 +25,7 @@ import org.gradle.internal.logging.text.StyledTextOutputFactory; public abstract class AbstractCleanArchitectureDefaultTask extends DefaultTask { - protected final ModuleBuilder builder = new ModuleBuilder(getProject()); + protected final transient ModuleBuilder builder = new ModuleBuilder(getProject()); protected final Logger logger = getProject().getLogger(); protected AbstractCleanArchitectureDefaultTask() { @@ -116,7 +115,7 @@ protected ModuleFactory resolveFactory(String packageName, String prefix, String } private String formatTypes() { - return resolveTypes().stream().collect(Collectors.joining("\n")); + return String.join("\n", resolveTypes()); } @SneakyThrows @@ -124,7 +123,7 @@ protected List resolveTypes() { return ReflectionUtils.getModuleFactories(resolvePackage()) .map(clazz -> clazz.getSimpleName().replace(resolvePrefix(), "").toUpperCase()) .sorted() - .collect(Collectors.toList()); + .toList(); } protected String resolvePrefix() { diff --git a/src/main/resources/structure/root/.gitignore.mustache b/src/main/resources/structure/root/.gitignore.mustache index fc12ab87..28cba8b0 100644 --- a/src/main/resources/structure/root/.gitignore.mustache +++ b/src/main/resources/structure/root/.gitignore.mustache @@ -333,4 +333,4 @@ gradle-app.setting # HPROF # ----- *.hprof - +build-cache diff --git a/src/main/resources/structure/root/gradle.properties.mustache b/src/main/resources/structure/root/gradle.properties.mustache index 7652e017..b59c1ec0 100644 --- a/src/main/resources/structure/root/gradle.properties.mustache +++ b/src/main/resources/structure/root/gradle.properties.mustache @@ -5,6 +5,10 @@ lombok={{lombok}} metrics={{metrics}} language=java org.gradle.parallel=true +org.gradle.caching=true +org.gradle.configuration-cache=true +org.gradle.configuration-cache.parallel=true +org.gradle.configuration-cache.integrity-check=true systemProp.sonar.gradle.skipCompile=true {{#example}} example=true diff --git a/src/main/resources/structure/root/settings.gradle.mustache b/src/main/resources/structure/root/settings.gradle.mustache index 2e1cef5f..97c7bdb3 100644 --- a/src/main/resources/structure/root/settings.gradle.mustache +++ b/src/main/resources/structure/root/settings.gradle.mustache @@ -6,6 +6,12 @@ pluginManagement { } } +buildCache { + local { + directory = new File(rootDir, 'build-cache') + } +} + rootProject.name = '{{projectName}}' include ':app-service' diff --git a/src/test/java/co/com/bancolombia/factory/upgrades/actions/UpgradeY2025M05D10CacheTest.java b/src/test/java/co/com/bancolombia/factory/upgrades/actions/UpgradeY2025M05D10CacheTest.java new file mode 100644 index 00000000..ee9308bc --- /dev/null +++ b/src/test/java/co/com/bancolombia/factory/upgrades/actions/UpgradeY2025M05D10CacheTest.java @@ -0,0 +1,78 @@ +package co.com.bancolombia.factory.upgrades.actions; + +import static co.com.bancolombia.Constants.MainFiles.GRADLE_PROPERTIES; +import static co.com.bancolombia.Constants.MainFiles.SETTINGS_GRADLE; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.atLeast; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import co.com.bancolombia.factory.ModuleBuilder; +import co.com.bancolombia.factory.upgrades.UpgradeAction; +import co.com.bancolombia.utils.FileUtils; +import com.github.mustachejava.resolver.DefaultResolver; +import java.io.IOException; +import java.nio.file.Files; +import org.gradle.api.Project; +import org.gradle.api.logging.Logger; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class UpgradeY2025M05D10CacheTest { + @Mock private Project project; + @Mock private Logger logger; + + private ModuleBuilder builder; + private UpgradeAction updater; + + @BeforeEach + void setup() throws IOException { + when(project.getName()).thenReturn("UtilsTest"); + when(project.getLogger()).thenReturn(logger); + when(project.getProjectDir()).thenReturn(Files.createTempDirectory("sample").toFile()); + + builder = spy(new ModuleBuilder(project)); + updater = new UpgradeY2025M05D10Cache(); + + assertNotNull(updater.name()); + assertNotNull(updater.description()); + } + + @Test + void shouldApplyUpdate() throws IOException { + DefaultResolver resolver = new DefaultResolver(); + // Arrange + builder.addFile( + SETTINGS_GRADLE, + FileUtils.getResourceAsString(resolver, "gradle-8.14-cache/settings-before.txt")); + builder.addFile( + GRADLE_PROPERTIES, + FileUtils.getResourceAsString(resolver, "gradle-8.14-cache/gradle.properties-before.txt")); + builder.addFile( + "./.gitignore", + FileUtils.getResourceAsString(resolver, "gradle-8.14-cache/.gitignore-before.txt")); + // Act + boolean applied = updater.up(builder); + // Assert + assertTrue(applied); + verify(builder, atLeast(1)) + .addFile( + SETTINGS_GRADLE, + FileUtils.getResourceAsString(resolver, "gradle-8.14-cache/settings-after.txt")); + verify(builder, atLeast(1)) + .addFile( + GRADLE_PROPERTIES, + FileUtils.getResourceAsString( + resolver, "gradle-8.14-cache/gradle.properties-after.txt")); + verify(builder, atLeast(1)) + .addFile( + "./.gitignore", + FileUtils.getResourceAsString(resolver, "gradle-8.14-cache/.gitignore-after.txt")); + } +} diff --git a/src/test/resources/gradle-8.14-cache/.gitignore-after.txt b/src/test/resources/gradle-8.14-cache/.gitignore-after.txt new file mode 100644 index 00000000..3f605a6d --- /dev/null +++ b/src/test/resources/gradle-8.14-cache/.gitignore-after.txt @@ -0,0 +1,4 @@ +.idea/**/gradle.xml +.idea/**/libraries +/gradle/wrapper/gradle-wrapper.jar +build-cache \ No newline at end of file diff --git a/src/test/resources/gradle-8.14-cache/.gitignore-before.txt b/src/test/resources/gradle-8.14-cache/.gitignore-before.txt new file mode 100644 index 00000000..76fd19a2 --- /dev/null +++ b/src/test/resources/gradle-8.14-cache/.gitignore-before.txt @@ -0,0 +1,3 @@ +.idea/**/gradle.xml +.idea/**/libraries +/gradle/wrapper/gradle-wrapper.jar \ No newline at end of file diff --git a/src/test/resources/gradle-8.14-cache/gradle.properties-after.txt b/src/test/resources/gradle-8.14-cache/gradle.properties-after.txt new file mode 100644 index 00000000..e93b392c --- /dev/null +++ b/src/test/resources/gradle-8.14-cache/gradle.properties-after.txt @@ -0,0 +1,13 @@ +package=co.com.bancolombia +systemProp.version=3.22.4 +reactive=true +lombok=true +metrics=false +language=java +skipArchitectureTests=false +org.gradle.parallel=true +org.gradle.caching=true +org.gradle.configuration-cache=true +org.gradle.configuration-cache.parallel=true +org.gradle.configuration-cache.integrity-check=true +systemProp.sonar.gradle.skipCompile=true \ No newline at end of file diff --git a/src/test/resources/gradle-8.14-cache/gradle.properties-before.txt b/src/test/resources/gradle-8.14-cache/gradle.properties-before.txt new file mode 100644 index 00000000..6e1d88d5 --- /dev/null +++ b/src/test/resources/gradle-8.14-cache/gradle.properties-before.txt @@ -0,0 +1,9 @@ +package=co.com.bancolombia +systemProp.version=3.22.4 +reactive=true +lombok=true +metrics=false +language=java +skipArchitectureTests=false +org.gradle.parallel=true +systemProp.sonar.gradle.skipCompile=true \ No newline at end of file diff --git a/src/test/resources/gradle-8.14-cache/settings-after.txt b/src/test/resources/gradle-8.14-cache/settings-after.txt new file mode 100644 index 00000000..3a44d025 --- /dev/null +++ b/src/test/resources/gradle-8.14-cache/settings-after.txt @@ -0,0 +1,27 @@ +pluginManagement { + repositories { + //mavenLocal() + //maven { url = '...' } + maven { url = "https://repo.spring.io/snapshot" } + gradlePluginPortal() + } +} + +buildCache { + local { + directory = new File(rootDir, 'build-cache') + } +} + +rootProject.name = 'ms_test' + +include ':app-service' +include ':model' +include ':usecase' +project(':app-service').projectDir = file('./applications/app-service') +project(':model').projectDir = file('./domain/model') +project(':usecase').projectDir = file('./domain/usecase') +include ':r2dbc-postgresql' +project(':r2dbc-postgresql').projectDir = file('./infrastructure/driven-adapters/r2dbc-postgresql') +include ':reactive-web' +project(':reactive-web').projectDir = file('./infrastructure/entry-points/reactive-web') \ No newline at end of file diff --git a/src/test/resources/gradle-8.14-cache/settings-before.txt b/src/test/resources/gradle-8.14-cache/settings-before.txt new file mode 100644 index 00000000..07d2c97a --- /dev/null +++ b/src/test/resources/gradle-8.14-cache/settings-before.txt @@ -0,0 +1,21 @@ +pluginManagement { + repositories { + //mavenLocal() + //maven { url = '...' } + maven { url = "https://repo.spring.io/snapshot" } + gradlePluginPortal() + } +} + +rootProject.name = 'ms_test' + +include ':app-service' +include ':model' +include ':usecase' +project(':app-service').projectDir = file('./applications/app-service') +project(':model').projectDir = file('./domain/model') +project(':usecase').projectDir = file('./domain/usecase') +include ':r2dbc-postgresql' +project(':r2dbc-postgresql').projectDir = file('./infrastructure/driven-adapters/r2dbc-postgresql') +include ':reactive-web' +project(':reactive-web').projectDir = file('./infrastructure/entry-points/reactive-web') \ No newline at end of file From 932daa3bbb67f211a053438f23e6d6252789d8fa Mon Sep 17 00:00:00 2001 From: luisgomez29 Date: Sat, 10 May 2025 17:23:52 -0500 Subject: [PATCH 02/15] feat(gradle): update deprecated tasks --- src/test/java/co/com/bancolombia/TestUtils.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/test/java/co/com/bancolombia/TestUtils.java b/src/test/java/co/com/bancolombia/TestUtils.java index e4fd0709..eaf2bcba 100644 --- a/src/test/java/co/com/bancolombia/TestUtils.java +++ b/src/test/java/co/com/bancolombia/TestUtils.java @@ -10,7 +10,6 @@ import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributes; import java.util.Arrays; -import java.util.stream.Collectors; import org.apache.commons.io.FileUtils; import org.apache.commons.io.file.SimplePathVisitor; import org.gradle.api.Project; @@ -44,11 +43,10 @@ public static void assertFileContains(String file, String... toIncludes) { public static void assertFilesExistsInDir(String dir, String... files) { final String realDir = dir.endsWith("/") ? dir : dir + "/"; - //noinspection SimplifyStreamApiCallChains assertFilesExists( Arrays.stream(files) .map(file -> realDir + file) - .collect(Collectors.toList()) + .toList() .toArray(new String[files.length])); } @@ -64,7 +62,7 @@ public static Project setupProject(Class testClassName, Class .withProjectDir(dirFile) .build(); for (Class task : tasks) { - project.getTasks().create(task.getSimpleName(), task); + project.getTasks().register(task.getSimpleName(), task); } return project; } @@ -79,7 +77,7 @@ public static T getTask(Project project, Class taskClass) { } public static T createTask(Project project, Class taskClass) { - project.getTasks().create(taskClass.getSimpleName(), taskClass); + project.getTasks().register(taskClass.getSimpleName(), taskClass); return getTask(project, taskClass); } From 27710729b14cfbb6b8e4f403fed66292a22917c0 Mon Sep 17 00:00:00 2001 From: luisgomez29 Date: Sat, 10 May 2025 17:27:59 -0500 Subject: [PATCH 03/15] feat(gradle): update deprecated tasks --- src/test/java/co/com/bancolombia/TestUtils.java | 1 + .../java/co/com/bancolombia/task/ValidateStructureTaskTest.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/co/com/bancolombia/TestUtils.java b/src/test/java/co/com/bancolombia/TestUtils.java index eaf2bcba..83ff770a 100644 --- a/src/test/java/co/com/bancolombia/TestUtils.java +++ b/src/test/java/co/com/bancolombia/TestUtils.java @@ -17,6 +17,7 @@ import org.gradle.testfixtures.ProjectBuilder; import org.junit.jupiter.api.Assertions; +@SuppressWarnings("unchecked") public class TestUtils extends Assertions { private TestUtils() {} diff --git a/src/test/java/co/com/bancolombia/task/ValidateStructureTaskTest.java b/src/test/java/co/com/bancolombia/task/ValidateStructureTaskTest.java index 2d933c13..b2ce2510 100644 --- a/src/test/java/co/com/bancolombia/task/ValidateStructureTaskTest.java +++ b/src/test/java/co/com/bancolombia/task/ValidateStructureTaskTest.java @@ -161,7 +161,7 @@ private void prepareImperativeProject() throws IOException, CleanException { new File(TEST_DIR + "/infrastructure/driven-adapters/mongo-repository/build.gradle") .exists()); - project.getTasks().create("validate", ValidateStructureTask.class); + project.getTasks().register("validate", ValidateStructureTask.class); task = (ValidateStructureTask) project.getTasks().getByName("validate"); } From b8867bdb99aef88ffc85b393b9c6c706ad729baf Mon Sep 17 00:00:00 2001 From: luisgomez29 Date: Sat, 10 May 2025 17:32:00 -0500 Subject: [PATCH 04/15] feat(gradle): add SuppressWarnings annotation --- .../task/AbstractCleanArchitectureDefaultTaskTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/co/com/bancolombia/task/AbstractCleanArchitectureDefaultTaskTest.java b/src/test/java/co/com/bancolombia/task/AbstractCleanArchitectureDefaultTaskTest.java index a0f5f37b..dad3b2a1 100644 --- a/src/test/java/co/com/bancolombia/task/AbstractCleanArchitectureDefaultTaskTest.java +++ b/src/test/java/co/com/bancolombia/task/AbstractCleanArchitectureDefaultTaskTest.java @@ -34,6 +34,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +@SuppressWarnings("unchecked") class AbstractCleanArchitectureDefaultTaskTest { private static final String TEST_DIR = getTestDir(AbstractCleanArchitectureDefaultTaskTest.class); private Project project; From 2e1d8561ca18abf441810c3f73b16b52fa0a434c Mon Sep 17 00:00:00 2001 From: lugomez Date: Wed, 14 May 2025 11:34:31 -0500 Subject: [PATCH 05/15] feat(tasks): make tasks incompatible with configuration cache for validation --- gradlew | 4 +- gradlew.bat | 4 +- .../com/bancolombia/task/AnalyticsTask.java | 4 ++ .../bancolombia/task/DeleteModuleTask.java | 17 ++++++++- .../task/GenerateAcceptanceTestTask.java | 4 ++ .../task/GenerateDrivenAdapterTask.java | 4 ++ .../task/GenerateEntryPointTask.java | 4 ++ .../bancolombia/task/GenerateHelperTask.java | 4 ++ .../bancolombia/task/GenerateModelTask.java | 4 ++ .../task/GeneratePerformanceTestTask.java | 4 ++ .../task/GeneratePipelineTask.java | 4 ++ .../task/GenerateStructureTask.java | 4 ++ .../bancolombia/task/GenerateUseCaseTask.java | 4 ++ .../co/com/bancolombia/task/InternalTask.java | 14 ++++++- .../bancolombia/task/UpdateProjectTask.java | 16 ++++++-- .../co/com/bancolombia/utils/SonarCheck.java | 38 ++++++++++++++----- 16 files changed, 112 insertions(+), 21 deletions(-) diff --git a/gradlew b/gradlew index faf93008..23d15a93 100755 --- a/gradlew +++ b/gradlew @@ -114,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -213,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9b42019c..5eed7ee8 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,11 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/src/main/java/co/com/bancolombia/task/AnalyticsTask.java b/src/main/java/co/com/bancolombia/task/AnalyticsTask.java index 054d914a..fd648015 100644 --- a/src/main/java/co/com/bancolombia/task/AnalyticsTask.java +++ b/src/main/java/co/com/bancolombia/task/AnalyticsTask.java @@ -13,6 +13,10 @@ public class AnalyticsTask extends AbstractCleanArchitectureDefaultTask { private BooleanOption enabled = BooleanOption.TRUE; + public AnalyticsTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + } + @Option(option = "enabled", description = "Set analytics state") public void setAnalyticsState(BooleanOption enabled) { this.enabled = enabled; diff --git a/src/main/java/co/com/bancolombia/task/DeleteModuleTask.java b/src/main/java/co/com/bancolombia/task/DeleteModuleTask.java index 0676f5e1..d35aa9f6 100644 --- a/src/main/java/co/com/bancolombia/task/DeleteModuleTask.java +++ b/src/main/java/co/com/bancolombia/task/DeleteModuleTask.java @@ -10,6 +10,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; +import javax.inject.Inject; +import org.gradle.api.provider.ListProperty; +import org.gradle.api.tasks.Input; import org.gradle.api.tasks.options.Option; import org.gradle.api.tasks.options.OptionValues; @@ -17,6 +20,16 @@ public class DeleteModuleTask extends AbstractCleanArchitectureDefaultTask { private String module; + @Input private final ListProperty availableModules; + + @Inject + public DeleteModuleTask() { + super(); + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + this.availableModules = getProject().getObjects().listProperty(String.class); + this.availableModules.set(new ArrayList<>(getProject().getChildProjects().keySet())); + } + @Option(option = "module", description = "Set module name to delete") public void setModule(String module) { this.module = module; @@ -24,12 +37,12 @@ public void setModule(String module) { @OptionValues("module") public List getModules() { - return new ArrayList<>(getProject().getChildProjects().keySet()); + return availableModules.get(); } @Override public void execute() throws IOException, CleanException { - if (module == null || !getProject().getChildProjects().containsKey(module)) { + if (module == null || !availableModules.get().contains(module)) { printHelp(); throw new IllegalArgumentException( "No valid module name is set, usage: gradle deleteModule --module " diff --git a/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java b/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java index b35fe170..a8b14bcd 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java @@ -11,6 +11,10 @@ description = "Generate subproject by karate framework in deployment layer") public class GenerateAcceptanceTestTask extends AbstractResolvableTypeTask { + public GenerateAcceptanceTestTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + } + @Override public void execute() throws IOException, CleanException { super.execute(); diff --git a/src/main/java/co/com/bancolombia/task/GenerateDrivenAdapterTask.java b/src/main/java/co/com/bancolombia/task/GenerateDrivenAdapterTask.java index 7ae2661a..ad82f07c 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateDrivenAdapterTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateDrivenAdapterTask.java @@ -26,6 +26,10 @@ public class GenerateDrivenAdapterTask extends AbstractResolvableTypeTask { private BooleanOption eda = BooleanOption.FALSE; private String tech = "rabbitmq"; + public GenerateDrivenAdapterTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + } + @Option(option = "url", description = "Set driven adapter url when RESTCONSUMER type") public void setUrl(String url) { this.url = url; diff --git a/src/main/java/co/com/bancolombia/task/GenerateEntryPointTask.java b/src/main/java/co/com/bancolombia/task/GenerateEntryPointTask.java index 913fda81..5c49b6b4 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateEntryPointTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateEntryPointTask.java @@ -25,6 +25,10 @@ public class GenerateEntryPointTask extends AbstractResolvableTypeTask { private String tech = "rabbitmq"; private BooleanOption authorization = BooleanOption.FALSE; + public GenerateEntryPointTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + } + @Option( option = "server", description = "Set server on which the application will run when RESTMVC type") diff --git a/src/main/java/co/com/bancolombia/task/GenerateHelperTask.java b/src/main/java/co/com/bancolombia/task/GenerateHelperTask.java index b0c8bf71..1673ec9f 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateHelperTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateHelperTask.java @@ -8,6 +8,10 @@ description = "Generate helper in infrastructure layer") public class GenerateHelperTask extends AbstractResolvableTypeTask { + public GenerateHelperTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + } + @Override protected void prepareParams() { // no additional params required diff --git a/src/main/java/co/com/bancolombia/task/GenerateModelTask.java b/src/main/java/co/com/bancolombia/task/GenerateModelTask.java index 9e788bf0..4e721b19 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateModelTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateModelTask.java @@ -12,6 +12,10 @@ public class GenerateModelTask extends AbstractCleanArchitectureDefaultTask { private String name = ""; + public GenerateModelTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + } + @Option(option = "name", description = "Set the model name") public void setName(String modelName) { this.name = modelName; diff --git a/src/main/java/co/com/bancolombia/task/GeneratePerformanceTestTask.java b/src/main/java/co/com/bancolombia/task/GeneratePerformanceTestTask.java index 2ba32c2a..ed540155 100644 --- a/src/main/java/co/com/bancolombia/task/GeneratePerformanceTestTask.java +++ b/src/main/java/co/com/bancolombia/task/GeneratePerformanceTestTask.java @@ -9,6 +9,10 @@ description = "Generate performance test") public class GeneratePerformanceTestTask extends AbstractResolvableTypeTask { + public GeneratePerformanceTestTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + } + @Override protected void prepareParams() { var modules = new ArrayList<>(getProject().getChildProjects().keySet()); diff --git a/src/main/java/co/com/bancolombia/task/GeneratePipelineTask.java b/src/main/java/co/com/bancolombia/task/GeneratePipelineTask.java index 147ac6d9..57970ab8 100644 --- a/src/main/java/co/com/bancolombia/task/GeneratePipelineTask.java +++ b/src/main/java/co/com/bancolombia/task/GeneratePipelineTask.java @@ -13,6 +13,10 @@ public class GeneratePipelineTask extends AbstractResolvableTypeTask { private BooleanOption monoRepo = BooleanOption.FALSE; + public GeneratePipelineTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + } + @Option(option = "monoRepo", description = "is Mono repository") public void setMonoRepo(BooleanOption monoRepo) { this.monoRepo = monoRepo; diff --git a/src/main/java/co/com/bancolombia/task/GenerateStructureTask.java b/src/main/java/co/com/bancolombia/task/GenerateStructureTask.java index b456864f..cb68b13d 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateStructureTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateStructureTask.java @@ -29,6 +29,10 @@ public class GenerateStructureTask extends AbstractCleanArchitectureDefaultTask private BooleanOption withExample = BooleanOption.FALSE; private JavaVersion javaVersion = JavaVersion.VERSION_21; + public GenerateStructureTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + } + @Option(option = "package", description = "Set principal package to use in the project") public void setPackage(String packageName) { this.packageName = packageName; diff --git a/src/main/java/co/com/bancolombia/task/GenerateUseCaseTask.java b/src/main/java/co/com/bancolombia/task/GenerateUseCaseTask.java index 10f794ab..88899dab 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateUseCaseTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateUseCaseTask.java @@ -16,6 +16,10 @@ public class GenerateUseCaseTask extends AbstractCleanArchitectureDefaultTask { private static final String USECASE_CLASS_NAME = "UseCase"; private String name = ""; + public GenerateUseCaseTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + } + @Option(option = "name", description = "Set UseCase name") public void setName(String useCaseName) { this.name = useCaseName; diff --git a/src/main/java/co/com/bancolombia/task/InternalTask.java b/src/main/java/co/com/bancolombia/task/InternalTask.java index 9d4f8e5b..85a899b3 100644 --- a/src/main/java/co/com/bancolombia/task/InternalTask.java +++ b/src/main/java/co/com/bancolombia/task/InternalTask.java @@ -9,6 +9,8 @@ import java.util.List; import java.util.Objects; import lombok.Getter; +import org.gradle.api.provider.Property; +import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.options.Option; import org.gradle.api.tasks.options.OptionValues; @@ -17,6 +19,14 @@ public class InternalTask extends AbstractCleanArchitectureDefaultTask { private Action action = Action.SONAR_CHECK; + @Input @Getter private final Property projectPath; + + public InternalTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + projectPath = getProject().getObjects().property(String.class); + projectPath.set(getProject().getProjectDir().getPath()); + } + @Option(option = "action", description = "Set task action to run") public void setAction(Action action) { this.action = action; @@ -33,10 +43,10 @@ public List getInputOptions() { public void execute() throws IOException { switch (Objects.requireNonNull(action)) { case SONAR_CHECK: - SonarCheck.parse(getProject()); + SonarCheck.parse(projectPath.get()); break; case UPDATE_DEPENDENCIES: - String basePath = getProject().getProjectDir().toString(); + String basePath = projectPath.get(); List files = Utils.getAllFilesWithGradleExtension(basePath); logger.lifecycle( "Updating project dependencies from root {} in files \n {}", basePath, files); diff --git a/src/main/java/co/com/bancolombia/task/UpdateProjectTask.java b/src/main/java/co/com/bancolombia/task/UpdateProjectTask.java index bde3edc2..5d9a8131 100644 --- a/src/main/java/co/com/bancolombia/task/UpdateProjectTask.java +++ b/src/main/java/co/com/bancolombia/task/UpdateProjectTask.java @@ -12,6 +12,9 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Set; +import lombok.Getter; +import org.gradle.api.provider.Property; +import org.gradle.api.tasks.Input; import org.gradle.api.tasks.options.Option; import org.gradle.internal.logging.text.StyledTextOutput; @@ -23,6 +26,14 @@ public class UpdateProjectTask extends AbstractCleanArchitectureDefaultTask { private final Set dependencies = new HashSet<>(); private BooleanOption git = BooleanOption.TRUE; + @Input @Getter private final Property projectPath; + + public UpdateProjectTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + this.projectPath = getProject().getObjects().property(String.class); + this.projectPath.set(getProject().getProjectDir().toString()); + } + @Option(option = "dependencies", description = "Set dependencies to update") public void setDependencies(String dependencies) { this.dependencies.addAll(Arrays.asList(dependencies.split("[ ,]+"))); @@ -44,10 +55,9 @@ public void execute() throws IOException, CleanException { + " or pass the '--git false' flag"); return; } - // Add specific parameters for UpgradeActions - String basePath = getProject().getProjectDir().toString(); + builder.addParam(DEPENDENCIES_TO_UPDATE, dependencies); - builder.addParam(FILES_TO_UPDATE, Utils.getAllFilesWithGradleExtension(basePath)); + builder.addParam(FILES_TO_UPDATE, Utils.getAllFilesWithGradleExtension(projectPath.get())); UpgradeFactory factory = new UpgradeFactory(); factory.buildModule(builder); builder.persist(); diff --git a/src/main/java/co/com/bancolombia/utils/SonarCheck.java b/src/main/java/co/com/bancolombia/utils/SonarCheck.java index 17f2d06d..0588cabd 100644 --- a/src/main/java/co/com/bancolombia/utils/SonarCheck.java +++ b/src/main/java/co/com/bancolombia/utils/SonarCheck.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.File; import java.nio.file.Files; import java.util.ArrayList; import java.util.List; @@ -12,7 +13,6 @@ import lombok.NoArgsConstructor; import lombok.Setter; import lombok.SneakyThrows; -import org.gradle.api.Project; /** This class should translate the dependency check vulnerabilities to sonar issues */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -22,19 +22,33 @@ public class SonarCheck { public static final String DEFAULT_LOCATION = "src/main/java/co/com/bancolombia/MainApplication.java"; - public static void parse(Project project) { + @SneakyThrows + public static void parse(String projectPath) { final ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - parseSingle(project, mapper); - project.getSubprojects().forEach(p -> parseSingle(p, mapper)); + + parseSingle(projectPath, mapper); + + // Procesar los subproyectos + File projectDir = new File(projectPath); + File[] subProjectDirs = projectDir.listFiles(File::isDirectory); + if (subProjectDirs != null) { + for (File subDir : subProjectDirs) { + // Verificar que sea un subproyecto válido (tiene build.gradle) + if (new File(subDir, "build.gradle").exists()) { + parseSingle(subDir.getAbsolutePath(), mapper); + } + } + } } @SneakyThrows - private static void parseSingle(Project project, ObjectMapper mapper) { + private static void parseSingle(String projectPath, ObjectMapper mapper) { List issues; - if (project.file(INPUT).exists()) { + File inputFile = new File(projectPath, INPUT); + if (inputFile.exists()) { issues = - Stream.of(FileUtils.readFile(project, INPUT)) + Stream.of(Files.readString(inputFile.toPath())) .map(content -> getReport(content, mapper)) .flatMap(report -> report.dependencies.stream()) .filter( @@ -46,9 +60,13 @@ private static void parseSingle(Project project, ObjectMapper mapper) { } else { issues = new ArrayList<>(); } - Files.createDirectories(project.file("build/reports/").toPath()); - FileUtils.writeString( - project, OUTPUT, mapper.writeValueAsString(SonarReport.builder().issues(issues).build())); + + File outputDir = new File(projectPath, "build/reports/"); + outputDir.mkdirs(); + File outputFile = new File(outputDir, "dependency-check-sonar.json"); + Files.writeString( + outputFile.toPath(), + mapper.writeValueAsString(SonarReport.builder().issues(issues).build())); } private static Stream extractIssues(Dependency dependency) { From 1505fa9160fe1e66369969e7e1bb2b634e2e043d Mon Sep 17 00:00:00 2001 From: lugomez Date: Thu, 15 May 2025 16:59:15 -0500 Subject: [PATCH 06/15] feat(validation): refactor architecture validation to support logger and project directories --- gradle/wrapper/gradle-wrapper.jar | Bin 43705 -> 43764 bytes .../architecture/ArchitectureValidation.java | 23 ++-- .../task/ValidateStructureTask.java | 106 ++++++++++++------ .../com/bancolombia/utils/CommandUtils.java | 2 +- .../ArchitectureValidationTest.java | 7 +- 5 files changed, 92 insertions(+), 46 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 9bbc975c742b298b441bfb90dbc124400a3751b9..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch delta 642 zcmdmamFde>rVZJA^}0Q$xegf!xPEW^+5YDM%iT2bEgct9o+jH~+sJas#HZ=szO|** z=Pj=X_vx?W&DSwKck|WWn~hffsvnQ+42*W$b7b0$SCcOoZ`{W{^$^pk;4>8-A*-)$ z?n(Po`1$6Jn_u?t-L+tsPyZ2#X}8T6OS8pAU;kdgd+_Hw4z4TW0p9E!T+=f7-c&O% zFic^X{7^$?^Ho04eona9n#mGMxKhA=~8B%JN`M zMhm5wc-2v)$``sY$!Q`9xiU@DhI73ZxiGEKg>yIPs)NmWwMdF-ngLXpZSqV5ez36n zVkxF2rjrjWR+_xr6e6@_u@s~2uv{9vi*1pj2)BjFD+-%@&pRVP1f{O1glxTOp2-62Ph;v z`N1+vCd)9ea)af*Ol1*JCfnp$%Uu}%OuoN7g2}3C@`L5FlP#(sA=|h@iixuZC?qp^ z=L$=v$ZoI}|87Wh=&h7udff{aieKr*l+zDp?pf)_bbRvUf>kn;HCDMXNlgbbo!QRK I1x7am0No)LiU0rr delta 584 zcmexzm1*ZyrVZJAexH5Moc8h7)w{^+t*dqJ%=yhh23L$9JpFV=_k`zJ-?Q4DI*eSe z+ES)HSrVnWLtJ&)lO%hRkV9zl5qqWRt0e;bb zPPo`)y?HTAyZI&u&X<|2$FDHCf4;!v8}p=?Tm`^F0`u(|1ttf~&t$qP3KUSD>@TJQ zRwJ}Pim6NzEc8KA6)e;S6gs8=7IIL8sQL*MYEuRYO;Uj<%3UbMbV&^&!Zvx+LKmjT z8Zch6rYP7Tw?$Hn(UTJwWiS=$f{lB(C=e*%usDV})0AQIK~sat=ND@+Gg*Pyij!rR z*fa02W|%BsV++>4W{DKDGSIUEHd2$P+8ct!RF+CHDowUuTEZOZ%rJSQv*qOXOSPDN zT|sP-$p*_3ncsWB*qoD7JQcyZ9xan%cJP6Tb4-?AZpr*F6v98hoNaPJm@HV`yya5N z))6pqFXn@}P(3T0nEzM8*c_9KtE9o|_pFd&K35GBXP^9Kg(b6GH-z8S4GDzIl~T+b zdLd#meKKHu$5u))8cu$=GKINkGDPOUD)!0$C(BH(U!}!-e;Q0ok8Sc?V1zRO04>ts AA^-pY diff --git a/src/main/java/co/com/bancolombia/factory/validations/architecture/ArchitectureValidation.java b/src/main/java/co/com/bancolombia/factory/validations/architecture/ArchitectureValidation.java index ef4c18e9..79a6713b 100644 --- a/src/main/java/co/com/bancolombia/factory/validations/architecture/ArchitectureValidation.java +++ b/src/main/java/co/com/bancolombia/factory/validations/architecture/ArchitectureValidation.java @@ -5,13 +5,14 @@ import co.com.bancolombia.factory.ModuleBuilder; import co.com.bancolombia.utils.FileUtils; import java.io.File; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.SneakyThrows; import org.apache.commons.lang3.StringUtils; -import org.gradle.api.Project; +import org.gradle.api.logging.Logger; @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class ArchitectureValidation { @@ -23,13 +24,12 @@ public final class ArchitectureValidation { private static final String FORBIDDEN_DOMAIN_NAMES = "rabbit,sqs,sns,ibm,dynamo,aws,mysql,postgres,redis,mongo,rsocket,r2dbc,http,kms,s3,graphql,kafka"; - public static void inject(Project project, ModuleBuilder builder) { + public static void inject(ModuleBuilder builder, Logger logger, Set files) { if (!FileUtils.readBooleanProperty(SKIP_PROP)) { String os = System.getProperty("os.name"); String paths = - project.getAllprojects().stream() - .map(p -> "\"" + toOSPath(os, p.getProjectDir()) + "/\"") - .collect(Collectors.joining(",")); + files.stream().map(f -> "\"" + toOSPath(os, f) + "/\"").collect(Collectors.joining(",")); + builder.addParam("reactive", builder.isReactive()); builder.addParam("modulePaths", paths); builder.addParam( @@ -40,10 +40,11 @@ public static void inject(Project project, ModuleBuilder builder) { "forbiddenDomainClassNames", loadForbiddenValuesForAsString( FORBIDDEN_DOMAIN_CLASS_NAMES_PROP, FORBIDDEN_DOMAIN_NAMES)); - project.getAllprojects().stream() - .filter(p -> p.getName().equals(Constants.APP_SERVICE)) + + files.stream() + .filter(file -> file.getName().equals(Constants.APP_SERVICE)) .findFirst() - .ifPresent(appService -> generateArchUnitFiles(project, appService, builder)); + .ifPresent(appService -> generateArchUnitFiles(logger, appService.getName(), builder)); } } @@ -109,10 +110,8 @@ private static String toOSPath(String os, File projectDir) { @SneakyThrows private static void generateArchUnitFiles( - Project project, Project appService, ModuleBuilder builder) { - project - .getLogger() - .lifecycle("Injecting ArchitectureTest in module {}", appService.getProjectDir().getName()); + Logger logger, String appService, ModuleBuilder builder) { + logger.lifecycle("Injecting ArchitectureTest in module {}", appService); builder.setupFromTemplate("structure/applications/appservice/arch-validations"); builder.appendDependencyToModule( Constants.APP_SERVICE, diff --git a/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java b/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java index ed756fdd..d0395e26 100644 --- a/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java +++ b/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java @@ -7,14 +7,16 @@ import co.com.bancolombia.task.annotations.CATask; import co.com.bancolombia.utils.FileUtils; import co.com.bancolombia.utils.Utils; +import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Predicate; import java.util.stream.Collectors; +import javax.inject.Inject; +import lombok.Getter; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.Dependency; @@ -22,6 +24,7 @@ import org.gradle.api.artifacts.UnknownConfigurationException; import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.provider.Property; +import org.gradle.api.provider.SetProperty; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Optional; @@ -37,44 +40,89 @@ public abstract class ValidateStructureTask extends AbstractCleanArchitectureDef private static final String SPRING_DEPENDENCIES = "spring-boot-dependencies"; private static final String AWS_BOM = "bom"; + @Input @Getter private final Property projectPath; + @Input @Getter private final SetProperty moduleNames; + @Input @Getter private final Property hasSpringWeb; + @Input @Getter private final SetProperty projectDirectories; + @Input @Getter private final Property isValidateModelLayer; + @Input @Getter private final Property isValidateUseCaseLayer; + @Input @Getter private final Property isValidateInfrastructureLayer; + @Input @Optional public abstract Property getWhitelistedDependencies(); + @Inject + public ValidateStructureTask() throws IOException { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); + this.projectPath = getProject().getObjects().property(String.class); + this.projectPath.set(getProject().getProjectDir().getPath()); + + this.moduleNames = getProject().getObjects().setProperty(String.class); + this.moduleNames.set(getProject().getChildProjects().keySet()); + + this.projectDirectories = getProject().getObjects().setProperty(File.class); + this.projectDirectories.set(getProject().provider(this::collectAllProjectDirectories)); + + setupArchitectureValidation(); + + this.hasSpringWeb = getProject().getObjects().property(Boolean.class); + this.hasSpringWeb.set(getProject().provider(this::checkForSpringWebDependency)); + + this.isValidateModelLayer = getProject().getObjects().property(Boolean.class); + this.isValidateModelLayer.set(getProject().provider(this::validateModelLayer)); + + this.isValidateUseCaseLayer = getProject().getObjects().property(Boolean.class); + this.isValidateUseCaseLayer.set(getProject().provider(this::validateUseCaseLayer)); + + this.isValidateInfrastructureLayer = getProject().getObjects().property(Boolean.class); + this.isValidateInfrastructureLayer.set( + getProject().provider(this::validateInfrastructureLayer)); + } + @Override public void execute() throws IOException, CleanException { - String packageName = - FileUtils.readProperties(getProject().getProjectDir().getPath(), "package"); - logger.lifecycle("Clean Architecture plugin version: {}", Utils.getVersionPlugin()); - getModules().forEach(d -> logger.lifecycle("Submodules: " + d.getKey())); - logger.lifecycle("Project Package: {}", packageName); - checkForSpringWebDependency(); - ArchitectureValidation.inject(getProject(), builder); - - if (!validateModelLayer()) { + if (!isValidateModelLayer.get()) { throw new CleanException("Model module is invalid"); } - if (!validateUseCaseLayer()) { + if (!isValidateUseCaseLayer.get()) { throw new CleanException("Use case module is invalid"); } - if (!validateInfrastructureLayer()) { + if (!isValidateInfrastructureLayer.get()) { throw new CleanException("Infrastructure layer is invalid"); } logger.lifecycle("The project is valid"); } - private void checkForSpringWebDependency() { - boolean hasSpringWeb = false; + private void setupArchitectureValidation() throws IOException { + String packageName = FileUtils.readProperties(projectPath.get(), "package"); + logger.lifecycle("Clean Architecture plugin version: {}", Utils.getVersionPlugin()); + moduleNames.get().forEach(name -> logger.lifecycle("Submodules: " + name)); + logger.lifecycle("Project Package: {}", packageName); + ArchitectureValidation.inject(builder, getLogger(), projectDirectories.get()); + } + + private Set collectAllProjectDirectories() { + return getProject().getAllprojects().stream() + .map(Project::getProjectDir) + .collect(Collectors.toSet()); + } + + private boolean checkForSpringWebDependency() { + boolean springWebDependencyPresent = false; try { - hasSpringWeb = + springWebDependencyPresent = getProject().getChildProjects().get(APP_SERVICE).getConfigurations() .getByName("testImplementation").getDependencies().stream() .anyMatch(d -> d.getName().equals("spring-web")); } catch (UnknownConfigurationException e) { logger.warn("configuration testImplementation not present"); } - logger.lifecycle("has spring-web dependency to run validations: {}", hasSpringWeb); - builder.addParam("hasSpringWeb", hasSpringWeb); + + logger.lifecycle( + "has spring-web dependency to run validations: {}", springWebDependencyPresent); + builder.addParam("hasSpringWeb", springWebDependencyPresent); + return springWebDependencyPresent; } private boolean validateModelLayer() { @@ -142,25 +190,23 @@ private boolean validateInfrastructureLayer() { logger.lifecycle("Validating Infrastructure Layer"); List modulesExcludes = Arrays.asList(MODEL_MODULE, APP_SERVICE, USE_CASE_MODULE); AtomicBoolean valid = new AtomicBoolean(true); - Set> modules = getModules(); - - modules.stream() - .filter(module -> !modulesExcludes.contains(module.getKey())) - .forEach(moduleFiltered -> validateModule(valid, moduleFiltered)); + moduleNames.get().stream() + .filter(moduleName -> !modulesExcludes.contains(moduleName)) + .forEach(moduleName -> validateModule(valid, moduleName)); return valid.get(); } - private void validateModule(AtomicBoolean valid, Map.Entry moduleFiltered) { - logger.lifecycle("Validating {} Module", moduleFiltered.getKey()); + private void validateModule(AtomicBoolean valid, String moduleFiltered) { + logger.lifecycle("Validating {} Module", moduleFiltered); validateDependencies(valid, moduleFiltered); if (!valid.get()) { - logger.error("--- {} is violating a rule", moduleFiltered.getKey()); + logger.error("--- {} is violating a rule", moduleFiltered); } } private boolean validateExistingModule(String module) { - return (getProject().getChildProjects().containsKey(module)); + return moduleNames.get().contains(module); } private Configuration getConfiguration(String moduleName) { @@ -183,8 +229,8 @@ private void printDependenciesByModule(String moduleName) { .forEach(dependency -> logger.lifecycle("--- Dependency: " + dependency.getName())); } - private void validateDependencies(AtomicBoolean valid, Map.Entry dependency) { - Configuration configuration = getConfiguration(dependency.getKey()); + private void validateDependencies(AtomicBoolean valid, String dependency) { + Configuration configuration = getConfiguration(dependency); if (configuration.getDependencies().stream().anyMatch(filterDependenciesInfrastructure())) { valid.set(false); } @@ -202,8 +248,4 @@ private Predicate filterDependenciesInfrastructure() { && !Arrays.asList(MODEL_MODULE, USE_CASE_MODULE).contains(dependency.getName()); }; } - - private Set> getModules() { - return getProject().getChildProjects().entrySet(); - } } diff --git a/src/main/java/co/com/bancolombia/utils/CommandUtils.java b/src/main/java/co/com/bancolombia/utils/CommandUtils.java index 2c569408..083c011d 100644 --- a/src/main/java/co/com/bancolombia/utils/CommandUtils.java +++ b/src/main/java/co/com/bancolombia/utils/CommandUtils.java @@ -9,7 +9,7 @@ @AllArgsConstructor public class CommandUtils { - private static final String GIT_STATUS = "git status"; + private static final String[] GIT_STATUS = {"git", "status"}; private final Runtime rt; public static CommandUtils getDefault() { diff --git a/src/test/java/co/com/bancolombia/factory/validations/architecture/ArchitectureValidationTest.java b/src/test/java/co/com/bancolombia/factory/validations/architecture/ArchitectureValidationTest.java index 44a0511c..d3aea755 100644 --- a/src/test/java/co/com/bancolombia/factory/validations/architecture/ArchitectureValidationTest.java +++ b/src/test/java/co/com/bancolombia/factory/validations/architecture/ArchitectureValidationTest.java @@ -21,6 +21,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Set; +import java.util.stream.Collectors; import org.gradle.api.Project; import org.gradle.internal.logging.text.StyledTextOutput; import org.gradle.testfixtures.ProjectBuilder; @@ -74,8 +75,12 @@ void shouldInjectTests() throws IOException, CleanException { when(styledTextOutput.append(any())).thenReturn(styledTextOutput); ModuleBuilder builder = new ModuleBuilder(project); builder.setStyledLogger(styledTextOutput); + + var projectDirectories = + project.getAllprojects().stream().map(Project::getProjectDir).collect(Collectors.toSet()); + // Act - ArchitectureValidation.inject(project, builder); + ArchitectureValidation.inject(builder, project.getLogger(), projectDirectories); // Assert assertTrue(Files.exists(testFile)); } From 9e4c085257c767e05c7b1a2d5011a5dc993a2116 Mon Sep 17 00:00:00 2001 From: lugomez Date: Mon, 19 May 2025 17:02:27 -0500 Subject: [PATCH 07/15] feat(gradle): enhance GenerateAcceptanceTestTask with projectPath and moduleNames properties --- .../task/GenerateAcceptanceTestTask.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java b/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java index a8b14bcd..64d8062f 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java @@ -4,6 +4,10 @@ import co.com.bancolombia.task.annotations.CATask; import java.io.IOException; import java.util.ArrayList; +import lombok.Getter; +import org.gradle.api.provider.Property; +import org.gradle.api.provider.SetProperty; +import org.gradle.api.tasks.Input; @CATask( name = "generateAcceptanceTest", @@ -11,20 +15,28 @@ description = "Generate subproject by karate framework in deployment layer") public class GenerateAcceptanceTestTask extends AbstractResolvableTypeTask { + @Input @Getter private final Property projectPath; + @Input @Getter private final SetProperty moduleNames; + public GenerateAcceptanceTestTask() { notCompatibleWithConfigurationCache("This task performs validations that should always run"); + + this.projectPath = getProject().getObjects().property(String.class); + this.projectPath.set(getProject().getProjectDir().getPath()); + + this.moduleNames = getProject().getObjects().setProperty(String.class); + this.moduleNames.set(getProject().getChildProjects().keySet()); } @Override public void execute() throws IOException, CleanException { super.execute(); - builder.runTask( - "wrapper", getProject().getProjectDir().getPath().concat("/deployment/" + name)); + builder.runTask("wrapper", projectPath.get().concat("/deployment/" + name)); } @Override protected void prepareParams() { - var modules = new ArrayList<>(getProject().getChildProjects().keySet()); + var modules = new ArrayList<>(moduleNames.get()); builder.addParam( "task-param-exist-api-rest", From 4f24365883986157af98818684ab6428a500e404 Mon Sep 17 00:00:00 2001 From: lugomez Date: Tue, 20 May 2025 11:59:30 -0500 Subject: [PATCH 08/15] feat(gradle): update projectPath property to Internal in multiple tasks --- src/main/java/co/com/bancolombia/task/DeleteModuleTask.java | 2 -- .../co/com/bancolombia/task/GenerateAcceptanceTestTask.java | 3 ++- .../co/com/bancolombia/task/GenerateDrivenAdapterTask.java | 4 ++-- .../java/co/com/bancolombia/task/GenerateEntryPointTask.java | 4 ++-- src/main/java/co/com/bancolombia/task/InternalTask.java | 3 +-- src/main/java/co/com/bancolombia/task/UpdateProjectTask.java | 4 ++-- 6 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/main/java/co/com/bancolombia/task/DeleteModuleTask.java b/src/main/java/co/com/bancolombia/task/DeleteModuleTask.java index d35aa9f6..e8c6a91d 100644 --- a/src/main/java/co/com/bancolombia/task/DeleteModuleTask.java +++ b/src/main/java/co/com/bancolombia/task/DeleteModuleTask.java @@ -10,7 +10,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; -import javax.inject.Inject; import org.gradle.api.provider.ListProperty; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.options.Option; @@ -22,7 +21,6 @@ public class DeleteModuleTask extends AbstractCleanArchitectureDefaultTask { @Input private final ListProperty availableModules; - @Inject public DeleteModuleTask() { super(); notCompatibleWithConfigurationCache("This task performs validations that should always run"); diff --git a/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java b/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java index 64d8062f..44fb9b89 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java @@ -8,6 +8,7 @@ import org.gradle.api.provider.Property; import org.gradle.api.provider.SetProperty; import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.Internal; @CATask( name = "generateAcceptanceTest", @@ -15,7 +16,7 @@ description = "Generate subproject by karate framework in deployment layer") public class GenerateAcceptanceTestTask extends AbstractResolvableTypeTask { - @Input @Getter private final Property projectPath; + @Internal @Getter private final Property projectPath; @Input @Getter private final SetProperty moduleNames; public GenerateAcceptanceTestTask() { diff --git a/src/main/java/co/com/bancolombia/task/GenerateDrivenAdapterTask.java b/src/main/java/co/com/bancolombia/task/GenerateDrivenAdapterTask.java index ad82f07c..2b21f1f7 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateDrivenAdapterTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateDrivenAdapterTask.java @@ -99,8 +99,8 @@ protected void prepareParams() { private void appendRCommonsParams() { String[] techs = tech.split(","); - for (String tech : techs) { - builder.addParam(tech, true); + for (String t : techs) { + builder.addParam(t, true); } builder.addParam("eda", eda == BooleanOption.TRUE); } diff --git a/src/main/java/co/com/bancolombia/task/GenerateEntryPointTask.java b/src/main/java/co/com/bancolombia/task/GenerateEntryPointTask.java index 5c49b6b4..954bf163 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateEntryPointTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateEntryPointTask.java @@ -128,8 +128,8 @@ protected void prepareParams() { private void appendRCommonsParams() { String[] techs = tech.split(","); - for (String tech : techs) { - builder.addParam(tech, true); + for (String t : techs) { + builder.addParam(t, true); } builder.addParam("eda", eda == BooleanOption.TRUE); } diff --git a/src/main/java/co/com/bancolombia/task/InternalTask.java b/src/main/java/co/com/bancolombia/task/InternalTask.java index 85a899b3..a5ded6d7 100644 --- a/src/main/java/co/com/bancolombia/task/InternalTask.java +++ b/src/main/java/co/com/bancolombia/task/InternalTask.java @@ -10,7 +10,6 @@ import java.util.Objects; import lombok.Getter; import org.gradle.api.provider.Property; -import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.options.Option; import org.gradle.api.tasks.options.OptionValues; @@ -19,7 +18,7 @@ public class InternalTask extends AbstractCleanArchitectureDefaultTask { private Action action = Action.SONAR_CHECK; - @Input @Getter private final Property projectPath; + @Internal @Getter private final Property projectPath; public InternalTask() { notCompatibleWithConfigurationCache("This task performs validations that should always run"); diff --git a/src/main/java/co/com/bancolombia/task/UpdateProjectTask.java b/src/main/java/co/com/bancolombia/task/UpdateProjectTask.java index 5d9a8131..a336610d 100644 --- a/src/main/java/co/com/bancolombia/task/UpdateProjectTask.java +++ b/src/main/java/co/com/bancolombia/task/UpdateProjectTask.java @@ -14,7 +14,7 @@ import java.util.Set; import lombok.Getter; import org.gradle.api.provider.Property; -import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.options.Option; import org.gradle.internal.logging.text.StyledTextOutput; @@ -26,7 +26,7 @@ public class UpdateProjectTask extends AbstractCleanArchitectureDefaultTask { private final Set dependencies = new HashSet<>(); private BooleanOption git = BooleanOption.TRUE; - @Input @Getter private final Property projectPath; + @Internal @Getter private final Property projectPath; public UpdateProjectTask() { notCompatibleWithConfigurationCache("This task performs validations that should always run"); From f9e48a98df071dbf6dba4f8659d0ee6aff710ef4 Mon Sep 17 00:00:00 2001 From: lugomez Date: Wed, 21 May 2025 14:59:26 -0500 Subject: [PATCH 09/15] feat(gradle): mark tasks as incompatible with configuration cache for validation --- .../task/AbstractCleanArchitectureDefaultTask.java | 1 + src/main/java/co/com/bancolombia/task/AnalyticsTask.java | 4 ---- .../java/co/com/bancolombia/task/DeleteModuleTask.java | 2 -- .../com/bancolombia/task/GenerateAcceptanceTestTask.java | 2 -- .../com/bancolombia/task/GenerateDrivenAdapterTask.java | 4 ---- .../co/com/bancolombia/task/GenerateEntryPointTask.java | 4 ---- .../java/co/com/bancolombia/task/GenerateHelperTask.java | 4 ---- .../java/co/com/bancolombia/task/GenerateModelTask.java | 4 ---- .../bancolombia/task/GeneratePerformanceTestTask.java | 4 ---- .../co/com/bancolombia/task/GeneratePipelineTask.java | 4 ---- .../co/com/bancolombia/task/GenerateStructureTask.java | 4 ---- .../co/com/bancolombia/task/GenerateUseCaseTask.java | 4 ---- src/main/java/co/com/bancolombia/task/InternalTask.java | 1 - .../java/co/com/bancolombia/task/UpdateProjectTask.java | 1 - .../co/com/bancolombia/task/ValidateStructureTask.java | 9 +++------ 15 files changed, 4 insertions(+), 48 deletions(-) diff --git a/src/main/java/co/com/bancolombia/task/AbstractCleanArchitectureDefaultTask.java b/src/main/java/co/com/bancolombia/task/AbstractCleanArchitectureDefaultTask.java index 4a9b03a4..6ead5fd1 100644 --- a/src/main/java/co/com/bancolombia/task/AbstractCleanArchitectureDefaultTask.java +++ b/src/main/java/co/com/bancolombia/task/AbstractCleanArchitectureDefaultTask.java @@ -29,6 +29,7 @@ public abstract class AbstractCleanArchitectureDefaultTask extends DefaultTask { protected final Logger logger = getProject().getLogger(); protected AbstractCleanArchitectureDefaultTask() { + notCompatibleWithConfigurationCache("This task performs validations that should always run"); builder.setStyledLogger( getTextOutputFactory().create(AbstractCleanArchitectureDefaultTask.class)); } diff --git a/src/main/java/co/com/bancolombia/task/AnalyticsTask.java b/src/main/java/co/com/bancolombia/task/AnalyticsTask.java index fd648015..054d914a 100644 --- a/src/main/java/co/com/bancolombia/task/AnalyticsTask.java +++ b/src/main/java/co/com/bancolombia/task/AnalyticsTask.java @@ -13,10 +13,6 @@ public class AnalyticsTask extends AbstractCleanArchitectureDefaultTask { private BooleanOption enabled = BooleanOption.TRUE; - public AnalyticsTask() { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); - } - @Option(option = "enabled", description = "Set analytics state") public void setAnalyticsState(BooleanOption enabled) { this.enabled = enabled; diff --git a/src/main/java/co/com/bancolombia/task/DeleteModuleTask.java b/src/main/java/co/com/bancolombia/task/DeleteModuleTask.java index e8c6a91d..3c8a89b4 100644 --- a/src/main/java/co/com/bancolombia/task/DeleteModuleTask.java +++ b/src/main/java/co/com/bancolombia/task/DeleteModuleTask.java @@ -22,8 +22,6 @@ public class DeleteModuleTask extends AbstractCleanArchitectureDefaultTask { @Input private final ListProperty availableModules; public DeleteModuleTask() { - super(); - notCompatibleWithConfigurationCache("This task performs validations that should always run"); this.availableModules = getProject().getObjects().listProperty(String.class); this.availableModules.set(new ArrayList<>(getProject().getChildProjects().keySet())); } diff --git a/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java b/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java index 44fb9b89..578d6cba 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateAcceptanceTestTask.java @@ -20,8 +20,6 @@ public class GenerateAcceptanceTestTask extends AbstractResolvableTypeTask { @Input @Getter private final SetProperty moduleNames; public GenerateAcceptanceTestTask() { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); - this.projectPath = getProject().getObjects().property(String.class); this.projectPath.set(getProject().getProjectDir().getPath()); diff --git a/src/main/java/co/com/bancolombia/task/GenerateDrivenAdapterTask.java b/src/main/java/co/com/bancolombia/task/GenerateDrivenAdapterTask.java index 2b21f1f7..10cb3ced 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateDrivenAdapterTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateDrivenAdapterTask.java @@ -26,10 +26,6 @@ public class GenerateDrivenAdapterTask extends AbstractResolvableTypeTask { private BooleanOption eda = BooleanOption.FALSE; private String tech = "rabbitmq"; - public GenerateDrivenAdapterTask() { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); - } - @Option(option = "url", description = "Set driven adapter url when RESTCONSUMER type") public void setUrl(String url) { this.url = url; diff --git a/src/main/java/co/com/bancolombia/task/GenerateEntryPointTask.java b/src/main/java/co/com/bancolombia/task/GenerateEntryPointTask.java index 954bf163..9ddf7951 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateEntryPointTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateEntryPointTask.java @@ -25,10 +25,6 @@ public class GenerateEntryPointTask extends AbstractResolvableTypeTask { private String tech = "rabbitmq"; private BooleanOption authorization = BooleanOption.FALSE; - public GenerateEntryPointTask() { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); - } - @Option( option = "server", description = "Set server on which the application will run when RESTMVC type") diff --git a/src/main/java/co/com/bancolombia/task/GenerateHelperTask.java b/src/main/java/co/com/bancolombia/task/GenerateHelperTask.java index 1673ec9f..b0c8bf71 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateHelperTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateHelperTask.java @@ -8,10 +8,6 @@ description = "Generate helper in infrastructure layer") public class GenerateHelperTask extends AbstractResolvableTypeTask { - public GenerateHelperTask() { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); - } - @Override protected void prepareParams() { // no additional params required diff --git a/src/main/java/co/com/bancolombia/task/GenerateModelTask.java b/src/main/java/co/com/bancolombia/task/GenerateModelTask.java index 4e721b19..9e788bf0 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateModelTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateModelTask.java @@ -12,10 +12,6 @@ public class GenerateModelTask extends AbstractCleanArchitectureDefaultTask { private String name = ""; - public GenerateModelTask() { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); - } - @Option(option = "name", description = "Set the model name") public void setName(String modelName) { this.name = modelName; diff --git a/src/main/java/co/com/bancolombia/task/GeneratePerformanceTestTask.java b/src/main/java/co/com/bancolombia/task/GeneratePerformanceTestTask.java index ed540155..2ba32c2a 100644 --- a/src/main/java/co/com/bancolombia/task/GeneratePerformanceTestTask.java +++ b/src/main/java/co/com/bancolombia/task/GeneratePerformanceTestTask.java @@ -9,10 +9,6 @@ description = "Generate performance test") public class GeneratePerformanceTestTask extends AbstractResolvableTypeTask { - public GeneratePerformanceTestTask() { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); - } - @Override protected void prepareParams() { var modules = new ArrayList<>(getProject().getChildProjects().keySet()); diff --git a/src/main/java/co/com/bancolombia/task/GeneratePipelineTask.java b/src/main/java/co/com/bancolombia/task/GeneratePipelineTask.java index 57970ab8..147ac6d9 100644 --- a/src/main/java/co/com/bancolombia/task/GeneratePipelineTask.java +++ b/src/main/java/co/com/bancolombia/task/GeneratePipelineTask.java @@ -13,10 +13,6 @@ public class GeneratePipelineTask extends AbstractResolvableTypeTask { private BooleanOption monoRepo = BooleanOption.FALSE; - public GeneratePipelineTask() { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); - } - @Option(option = "monoRepo", description = "is Mono repository") public void setMonoRepo(BooleanOption monoRepo) { this.monoRepo = monoRepo; diff --git a/src/main/java/co/com/bancolombia/task/GenerateStructureTask.java b/src/main/java/co/com/bancolombia/task/GenerateStructureTask.java index cb68b13d..b456864f 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateStructureTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateStructureTask.java @@ -29,10 +29,6 @@ public class GenerateStructureTask extends AbstractCleanArchitectureDefaultTask private BooleanOption withExample = BooleanOption.FALSE; private JavaVersion javaVersion = JavaVersion.VERSION_21; - public GenerateStructureTask() { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); - } - @Option(option = "package", description = "Set principal package to use in the project") public void setPackage(String packageName) { this.packageName = packageName; diff --git a/src/main/java/co/com/bancolombia/task/GenerateUseCaseTask.java b/src/main/java/co/com/bancolombia/task/GenerateUseCaseTask.java index 88899dab..10f794ab 100644 --- a/src/main/java/co/com/bancolombia/task/GenerateUseCaseTask.java +++ b/src/main/java/co/com/bancolombia/task/GenerateUseCaseTask.java @@ -16,10 +16,6 @@ public class GenerateUseCaseTask extends AbstractCleanArchitectureDefaultTask { private static final String USECASE_CLASS_NAME = "UseCase"; private String name = ""; - public GenerateUseCaseTask() { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); - } - @Option(option = "name", description = "Set UseCase name") public void setName(String useCaseName) { this.name = useCaseName; diff --git a/src/main/java/co/com/bancolombia/task/InternalTask.java b/src/main/java/co/com/bancolombia/task/InternalTask.java index a5ded6d7..97d145bc 100644 --- a/src/main/java/co/com/bancolombia/task/InternalTask.java +++ b/src/main/java/co/com/bancolombia/task/InternalTask.java @@ -21,7 +21,6 @@ public class InternalTask extends AbstractCleanArchitectureDefaultTask { @Internal @Getter private final Property projectPath; public InternalTask() { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); projectPath = getProject().getObjects().property(String.class); projectPath.set(getProject().getProjectDir().getPath()); } diff --git a/src/main/java/co/com/bancolombia/task/UpdateProjectTask.java b/src/main/java/co/com/bancolombia/task/UpdateProjectTask.java index a336610d..e6ecd1cd 100644 --- a/src/main/java/co/com/bancolombia/task/UpdateProjectTask.java +++ b/src/main/java/co/com/bancolombia/task/UpdateProjectTask.java @@ -29,7 +29,6 @@ public class UpdateProjectTask extends AbstractCleanArchitectureDefaultTask { @Internal @Getter private final Property projectPath; public UpdateProjectTask() { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); this.projectPath = getProject().getObjects().property(String.class); this.projectPath.set(getProject().getProjectDir().toString()); } diff --git a/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java b/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java index d0395e26..651e5efb 100644 --- a/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java +++ b/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java @@ -15,7 +15,6 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Predicate; import java.util.stream.Collectors; -import javax.inject.Inject; import lombok.Getter; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; @@ -52,9 +51,7 @@ public abstract class ValidateStructureTask extends AbstractCleanArchitectureDef @Optional public abstract Property getWhitelistedDependencies(); - @Inject - public ValidateStructureTask() throws IOException { - notCompatibleWithConfigurationCache("This task performs validations that should always run"); + public ValidateStructureTask() { this.projectPath = getProject().getObjects().property(String.class); this.projectPath.set(getProject().getProjectDir().getPath()); @@ -64,8 +61,6 @@ public ValidateStructureTask() throws IOException { this.projectDirectories = getProject().getObjects().setProperty(File.class); this.projectDirectories.set(getProject().provider(this::collectAllProjectDirectories)); - setupArchitectureValidation(); - this.hasSpringWeb = getProject().getObjects().property(Boolean.class); this.hasSpringWeb.set(getProject().provider(this::checkForSpringWebDependency)); @@ -82,6 +77,8 @@ public ValidateStructureTask() throws IOException { @Override public void execute() throws IOException, CleanException { + setupArchitectureValidation(); + if (!isValidateModelLayer.get()) { throw new CleanException("Model module is invalid"); } From 6dc0d222cdae4ed010d988a3c77b2deccd092467 Mon Sep 17 00:00:00 2001 From: lugomez Date: Wed, 21 May 2025 15:14:33 -0500 Subject: [PATCH 10/15] feat(gradle): add moduleNames property to GeneratePerformanceTestTask --- .../bancolombia/task/GeneratePerformanceTestTask.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/co/com/bancolombia/task/GeneratePerformanceTestTask.java b/src/main/java/co/com/bancolombia/task/GeneratePerformanceTestTask.java index 2ba32c2a..9f7c5986 100644 --- a/src/main/java/co/com/bancolombia/task/GeneratePerformanceTestTask.java +++ b/src/main/java/co/com/bancolombia/task/GeneratePerformanceTestTask.java @@ -2,16 +2,25 @@ import co.com.bancolombia.task.annotations.CATask; import java.util.ArrayList; +import lombok.Getter; +import org.gradle.api.provider.SetProperty; +import org.gradle.api.tasks.Input; @CATask( name = "generatePerformanceTest", shortcut = "gpt", description = "Generate performance test") public class GeneratePerformanceTestTask extends AbstractResolvableTypeTask { + @Input @Getter private final SetProperty moduleNames; + + public GeneratePerformanceTestTask() { + this.moduleNames = getProject().getObjects().setProperty(String.class); + this.moduleNames.set(getProject().getChildProjects().keySet()); + } @Override protected void prepareParams() { - var modules = new ArrayList<>(getProject().getChildProjects().keySet()); + var modules = new ArrayList<>(moduleNames.get()); builder.addParam( "task-param-exist-api-rest", From e449b2cf275dc7843fb4a65db1724b1243b8a8c5 Mon Sep 17 00:00:00 2001 From: lugomez Date: Wed, 21 May 2025 19:44:57 -0500 Subject: [PATCH 11/15] feat(gradle): update projectPath to Internal and projectDirectories to InputFiles in ValidateStructureTask --- .../java/co/com/bancolombia/task/ValidateStructureTask.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java b/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java index 651e5efb..b5947561 100644 --- a/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java +++ b/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java @@ -25,6 +25,8 @@ import org.gradle.api.provider.Property; import org.gradle.api.provider.SetProperty; import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.InputFiles; +import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.Optional; @CATask( @@ -39,10 +41,10 @@ public abstract class ValidateStructureTask extends AbstractCleanArchitectureDef private static final String SPRING_DEPENDENCIES = "spring-boot-dependencies"; private static final String AWS_BOM = "bom"; - @Input @Getter private final Property projectPath; + @Internal @Getter private final Property projectPath; @Input @Getter private final SetProperty moduleNames; @Input @Getter private final Property hasSpringWeb; - @Input @Getter private final SetProperty projectDirectories; + @InputFiles @Getter private final SetProperty projectDirectories; @Input @Getter private final Property isValidateModelLayer; @Input @Getter private final Property isValidateUseCaseLayer; @Input @Getter private final Property isValidateInfrastructureLayer; From 6c2136e7086d02b9ce8777409cc6c0ceba43fcfd Mon Sep 17 00:00:00 2001 From: lugomez Date: Thu, 22 May 2025 12:01:29 -0500 Subject: [PATCH 12/15] feat(gradle): change projectDirectories property to Input in ValidateStructureTask and update test setup methods --- .../task/ValidateStructureTask.java | 3 +- .../task/GeneratePerformanceTestTaskTest.java | 18 ++++++------ .../task/GenerateTestTaskTest.java | 28 +++++++++---------- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java b/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java index b5947561..c3134e09 100644 --- a/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java +++ b/src/main/java/co/com/bancolombia/task/ValidateStructureTask.java @@ -25,7 +25,6 @@ import org.gradle.api.provider.Property; import org.gradle.api.provider.SetProperty; import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.Optional; @@ -44,7 +43,7 @@ public abstract class ValidateStructureTask extends AbstractCleanArchitectureDef @Internal @Getter private final Property projectPath; @Input @Getter private final SetProperty moduleNames; @Input @Getter private final Property hasSpringWeb; - @InputFiles @Getter private final SetProperty projectDirectories; + @Input @Getter private final SetProperty projectDirectories; @Input @Getter private final Property isValidateModelLayer; @Input @Getter private final Property isValidateUseCaseLayer; @Input @Getter private final Property isValidateInfrastructureLayer; diff --git a/src/test/java/co/com/bancolombia/task/GeneratePerformanceTestTaskTest.java b/src/test/java/co/com/bancolombia/task/GeneratePerformanceTestTaskTest.java index 73863a5b..1b1cea8f 100644 --- a/src/test/java/co/com/bancolombia/task/GeneratePerformanceTestTaskTest.java +++ b/src/test/java/co/com/bancolombia/task/GeneratePerformanceTestTaskTest.java @@ -29,14 +29,6 @@ void setup() throws IOException, CleanException { GenerateStructureTask taskStructure = getTask(project, GenerateStructureTask.class); taskStructure.setType(GenerateStructureTask.ProjectType.REACTIVE); taskStructure.execute(); - - ProjectBuilder.builder() - .withName("app-service") - .withProjectDir(new File(TEST_DIR + "/applications/app-service")) - .withParent(project) - .build(); - - task = createTask(project, GeneratePerformanceTestTask.class); } @AfterEach @@ -46,6 +38,14 @@ void tearDown() { @Test void generatePerformanceTest() throws IOException, CleanException { + ProjectBuilder.builder() + .withName("app-service") + .withProjectDir(new File(TEST_DIR + "/applications/app-service")) + .withParent(project) + .build(); + + task = createTask(project, GeneratePerformanceTestTask.class); + task.setType("JMETER"); task.execute(); assertFilesExistsInDir(TEST_DIR + "/performance-test/", "Jmeter", "README.md"); @@ -60,6 +60,8 @@ void generateApiPerformanceTest() throws IOException, CleanException { .withParent(project) .build(); + task = createTask(project, GeneratePerformanceTestTask.class); + task.setType("JMETER"); // Act diff --git a/src/test/java/co/com/bancolombia/task/GenerateTestTaskTest.java b/src/test/java/co/com/bancolombia/task/GenerateTestTaskTest.java index fe20e797..a1571e37 100644 --- a/src/test/java/co/com/bancolombia/task/GenerateTestTaskTest.java +++ b/src/test/java/co/com/bancolombia/task/GenerateTestTaskTest.java @@ -13,8 +13,8 @@ import java.nio.file.Path; import org.gradle.api.Project; import org.gradle.testfixtures.ProjectBuilder; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class GenerateTestTaskTest { @@ -23,32 +23,31 @@ class GenerateTestTaskTest { private static GenerateAcceptanceTestTask task; private static Project project; - @BeforeAll - static void setup() throws IOException, CleanException { + @BeforeEach + void setup() throws IOException, CleanException { deleteStructure(Path.of(TEST_DIR)); project = setupProject(GenerateTestTaskTest.class, GenerateStructureTask.class); GenerateStructureTask taskStructure = getTask(project, GenerateStructureTask.class); taskStructure.setType(GenerateStructureTask.ProjectType.REACTIVE); taskStructure.execute(); - - ProjectBuilder.builder() - .withName("app-service") - .withProjectDir(new File(TEST_DIR + "/applications/app-service")) - .withParent(project) - .build(); - - task = createTask(project, GenerateAcceptanceTestTask.class); } - @AfterAll - static void tearDown() { + @AfterEach + void tearDown() { deleteStructure(Path.of(TEST_DIR)); } @Test void generateAcceptanceTest() throws IOException, CleanException { // Arrange + ProjectBuilder.builder() + .withName("app-service") + .withProjectDir(new File(TEST_DIR + "/applications/app-service")) + .withParent(project) + .build(); + + task = createTask(project, GenerateAcceptanceTestTask.class); task.setName("acceptance-test"); // Act task.execute(); @@ -76,6 +75,7 @@ void generateEntryPointAcceptanceTest() throws IOException, CleanException { .withParent(project) .build(); + task = createTask(project, GenerateAcceptanceTestTask.class); task.setName("acceptance-test"); // Act task.execute(); From 3c73f67ff8be3c24121987c650430bc9e89394cc Mon Sep 17 00:00:00 2001 From: lugomez Date: Thu, 22 May 2025 19:26:59 -0500 Subject: [PATCH 13/15] feat(gradle): add subProjectPath property to InternalTask and update execution logic --- .../co/com/bancolombia/task/InternalTask.java | 23 ++++++++++++++++++- .../co/com/bancolombia/utils/SonarCheck.java | 17 +++----------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/main/java/co/com/bancolombia/task/InternalTask.java b/src/main/java/co/com/bancolombia/task/InternalTask.java index 97d145bc..f7c4abfe 100644 --- a/src/main/java/co/com/bancolombia/task/InternalTask.java +++ b/src/main/java/co/com/bancolombia/task/InternalTask.java @@ -4,12 +4,18 @@ import co.com.bancolombia.utils.SonarCheck; import co.com.bancolombia.utils.Utils; import co.com.bancolombia.utils.offline.UpdateProjectDependencies; +import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; import lombok.Getter; +import org.gradle.api.Project; import org.gradle.api.provider.Property; +import org.gradle.api.provider.SetProperty; +import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.options.Option; import org.gradle.api.tasks.options.OptionValues; @@ -19,10 +25,25 @@ public class InternalTask extends AbstractCleanArchitectureDefaultTask { private Action action = Action.SONAR_CHECK; @Internal @Getter private final Property projectPath; + @Input @Getter private final SetProperty subProjectPath; public InternalTask() { projectPath = getProject().getObjects().property(String.class); projectPath.set(getProject().getProjectDir().getPath()); + + this.subProjectPath = getProject().getObjects().setProperty(String.class); + this.subProjectPath.set(getProject().provider(this::getAllSubProjectPaths)); + } + + private Set getAllSubProjectPaths() { + Set projectPaths = + getProject().getSubprojects().stream() + .map(Project::getProjectDir) + .map(File::getPath) + .collect(Collectors.toSet()); + + projectPaths.add(projectPath.get()); + return projectPaths; } @Option(option = "action", description = "Set task action to run") @@ -41,7 +62,7 @@ public List getInputOptions() { public void execute() throws IOException { switch (Objects.requireNonNull(action)) { case SONAR_CHECK: - SonarCheck.parse(projectPath.get()); + SonarCheck.parse(subProjectPath.get()); break; case UPDATE_DEPENDENCIES: String basePath = projectPath.get(); diff --git a/src/main/java/co/com/bancolombia/utils/SonarCheck.java b/src/main/java/co/com/bancolombia/utils/SonarCheck.java index 0588cabd..1db0cfa5 100644 --- a/src/main/java/co/com/bancolombia/utils/SonarCheck.java +++ b/src/main/java/co/com/bancolombia/utils/SonarCheck.java @@ -6,6 +6,7 @@ import java.nio.file.Files; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.stream.Stream; import lombok.AccessLevel; import lombok.Builder; @@ -23,23 +24,11 @@ public class SonarCheck { "src/main/java/co/com/bancolombia/MainApplication.java"; @SneakyThrows - public static void parse(String projectPath) { + public static void parse(Set subProjectPath) { final ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - parseSingle(projectPath, mapper); - - // Procesar los subproyectos - File projectDir = new File(projectPath); - File[] subProjectDirs = projectDir.listFiles(File::isDirectory); - if (subProjectDirs != null) { - for (File subDir : subProjectDirs) { - // Verificar que sea un subproyecto válido (tiene build.gradle) - if (new File(subDir, "build.gradle").exists()) { - parseSingle(subDir.getAbsolutePath(), mapper); - } - } - } + subProjectPath.forEach(p -> parseSingle(p, mapper)); } @SneakyThrows From bfa993033019658ac38d6471d674d197b3d39028 Mon Sep 17 00:00:00 2001 From: lugomez Date: Thu, 22 May 2025 19:49:49 -0500 Subject: [PATCH 14/15] feat(gradle): update dependencies and Gradle wrapper to version 8.14.1 --- build.gradle | 26 +++++++++---------- gradle/wrapper/gradle-wrapper.properties | 2 +- .../java/co/com/bancolombia/Constants.java | 12 ++++----- .../structure/root/main.gradle.mustache | 4 +-- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/build.gradle b/build.gradle index de18f81f..dad3c709 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ plugins { id 'jacoco' id 'maven-publish' id 'java-gradle-plugin' - id 'org.sonarqube' version '6.1.0.5360' + id 'org.sonarqube' version '6.2.0.5505' id 'com.gradle.plugin-publish' version '1.3.1' id 'com.github.sherter.google-java-format' version '0.9' id 'io.github.gradle-nexus.publish-plugin' version '2.0.0' @@ -175,13 +175,13 @@ if (project.hasProperty('signing.keyId')) { // publish as library in maven centr dependencies { api 'com.github.spullara.mustache.java:compiler:0.9.14' - api 'com.fasterxml.jackson.core:jackson-databind:2.18.3' - api 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.3' - api 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.18.3' - api 'commons-io:commons-io:2.18.0' + api 'com.fasterxml.jackson.core:jackson-databind:2.19.0' + api 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.19.0' + api 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.19.0' + api 'commons-io:commons-io:2.19.0' api gradleApi() - implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3' + implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.19.0' implementation 'org.reflections:reflections:0.10.2' // swagger generators implementation('io.swagger.codegen.v3:swagger-codegen-generators:1.0.56') { @@ -193,14 +193,14 @@ dependencies { } } implementation 'com.googlecode.lambdaj:lambdaj:2.3.3' - implementation 'com.google.googlejavaformat:google-java-format:1.25.2' + implementation 'com.google.googlejavaformat:google-java-format:1.27.0' testImplementation gradleTestKit() - testImplementation 'org.mockito:mockito-junit-jupiter:5.17.0' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.0' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.12.0' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.0' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.12.0' + testImplementation 'org.mockito:mockito-junit-jupiter:5.18.0' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.12.2' + testImplementation 'org.junit.jupiter:junit-jupiter-params:5.12.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.2' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.12.2' compileOnly 'org.projectlombok:lombok:1.18.38' annotationProcessor 'org.projectlombok:lombok:1.18.38' @@ -289,7 +289,7 @@ tasks.register('installGitHooks') { } tasks.named('wrapper') { - gradleVersion = '8.14' + gradleVersion = '8.14.1' } tasks.register('ci-updater', JavaExec) { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ca025c83..002b867c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/co/com/bancolombia/Constants.java b/src/main/java/co/com/bancolombia/Constants.java index 3c1b86f7..91b3ca34 100644 --- a/src/main/java/co/com/bancolombia/Constants.java +++ b/src/main/java/co/com/bancolombia/Constants.java @@ -13,29 +13,29 @@ public final class Constants { public static final String PATH_GRAPHQL = "/graphql"; // dependencies public static final String SECRETS_VERSION = "4.4.31"; - public static final String SPRING_BOOT_VERSION = "3.4.4"; + public static final String SPRING_BOOT_VERSION = "3.4.6"; public static final String LOMBOK_VERSION = "1.18.38"; public static final String REACTIVE_COMMONS_VERSION = "5.4.0"; public static final String REACTIVE_COMMONS_MAPPER_VERSION = "0.1.0"; public static final String BLOCK_HOUND_VERSION = "1.0.11.RELEASE"; - public static final String AWS_BOM_VERSION = "2.31.25"; - public static final String COMMONS_JMS_VERSION = "2.3.11"; + public static final String AWS_BOM_VERSION = "2.31.48"; + public static final String COMMONS_JMS_VERSION = "2.4.0"; public static final String GRAPHQL_KICKSTART_VERSION = "15.1.0"; public static final String ARCH_UNIT_VERSION = "1.4.0"; public static final String OKHTTP_VERSION = "4.12.0"; public static final String RESILIENCE_4J_VERSION = "2.3.0"; public static final String BIN_STASH_VERSION = "1.2.6"; - public static final String SPRING_DOC_OPENAPI_VERSION = "2.8.6"; + public static final String SPRING_DOC_OPENAPI_VERSION = "2.8.8"; public static final String CLOUD_EVENTS_VERSION = "4.0.1"; // gradle plugins public static final String JACOCO_VERSION = "0.8.13"; - public static final String SONAR_VERSION = "6.1.0.5360"; + public static final String SONAR_VERSION = "6.2.0.5505"; public static final String COBERTURA_VERSION = "4.0.0"; public static final String PLUGIN_VERSION = "3.22.4"; public static final String DEPENDENCY_CHECK_VERSION = "12.1.1"; public static final String PITEST_VERSION = "1.15.0"; // custom - public static final String GRADLE_WRAPPER_VERSION = "8.14"; + public static final String GRADLE_WRAPPER_VERSION = "8.14.1"; @NoArgsConstructor(access = AccessLevel.PRIVATE) public static class MainFiles { diff --git a/src/main/resources/structure/root/main.gradle.mustache b/src/main/resources/structure/root/main.gradle.mustache index b394ae51..7096af97 100644 --- a/src/main/resources/structure/root/main.gradle.mustache +++ b/src/main/resources/structure/root/main.gradle.mustache @@ -70,7 +70,7 @@ subprojects { targetClasses = ['{{package}}.*'] excludedClasses = [] excludedTestClasses = [] - pitestVersion = '1.19.1' + pitestVersion = '1.19.4' verbose = false outputFormats = ['XML', 'HTML'] threads = 8 @@ -79,7 +79,7 @@ subprojects { timestampedReports = false //mutators = ['STRONGER', 'DEFAULTS'] fileExtensionsToFilter.addAll('xml', 'orbit') - junit5PluginVersion = '1.2.1' + junit5PluginVersion = '1.2.2' failWhenNoMutations = false jvmArgs = ["-XX:+AllowRedefinitionToAddDeleteMethods"] } From 3153ba98ddf47f37ad58d3dc8c5bab27d2d76f1f Mon Sep 17 00:00:00 2001 From: lugomez Date: Thu, 22 May 2025 20:17:03 -0500 Subject: [PATCH 15/15] feat(gradle): update .gitignore to include build directory --- src/test/resources/gradle-8.14-cache/.gitignore-after.txt | 4 ++-- src/test/resources/gradle-8.14-cache/.gitignore-before.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/resources/gradle-8.14-cache/.gitignore-after.txt b/src/test/resources/gradle-8.14-cache/.gitignore-after.txt index 3f605a6d..7e4888c7 100644 --- a/src/test/resources/gradle-8.14-cache/.gitignore-after.txt +++ b/src/test/resources/gradle-8.14-cache/.gitignore-after.txt @@ -1,4 +1,4 @@ -.idea/**/gradle.xml -.idea/**/libraries +.idea/ +build/ /gradle/wrapper/gradle-wrapper.jar build-cache \ No newline at end of file diff --git a/src/test/resources/gradle-8.14-cache/.gitignore-before.txt b/src/test/resources/gradle-8.14-cache/.gitignore-before.txt index 76fd19a2..761ee874 100644 --- a/src/test/resources/gradle-8.14-cache/.gitignore-before.txt +++ b/src/test/resources/gradle-8.14-cache/.gitignore-before.txt @@ -1,3 +1,3 @@ -.idea/**/gradle.xml -.idea/**/libraries +.idea/ +build/ /gradle/wrapper/gradle-wrapper.jar \ No newline at end of file