From 55af4eb3f267f2523dc1588a3fb71377243d0742 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Tue, 26 Aug 2025 13:09:41 +0200 Subject: [PATCH 01/22] style: conform to style rules --- .../org/apache/grails/gradle/common/PropertyFileUtils.groovy | 1 + .../groovy/org/grails/cli/profile/commands/OpenCommand.groovy | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/grails-gradle/common/src/main/groovy/org/apache/grails/gradle/common/PropertyFileUtils.groovy b/grails-gradle/common/src/main/groovy/org/apache/grails/gradle/common/PropertyFileUtils.groovy index 1b58d9b667e..f4490a7cd6e 100644 --- a/grails-gradle/common/src/main/groovy/org/apache/grails/gradle/common/PropertyFileUtils.groovy +++ b/grails-gradle/common/src/main/groovy/org/apache/grails/gradle/common/PropertyFileUtils.groovy @@ -26,6 +26,7 @@ import org.codehaus.groovy.runtime.IOGroovyMethods @CompileStatic final class PropertyFileUtils { + private final static Pattern TIME_REGEX = ~'^#(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)(?:,|\\s).*$' private PropertyFileUtils() { diff --git a/grails-shell-cli/src/main/groovy/org/grails/cli/profile/commands/OpenCommand.groovy b/grails-shell-cli/src/main/groovy/org/grails/cli/profile/commands/OpenCommand.groovy index b5b7ee4700b..6ebb3f971de 100644 --- a/grails-shell-cli/src/main/groovy/org/grails/cli/profile/commands/OpenCommand.groovy +++ b/grails-shell-cli/src/main/groovy/org/grails/cli/profile/commands/OpenCommand.groovy @@ -19,8 +19,7 @@ package org.grails.cli.profile.commands -import java.awt.* -import java.util.List +import java.awt.Desktop import groovy.transform.CompileStatic From 3bb575bb5cf1a0eb2224eb9a3cf7bd727d50aa97 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Tue, 26 Aug 2025 14:01:43 +0200 Subject: [PATCH 02/22] fix: add style enforcement --- .../checkstyle/checkstyle-suppressions.xml | 22 +++++ etc/config/checkstyle/checkstyle.xml | 89 +++++++++++++++++++ etc/config/codenarc/codenarc.groovy | 76 ++++++++++++++++ gradle.properties | 4 + gradle/code-style-config.gradle | 76 ++++++++++++++++ grails-async/core/build.gradle | 1 + grails-async/gpars/build.gradle | 1 + grails-async/plugin/build.gradle | 1 + grails-async/rxjava/build.gradle | 1 + grails-async/rxjava2/build.gradle | 1 + grails-async/rxjava3/build.gradle | 1 + grails-bootstrap/build.gradle | 1 + grails-cache/build.gradle | 1 + grails-codecs-core/build.gradle | 1 + grails-codecs/build.gradle | 1 + grails-common/build.gradle | 1 + grails-console/build.gradle | 1 + grails-controllers/build.gradle | 1 + grails-converters/build.gradle | 1 + grails-core/build.gradle | 1 + .../boot-plugin/build.gradle | 1 + grails-data-hibernate5/core/build.gradle | 1 + .../dbmigration/build.gradle | 1 + .../grails-plugin/build.gradle | 1 + grails-data-mongodb/boot-plugin/build.gradle | 1 + grails-data-mongodb/bson/build.gradle | 1 + grails-data-mongodb/core/build.gradle | 1 + grails-data-mongodb/ext/build.gradle | 1 + .../grails-plugin/build.gradle | 1 + .../gson-templates/build.gradle | 1 + grails-data-simple/build.gradle | 1 + grails-databinding-core/build.gradle | 1 + grails-databinding/build.gradle | 1 + grails-datamapping-async/build.gradle | 1 + grails-datamapping-core/build.gradle | 1 + grails-datamapping-rx/build.gradle | 1 + grails-datamapping-support/build.gradle | 1 + grails-datamapping-tck/build.gradle | 1 + grails-datamapping-validation/build.gradle | 1 + grails-datasource/build.gradle | 1 + grails-datastore-async/build.gradle | 1 + grails-datastore-core/build.gradle | 1 + grails-datastore-web/build.gradle | 1 + grails-domain-class/build.gradle | 1 + grails-encoder/build.gradle | 1 + grails-events/compat/build.gradle | 1 + grails-events/core/build.gradle | 1 + grails-events/gpars/build.gradle | 1 + grails-events/plugin/build.gradle | 1 + grails-events/rxjava/build.gradle | 1 + grails-events/rxjava2/build.gradle | 1 + grails-events/rxjava3/build.gradle | 1 + grails-events/spring/build.gradle | 1 + grails-events/transforms/build.gradle | 1 + grails-fields/build.gradle | 1 + grails-geb/build.gradle | 1 + grails-gradle/common/build.gradle | 1 + grails-gradle/docs-core/build.gradle | 1 + grails-gradle/gradle/code-style-config.gradle | 67 ++++++++++++++ grails-gradle/model/build.gradle | 1 + grails-gradle/plugins/build.gradle | 1 + grails-gradle/tasks/build.gradle | 1 + grails-gsp/core/build.gradle | 1 + grails-gsp/grails-layout/build.gradle | 1 + grails-gsp/grails-sitemesh3/build.gradle | 1 + grails-gsp/grails-taglib/build.gradle | 1 + grails-gsp/grails-web-gsp-taglib/build.gradle | 1 + grails-gsp/grails-web-gsp/build.gradle | 1 + grails-gsp/grails-web-jsp/build.gradle | 1 + grails-gsp/grails-web-taglib/build.gradle | 1 + grails-gsp/plugin/build.gradle | 1 + grails-i18n/build.gradle | 1 + grails-interceptors/build.gradle | 1 + grails-logging/build.gradle | 1 + grails-mimetypes/build.gradle | 1 + grails-rest-transforms/build.gradle | 1 + grails-scaffolding/build.gradle | 1 + grails-services/build.gradle | 1 + grails-shell-cli/build.gradle | 1 + grails-spring/build.gradle | 1 + grails-test-core/build.gradle | 1 + grails-test-suite-base/build.gradle | 1 + grails-testing-support-core/build.gradle | 1 + .../build.gradle | 1 + grails-testing-support-mongodb/build.gradle | 1 + .../build.gradle | 1 + grails-testing-support-web/build.gradle | 1 + grails-url-mappings/build.gradle | 1 + grails-validation/build.gradle | 1 + grails-views-core/build.gradle | 1 + grails-views-gson/build.gradle | 1 + grails-views-markup/build.gradle | 1 + grails-web-boot/build.gradle | 1 + grails-web-common/build.gradle | 1 + grails-web-core/build.gradle | 1 + grails-web-databinding/build.gradle | 1 + grails-web-mvc/build.gradle | 1 + grails-web-url-mappings/build.gradle | 1 + grails-wrapper/build.gradle | 1 + 99 files changed, 427 insertions(+) create mode 100644 etc/config/checkstyle/checkstyle-suppressions.xml create mode 100644 etc/config/checkstyle/checkstyle.xml create mode 100644 etc/config/codenarc/codenarc.groovy create mode 100644 gradle/code-style-config.gradle create mode 100644 grails-gradle/gradle/code-style-config.gradle diff --git a/etc/config/checkstyle/checkstyle-suppressions.xml b/etc/config/checkstyle/checkstyle-suppressions.xml new file mode 100644 index 00000000000..58ee65cc408 --- /dev/null +++ b/etc/config/checkstyle/checkstyle-suppressions.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/etc/config/checkstyle/checkstyle.xml b/etc/config/checkstyle/checkstyle.xml new file mode 100644 index 00000000000..e6034dc6c77 --- /dev/null +++ b/etc/config/checkstyle/checkstyle.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/etc/config/codenarc/codenarc.groovy b/etc/config/codenarc/codenarc.groovy new file mode 100644 index 00000000000..80880ac32d5 --- /dev/null +++ b/etc/config/codenarc/codenarc.groovy @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +ruleset { + + description 'A Codenarc ruleset for the Grails codebase' + + BracesForClass + ClassStartsWithBlankLine { + ignoreInnerClasses = true + } + ClosureStatementOnOpeningLineOfMultipleLineClosure + ConsecutiveBlankLines + FileEndsWithoutNewline + NoTabCharacter + DuplicateImport + ImportFromSamePackage + Indentation + MisorderedStaticImports { + comesBefore = false // static imports should come last + } + MissingBlankLineAfterImports + MissingBlankLineAfterPackage + MissingBlankLineBeforeAnnotatedField + NoWildcardImports + SpaceAfterCatch + SpaceAfterClosingBrace + SpaceAfterComma + SpaceAfterFor + SpaceAfterIf + SpaceAfterMethodCallName + SpaceAfterMethodDeclarationName + SpaceAfterNotOperator + SpaceAfterOpeningBrace { + ignoreEmptyBlock = true + } + SpaceAfterSemicolon + SpaceAfterSwitch + SpaceAfterWhile + SpaceAroundClosureArrow + SpaceAroundMapEntryColon { + characterAfterColonRegex = ' ' + } + SpaceAroundOperator { + ignoreParameterDefaultValueAssignments = false + } + SpaceBeforeClosingBrace { + ignoreEmptyBlock = true + } + SpaceBeforeOpeningBrace + SpaceInsideParentheses + UnnecessaryConstructor + UnnecessaryDotClass + UnnecessaryGroovyImport + UnnecessaryGString + UnnecessaryOverridingMethod + UnnecessaryPublicModifier + UnnecessarySafeNavigationOperator + UnnecessarySemicolon + UnusedImport +} diff --git a/gradle.properties b/gradle.properties index 4d62e8af262..08f047e8525 100644 --- a/gradle.properties +++ b/gradle.properties @@ -62,6 +62,10 @@ micronautVersion=4.6.5 micronautSerdeJacksonVersion=2.11.0 grailsSpringSecurityVersion=7.0.0-SNAPSHOT +# build dependencies for code quality checks +checkstyleVersion=11.0.0 +codenarcVersion=3.6.0-groovy-4.0 + # This prevents the Grails Gradle Plugin from unnecessarily excluding slf4j-simple in the generated POMs # https://github.com/apache/grails-gradle-plugin/issues/222 slf4jPreventExclusion=true diff --git a/gradle/code-style-config.gradle b/gradle/code-style-config.gradle new file mode 100644 index 00000000000..1c21f080c7f --- /dev/null +++ b/gradle/code-style-config.gradle @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +apply plugin: 'checkstyle' +apply plugin: 'codenarc' + +extensions.configure(CheckstyleExtension) { + // Explicit `it` is required in extension configuration + it.configDirectory = rootProject.layout.projectDirectory.dir('etc/config/checkstyle').asFile + it.maxWarnings = 0 + it.showViolations = true + it.ignoreFailures = false + it.toolVersion = checkstyleVersion +} + +extensions.configure(CodeNarcExtension) { + // Explicit `it` is required in extension configuration + it.configFile = rootProject.layout.projectDirectory.file('etc/config/codenarc/codenarc.groovy').asFile + it.toolVersion = codenarcVersion +} + +// Do not run Code Style checks if the property 'skipCodeStyle' is defined +if (findProperty('skipCodeStyle')) { + tasks.withType(Checkstyle).configureEach { enabled = false } + tasks.withType(CodeNarc).configureEach { enabled = false } +} + +tasks.register('codeStyle') { + group = 'verification' + description = 'Runs code style checks' + dependsOn(tasks.withType(Checkstyle)) + dependsOn(tasks.withType(CodeNarc)) +} + +tasks.named('checkstyleMain') { + group = 'verification' +} + +tasks.named('checkstyleTest') { + group = 'verification' + enabled = false // Do not check test sources at this time +} + +tasks.named('codenarcMain') { + group = 'verification' +} + +tasks.named('codenarcTest') { + group = 'verification' + enabled = false // Do not check test sources at this time +} + +gradle.taskGraph.whenReady { + if (tasks.findByName('codenarcIntegrationTest')) { + tasks.named('codenarcIntegrationTest') { + group = 'verification' + enabled = false // Do not check test sources at this time + } + } +} diff --git a/grails-async/core/build.gradle b/grails-async/core/build.gradle index 6a4f2b96791..a9f35631a1e 100644 --- a/grails-async/core/build.gradle +++ b/grails-async/core/build.gradle @@ -47,6 +47,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-async/gpars/build.gradle b/grails-async/gpars/build.gradle index ab599f3da30..daeb08a9222 100644 --- a/grails-async/gpars/build.gradle +++ b/grails-async/gpars/build.gradle @@ -47,6 +47,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-async/plugin/build.gradle b/grails-async/plugin/build.gradle index f8ff94c033a..f4078b32cfe 100644 --- a/grails-async/plugin/build.gradle +++ b/grails-async/plugin/build.gradle @@ -57,6 +57,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-async/rxjava/build.gradle b/grails-async/rxjava/build.gradle index b15111a3952..00a583c67fb 100644 --- a/grails-async/rxjava/build.gradle +++ b/grails-async/rxjava/build.gradle @@ -43,6 +43,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-async/rxjava2/build.gradle b/grails-async/rxjava2/build.gradle index 41732df8d9b..9f1cff3f12a 100644 --- a/grails-async/rxjava2/build.gradle +++ b/grails-async/rxjava2/build.gradle @@ -43,6 +43,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-async/rxjava3/build.gradle b/grails-async/rxjava3/build.gradle index 3c62cff0dd9..2cd8942622e 100644 --- a/grails-async/rxjava3/build.gradle +++ b/grails-async/rxjava3/build.gradle @@ -43,6 +43,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-bootstrap/build.gradle b/grails-bootstrap/build.gradle index b42df191c80..15017ca16b2 100644 --- a/grails-bootstrap/build.gradle +++ b/grails-bootstrap/build.gradle @@ -81,6 +81,7 @@ processResources { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-cache/build.gradle b/grails-cache/build.gradle index 2575e34f182..89e5a3e35e3 100644 --- a/grails-cache/build.gradle +++ b/grails-cache/build.gradle @@ -60,6 +60,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-codecs-core/build.gradle b/grails-codecs-core/build.gradle index 4fa52b2bb49..662060b41dd 100644 --- a/grails-codecs-core/build.gradle +++ b/grails-codecs-core/build.gradle @@ -54,6 +54,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-codecs/build.gradle b/grails-codecs/build.gradle index a109b376add..26eab116b06 100644 --- a/grails-codecs/build.gradle +++ b/grails-codecs/build.gradle @@ -64,6 +64,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-common/build.gradle b/grails-common/build.gradle index 4fea00e449b..e30f95621aa 100644 --- a/grails-common/build.gradle +++ b/grails-common/build.gradle @@ -55,6 +55,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-console/build.gradle b/grails-console/build.gradle index e2d0cc792da..a83ac41a461 100644 --- a/grails-console/build.gradle +++ b/grails-console/build.gradle @@ -67,6 +67,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') } \ No newline at end of file diff --git a/grails-controllers/build.gradle b/grails-controllers/build.gradle index 457a8f9748b..3d88b08a4ef 100644 --- a/grails-controllers/build.gradle +++ b/grails-controllers/build.gradle @@ -74,6 +74,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-converters/build.gradle b/grails-converters/build.gradle index c9a0d65d310..182b6d6ed7f 100644 --- a/grails-converters/build.gradle +++ b/grails-converters/build.gradle @@ -73,6 +73,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-core/build.gradle b/grails-core/build.gradle index e1d525c1790..79a030fc6e1 100644 --- a/grails-core/build.gradle +++ b/grails-core/build.gradle @@ -92,6 +92,7 @@ tasks.named('processResources', ProcessResources).configure { ProcessResources i apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-data-hibernate5/boot-plugin/build.gradle b/grails-data-hibernate5/boot-plugin/build.gradle index 5a054dca254..52e6497737d 100644 --- a/grails-data-hibernate5/boot-plugin/build.gradle +++ b/grails-data-hibernate5/boot-plugin/build.gradle @@ -59,6 +59,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/hibernate5-test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-data-hibernate5/core/build.gradle b/grails-data-hibernate5/core/build.gradle index 33fb9277d4c..db4d955201b 100644 --- a/grails-data-hibernate5/core/build.gradle +++ b/grails-data-hibernate5/core/build.gradle @@ -89,6 +89,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/hibernate5-test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/grails-data-tck-config.gradle') diff --git a/grails-data-hibernate5/dbmigration/build.gradle b/grails-data-hibernate5/dbmigration/build.gradle index 9fd197a1fd0..790cc41c23a 100644 --- a/grails-data-hibernate5/dbmigration/build.gradle +++ b/grails-data-hibernate5/dbmigration/build.gradle @@ -106,6 +106,7 @@ tasks.withType(Test).configureEach { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/hibernate5-test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-data-hibernate5/grails-plugin/build.gradle b/grails-data-hibernate5/grails-plugin/build.gradle index d9a30d22ae2..892d01db72f 100644 --- a/grails-data-hibernate5/grails-plugin/build.gradle +++ b/grails-data-hibernate5/grails-plugin/build.gradle @@ -85,6 +85,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/hibernate5-test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-data-mongodb/boot-plugin/build.gradle b/grails-data-mongodb/boot-plugin/build.gradle index 11b97e45c48..84074347a87 100644 --- a/grails-data-mongodb/boot-plugin/build.gradle +++ b/grails-data-mongodb/boot-plugin/build.gradle @@ -104,6 +104,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/mongodb-test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-data-mongodb/bson/build.gradle b/grails-data-mongodb/bson/build.gradle index 646d1fe3186..dda142f5671 100644 --- a/grails-data-mongodb/bson/build.gradle +++ b/grails-data-mongodb/bson/build.gradle @@ -98,6 +98,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/mongodb-test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-data-mongodb/core/build.gradle b/grails-data-mongodb/core/build.gradle index f7ac7978c80..6c89d156661 100644 --- a/grails-data-mongodb/core/build.gradle +++ b/grails-data-mongodb/core/build.gradle @@ -151,6 +151,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/mongodb-forked-test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/grails-data-tck-config.gradle') diff --git a/grails-data-mongodb/ext/build.gradle b/grails-data-mongodb/ext/build.gradle index 86bcaa1539a..e9ba4cd7626 100644 --- a/grails-data-mongodb/ext/build.gradle +++ b/grails-data-mongodb/ext/build.gradle @@ -87,6 +87,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/mongodb-test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-data-mongodb/grails-plugin/build.gradle b/grails-data-mongodb/grails-plugin/build.gradle index db68de1d369..4d633438027 100644 --- a/grails-data-mongodb/grails-plugin/build.gradle +++ b/grails-data-mongodb/grails-plugin/build.gradle @@ -129,6 +129,7 @@ tasks.named('groovydoc') { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/mongodb-test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-data-mongodb/gson-templates/build.gradle b/grails-data-mongodb/gson-templates/build.gradle index f276cd8ca40..d821432f531 100644 --- a/grails-data-mongodb/gson-templates/build.gradle +++ b/grails-data-mongodb/gson-templates/build.gradle @@ -69,6 +69,7 @@ tasks.named('classes').configure { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/mongodb-test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-data-simple/build.gradle b/grails-data-simple/build.gradle index a603bcff0f6..df43a6fef72 100644 --- a/grails-data-simple/build.gradle +++ b/grails-data-simple/build.gradle @@ -93,6 +93,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-databinding-core/build.gradle b/grails-databinding-core/build.gradle index 4efb0bfcfb7..28a0551fbb3 100644 --- a/grails-databinding-core/build.gradle +++ b/grails-databinding-core/build.gradle @@ -57,6 +57,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-databinding/build.gradle b/grails-databinding/build.gradle index 49e1646bf26..6261cef74a6 100644 --- a/grails-databinding/build.gradle +++ b/grails-databinding/build.gradle @@ -70,6 +70,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-datamapping-async/build.gradle b/grails-datamapping-async/build.gradle index 81458a5169e..9e707b50bbb 100644 --- a/grails-datamapping-async/build.gradle +++ b/grails-datamapping-async/build.gradle @@ -74,6 +74,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-datamapping-core/build.gradle b/grails-datamapping-core/build.gradle index 52ef07e4b8c..8295b2e69e6 100644 --- a/grails-datamapping-core/build.gradle +++ b/grails-datamapping-core/build.gradle @@ -118,6 +118,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-datamapping-rx/build.gradle b/grails-datamapping-rx/build.gradle index 12ec2fef9f3..fcaf4b5b6d9 100644 --- a/grails-datamapping-rx/build.gradle +++ b/grails-datamapping-rx/build.gradle @@ -64,6 +64,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-datamapping-support/build.gradle b/grails-datamapping-support/build.gradle index 01c740d8a22..b4cec37d891 100644 --- a/grails-datamapping-support/build.gradle +++ b/grails-datamapping-support/build.gradle @@ -119,6 +119,7 @@ tasks.withType(Jar).configureEach { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-datamapping-tck/build.gradle b/grails-datamapping-tck/build.gradle index e89fc3067d8..b6ace68d757 100644 --- a/grails-datamapping-tck/build.gradle +++ b/grails-datamapping-tck/build.gradle @@ -114,6 +114,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') // do NOT do test configuration here, this is a TCK module diff --git a/grails-datamapping-validation/build.gradle b/grails-datamapping-validation/build.gradle index 544cf7dc745..cabf5e7304f 100644 --- a/grails-datamapping-validation/build.gradle +++ b/grails-datamapping-validation/build.gradle @@ -86,6 +86,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-datasource/build.gradle b/grails-datasource/build.gradle index c5fb199e6ac..969a788109d 100644 --- a/grails-datasource/build.gradle +++ b/grails-datasource/build.gradle @@ -71,6 +71,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-datastore-async/build.gradle b/grails-datastore-async/build.gradle index 1b1838e4ae0..6ad2d35cb47 100644 --- a/grails-datastore-async/build.gradle +++ b/grails-datastore-async/build.gradle @@ -61,6 +61,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-datastore-core/build.gradle b/grails-datastore-core/build.gradle index 7a70a7915e8..87a2d913455 100644 --- a/grails-datastore-core/build.gradle +++ b/grails-datastore-core/build.gradle @@ -98,6 +98,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-datastore-web/build.gradle b/grails-datastore-web/build.gradle index a177a1fb389..995de819b8a 100644 --- a/grails-datastore-web/build.gradle +++ b/grails-datastore-web/build.gradle @@ -88,6 +88,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-domain-class/build.gradle b/grails-domain-class/build.gradle index c53f0d33ddb..a329240c962 100644 --- a/grails-domain-class/build.gradle +++ b/grails-domain-class/build.gradle @@ -74,6 +74,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-encoder/build.gradle b/grails-encoder/build.gradle index 73504efd32d..90ad28fbcc4 100644 --- a/grails-encoder/build.gradle +++ b/grails-encoder/build.gradle @@ -58,6 +58,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-events/compat/build.gradle b/grails-events/compat/build.gradle index 892c32cd608..d9385c97dcd 100644 --- a/grails-events/compat/build.gradle +++ b/grails-events/compat/build.gradle @@ -38,6 +38,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') } \ No newline at end of file diff --git a/grails-events/core/build.gradle b/grails-events/core/build.gradle index 38d91983584..6e72243d77f 100644 --- a/grails-events/core/build.gradle +++ b/grails-events/core/build.gradle @@ -44,6 +44,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-events/gpars/build.gradle b/grails-events/gpars/build.gradle index c94fee9aa65..6db7a2796be 100644 --- a/grails-events/gpars/build.gradle +++ b/grails-events/gpars/build.gradle @@ -45,6 +45,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-events/plugin/build.gradle b/grails-events/plugin/build.gradle index 1530d737686..cdd78d8d50e 100644 --- a/grails-events/plugin/build.gradle +++ b/grails-events/plugin/build.gradle @@ -51,6 +51,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-events/rxjava/build.gradle b/grails-events/rxjava/build.gradle index ebb69b7437e..f5421639f95 100644 --- a/grails-events/rxjava/build.gradle +++ b/grails-events/rxjava/build.gradle @@ -48,6 +48,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-events/rxjava2/build.gradle b/grails-events/rxjava2/build.gradle index 0697285af6b..da07f0bad5b 100644 --- a/grails-events/rxjava2/build.gradle +++ b/grails-events/rxjava2/build.gradle @@ -44,6 +44,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-events/rxjava3/build.gradle b/grails-events/rxjava3/build.gradle index 040c9bb1629..836342bd77f 100644 --- a/grails-events/rxjava3/build.gradle +++ b/grails-events/rxjava3/build.gradle @@ -44,6 +44,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-events/spring/build.gradle b/grails-events/spring/build.gradle index abdba357213..94bcb756993 100644 --- a/grails-events/spring/build.gradle +++ b/grails-events/spring/build.gradle @@ -44,6 +44,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-events/transforms/build.gradle b/grails-events/transforms/build.gradle index 6a43d17adf3..8312249c118 100644 --- a/grails-events/transforms/build.gradle +++ b/grails-events/transforms/build.gradle @@ -61,6 +61,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-fields/build.gradle b/grails-fields/build.gradle index 74b4fd64e52..98bd1f6af41 100644 --- a/grails-fields/build.gradle +++ b/grails-fields/build.gradle @@ -60,6 +60,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-geb/build.gradle b/grails-geb/build.gradle index 51758839afa..52428c07ddd 100644 --- a/grails-geb/build.gradle +++ b/grails-geb/build.gradle @@ -65,6 +65,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-gradle/common/build.gradle b/grails-gradle/common/build.gradle index ee2bb38dad2..b6cb6281e4e 100644 --- a/grails-gradle/common/build.gradle +++ b/grails-gradle/common/build.gradle @@ -50,6 +50,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-gradle/docs-core/build.gradle b/grails-gradle/docs-core/build.gradle index 90de41f996e..92d81c72abd 100644 --- a/grails-gradle/docs-core/build.gradle +++ b/grails-gradle/docs-core/build.gradle @@ -87,6 +87,7 @@ jar.dependsOn docFilesJar apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') diff --git a/grails-gradle/gradle/code-style-config.gradle b/grails-gradle/gradle/code-style-config.gradle new file mode 100644 index 00000000000..6f14ee9d555 --- /dev/null +++ b/grails-gradle/gradle/code-style-config.gradle @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +apply plugin: 'checkstyle' +apply plugin: 'codenarc' + +extensions.configure(CheckstyleExtension) { + // Explicit `it` is required in extension configuration + it.configDirectory = rootProject.layout.projectDirectory.dir('../etc/config/checkstyle').asFile + it.maxWarnings = 0 + it.showViolations = true + it.ignoreFailures = false + it.toolVersion = checkstyleVersion +} + +extensions.configure(CodeNarcExtension) { + // Explicit `it` is required in extension configuration + it.configFile = rootProject.layout.projectDirectory.file('../etc/config/codenarc/codenarc.groovy').asFile + it.toolVersion = codenarcVersion +} + +// Do not run Code Style checks if the property 'skipCodeStyle' is defined +if (findProperty('skipCodeStyle')) { + tasks.withType(Checkstyle).configureEach { enabled = false } + tasks.withType(CodeNarc).configureEach { enabled = false } +} + +tasks.register('codeStyle') { + group = 'verification' + description = 'Runs code style checks' + dependsOn(tasks.withType(Checkstyle)) + dependsOn(tasks.withType(CodeNarc)) +} + +tasks.named('checkstyleMain') { + group = 'verification' +} + +tasks.named('checkstyleTest') { + group = 'verification' + enabled = false // Do not check test sources at this time +} + +tasks.named('codenarcMain') { + group = 'verification' +} + +tasks.named('codenarcTest') { + group = 'verification' + enabled = false // Do not check test sources at this time +} \ No newline at end of file diff --git a/grails-gradle/model/build.gradle b/grails-gradle/model/build.gradle index 3651770c234..5ee6d02e96f 100644 --- a/grails-gradle/model/build.gradle +++ b/grails-gradle/model/build.gradle @@ -76,6 +76,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') diff --git a/grails-gradle/plugins/build.gradle b/grails-gradle/plugins/build.gradle index db070c9c796..d053d33740b 100644 --- a/grails-gradle/plugins/build.gradle +++ b/grails-gradle/plugins/build.gradle @@ -121,6 +121,7 @@ tasks.withType(Copy) { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') } diff --git a/grails-gradle/tasks/build.gradle b/grails-gradle/tasks/build.gradle index 61aaad572c4..8e20aeb902b 100644 --- a/grails-gradle/tasks/build.gradle +++ b/grails-gradle/tasks/build.gradle @@ -48,6 +48,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') diff --git a/grails-gsp/core/build.gradle b/grails-gsp/core/build.gradle index 30362e0b1fd..07b4d5a5f15 100644 --- a/grails-gsp/core/build.gradle +++ b/grails-gsp/core/build.gradle @@ -90,6 +90,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-gsp/grails-layout/build.gradle b/grails-gsp/grails-layout/build.gradle index df50bddb78e..0b2442e94d9 100644 --- a/grails-gsp/grails-layout/build.gradle +++ b/grails-gsp/grails-layout/build.gradle @@ -61,6 +61,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-gsp/grails-sitemesh3/build.gradle b/grails-gsp/grails-sitemesh3/build.gradle index b78dc048c1a..5453a52427f 100644 --- a/grails-gsp/grails-sitemesh3/build.gradle +++ b/grails-gsp/grails-sitemesh3/build.gradle @@ -82,6 +82,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-gsp/grails-taglib/build.gradle b/grails-gsp/grails-taglib/build.gradle index fdb81e6d1cf..ca0d47a9aa5 100644 --- a/grails-gsp/grails-taglib/build.gradle +++ b/grails-gsp/grails-taglib/build.gradle @@ -81,6 +81,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-gsp/grails-web-gsp-taglib/build.gradle b/grails-gsp/grails-web-gsp-taglib/build.gradle index 6c2deb3629b..a566d7346bf 100644 --- a/grails-gsp/grails-web-gsp-taglib/build.gradle +++ b/grails-gsp/grails-web-gsp-taglib/build.gradle @@ -60,6 +60,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-gsp/grails-web-gsp/build.gradle b/grails-gsp/grails-web-gsp/build.gradle index ffc612da768..5fdf1575030 100644 --- a/grails-gsp/grails-web-gsp/build.gradle +++ b/grails-gsp/grails-web-gsp/build.gradle @@ -128,6 +128,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-gsp/grails-web-jsp/build.gradle b/grails-gsp/grails-web-jsp/build.gradle index 63dbc6b172b..d2ac2fcedfc 100644 --- a/grails-gsp/grails-web-jsp/build.gradle +++ b/grails-gsp/grails-web-jsp/build.gradle @@ -109,6 +109,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-gsp/grails-web-taglib/build.gradle b/grails-gsp/grails-web-taglib/build.gradle index ad099e75528..3e646f238ae 100644 --- a/grails-gsp/grails-web-taglib/build.gradle +++ b/grails-gsp/grails-web-taglib/build.gradle @@ -113,6 +113,7 @@ sourceSets { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-gsp/plugin/build.gradle b/grails-gsp/plugin/build.gradle index 7963f65bd67..5b2320d89ed 100644 --- a/grails-gsp/plugin/build.gradle +++ b/grails-gsp/plugin/build.gradle @@ -181,6 +181,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-i18n/build.gradle b/grails-i18n/build.gradle index a07554dfbbc..fae78864ec1 100644 --- a/grails-i18n/build.gradle +++ b/grails-i18n/build.gradle @@ -64,6 +64,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') } \ No newline at end of file diff --git a/grails-interceptors/build.gradle b/grails-interceptors/build.gradle index 9e74dd99d2e..178cc862cbc 100644 --- a/grails-interceptors/build.gradle +++ b/grails-interceptors/build.gradle @@ -63,6 +63,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-logging/build.gradle b/grails-logging/build.gradle index 075f390df5b..beef4f22685 100644 --- a/grails-logging/build.gradle +++ b/grails-logging/build.gradle @@ -54,6 +54,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-mimetypes/build.gradle b/grails-mimetypes/build.gradle index 127f78d775c..4fb2f63bec4 100644 --- a/grails-mimetypes/build.gradle +++ b/grails-mimetypes/build.gradle @@ -62,6 +62,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-rest-transforms/build.gradle b/grails-rest-transforms/build.gradle index fa3402b68ce..40e93a75632 100644 --- a/grails-rest-transforms/build.gradle +++ b/grails-rest-transforms/build.gradle @@ -74,6 +74,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-scaffolding/build.gradle b/grails-scaffolding/build.gradle index 91f90085426..c21a4e5c044 100644 --- a/grails-scaffolding/build.gradle +++ b/grails-scaffolding/build.gradle @@ -44,6 +44,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-services/build.gradle b/grails-services/build.gradle index 47b9df936c1..b4da45e80d8 100644 --- a/grails-services/build.gradle +++ b/grails-services/build.gradle @@ -65,6 +65,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') } \ No newline at end of file diff --git a/grails-shell-cli/build.gradle b/grails-shell-cli/build.gradle index 407e326c0c2..ee789751961 100644 --- a/grails-shell-cli/build.gradle +++ b/grails-shell-cli/build.gradle @@ -124,6 +124,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-spring/build.gradle b/grails-spring/build.gradle index da9ddbfcf0e..ef54cccd23e 100644 --- a/grails-spring/build.gradle +++ b/grails-spring/build.gradle @@ -58,6 +58,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') } \ No newline at end of file diff --git a/grails-test-core/build.gradle b/grails-test-core/build.gradle index 14b625c5e31..d6985226174 100644 --- a/grails-test-core/build.gradle +++ b/grails-test-core/build.gradle @@ -85,6 +85,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') } \ No newline at end of file diff --git a/grails-test-suite-base/build.gradle b/grails-test-suite-base/build.gradle index e810fd5457a..41b68acd404 100644 --- a/grails-test-suite-base/build.gradle +++ b/grails-test-suite-base/build.gradle @@ -75,4 +75,5 @@ tasks.withType(Groovydoc).configureEach { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') } diff --git a/grails-testing-support-core/build.gradle b/grails-testing-support-core/build.gradle index e5089181875..4a816f0f60e 100644 --- a/grails-testing-support-core/build.gradle +++ b/grails-testing-support-core/build.gradle @@ -75,6 +75,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-testing-support-datamapping/build.gradle b/grails-testing-support-datamapping/build.gradle index cd25137390c..eed573a2866 100755 --- a/grails-testing-support-datamapping/build.gradle +++ b/grails-testing-support-datamapping/build.gradle @@ -136,6 +136,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-testing-support-mongodb/build.gradle b/grails-testing-support-mongodb/build.gradle index ef7c10c8f7e..7f480cebb22 100644 --- a/grails-testing-support-mongodb/build.gradle +++ b/grails-testing-support-mongodb/build.gradle @@ -44,6 +44,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-testing-support-views-gson/build.gradle b/grails-testing-support-views-gson/build.gradle index 1b9b9e9feca..b8f42edf2e0 100644 --- a/grails-testing-support-views-gson/build.gradle +++ b/grails-testing-support-views-gson/build.gradle @@ -50,6 +50,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') diff --git a/grails-testing-support-web/build.gradle b/grails-testing-support-web/build.gradle index 2f77702a85b..e5f8bc99381 100755 --- a/grails-testing-support-web/build.gradle +++ b/grails-testing-support-web/build.gradle @@ -50,6 +50,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-url-mappings/build.gradle b/grails-url-mappings/build.gradle index 7b3f7144a80..2d917cee1f8 100644 --- a/grails-url-mappings/build.gradle +++ b/grails-url-mappings/build.gradle @@ -65,6 +65,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') } \ No newline at end of file diff --git a/grails-validation/build.gradle b/grails-validation/build.gradle index d3a7c7f2f2d..26e5bb34347 100644 --- a/grails-validation/build.gradle +++ b/grails-validation/build.gradle @@ -63,6 +63,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-views-core/build.gradle b/grails-views-core/build.gradle index b97851c866f..a54475a5f9b 100644 --- a/grails-views-core/build.gradle +++ b/grails-views-core/build.gradle @@ -53,6 +53,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-views-gson/build.gradle b/grails-views-gson/build.gradle index 3347c259d14..c7fbbdcbe0c 100644 --- a/grails-views-gson/build.gradle +++ b/grails-views-gson/build.gradle @@ -65,6 +65,7 @@ tasks.named('sourcesJar', Jar).configure { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-views-markup/build.gradle b/grails-views-markup/build.gradle index c74317e8a5f..4530280e2e6 100644 --- a/grails-views-markup/build.gradle +++ b/grails-views-markup/build.gradle @@ -54,6 +54,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-web-boot/build.gradle b/grails-web-boot/build.gradle index c2fe2aaf837..adaa00d995c 100644 --- a/grails-web-boot/build.gradle +++ b/grails-web-boot/build.gradle @@ -68,6 +68,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-web-common/build.gradle b/grails-web-common/build.gradle index 703eaac6ce3..189b9677a6a 100644 --- a/grails-web-common/build.gradle +++ b/grails-web-common/build.gradle @@ -78,6 +78,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-web-core/build.gradle b/grails-web-core/build.gradle index 027588c5139..a434004036d 100644 --- a/grails-web-core/build.gradle +++ b/grails-web-core/build.gradle @@ -72,6 +72,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-web-databinding/build.gradle b/grails-web-databinding/build.gradle index 1d6e8d4e7ff..73f47df1395 100644 --- a/grails-web-databinding/build.gradle +++ b/grails-web-databinding/build.gradle @@ -71,6 +71,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-web-mvc/build.gradle b/grails-web-mvc/build.gradle index 6f9bad0ba5c..0f4923c7649 100644 --- a/grails-web-mvc/build.gradle +++ b/grails-web-mvc/build.gradle @@ -63,6 +63,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-web-url-mappings/build.gradle b/grails-web-url-mappings/build.gradle index f9b3bf36ef1..7e67bdb7489 100644 --- a/grails-web-url-mappings/build.gradle +++ b/grails-web-url-mappings/build.gradle @@ -76,6 +76,7 @@ dependencies { apply { // java-configuration must be applied first since tasks are now lazy registered from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') diff --git a/grails-wrapper/build.gradle b/grails-wrapper/build.gradle index 62c4cf83ead..f7f32c2fe94 100644 --- a/grails-wrapper/build.gradle +++ b/grails-wrapper/build.gradle @@ -50,6 +50,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') From 1f4739e0d69b85d4284a828e2d6dc4d60e9c8873 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Tue, 26 Aug 2025 14:07:22 +0200 Subject: [PATCH 03/22] ci: run style checks in dedicated workflow Style/formatting checks are executed only by the new workflow, keeping the main pipelines focused on build/test. --- .github/workflows/codestyle.yml | 49 +++++++++++++++++++++ .github/workflows/gradle.yml | 45 ++++++++++++++----- .github/workflows/groovy-joint-workflow.yml | 1 + 3 files changed, 83 insertions(+), 12 deletions(-) create mode 100644 .github/workflows/codestyle.yml diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml new file mode 100644 index 00000000000..2f555089812 --- /dev/null +++ b/.github/workflows/codestyle.yml @@ -0,0 +1,49 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Code Style +on: + push: + branches: + - '[0-9]+.[0-9]+.x' + pull_request: + workflow_dispatch: +# queue jobs and only allow 1 run per branch due to the likelihood of hitting GitHub resource limits +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: false +jobs: + codestyle: + name: "Check Code Style" + runs-on: ubuntu-24.04 + steps: + - name: "🌐 Output Agent IP" # in the event RAO blocks this agent, this can be used to debug it + run: curl -s https://api.ipify.org + - name: "📥 Checkout repository" + uses: actions/checkout@v4 + - name: "☕️ Setup JDK" + uses: actions/setup-java@v4 + with: + distribution: liberica + java-version: 17 + - name: "🐘 Setup Gradle" + uses: gradle/actions/setup-gradle@v4 + with: + develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} + - name: "🔎 Check Core Projects" + run: ./gradlew codeStyle + - name: "🔎 Check Gradle Plugin Projects" + working-directory: grails-gradle + run: ./gradlew codeStyle diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 71e68af8057..f41337fb661 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -51,14 +51,19 @@ jobs: working-directory: 'grails-gradle' run: > ./gradlew build - --continue --stacktrace -PskipTests + --continue + --stacktrace + -PskipCodeStyle + -PskipTests - name: "🔨 Build project with tests" if: ${{ !contains(github.event.head_commit.message, '[skip tests]') }} working-directory: 'grails-gradle' run: > ./gradlew build - --continue --stacktrace + --continue + --stacktrace --rerun-tasks + -PskipCodeStyle build: if: ${{ !contains(github.event.head_commit.message, '[skip tests]') }} name: 'Build Grails-Core' @@ -85,8 +90,11 @@ jobs: - name: "🔨 Build project" run: > ./gradlew build :grails-shell-cli:installDist groovydoc - --continue --stacktrace -PonlyCoreTests + --continue --rerun-tasks + --stacktrace + -PonlyCoreTests + -PskipCodeStyle buildForge: name: "Build Grails Forge" strategy: @@ -113,14 +121,19 @@ jobs: working-directory: 'grails-forge' run: > ./gradlew build - --continue --stacktrace -PskipTests + --continue + --stacktrace + -PskipCodeStyle + -PskipTests - name: "🔨 Build project with tests" if: ${{ !contains(github.event.head_commit.message, '[skip tests]') }} working-directory: 'grails-forge' run: > ./gradlew build - --continue --stacktrace + --continue --rerun-tasks + --stacktrace + -PskipCodeStyle - name: "✅ Verify combined CLI" run: | cd grails-forge @@ -162,11 +175,13 @@ jobs: - name: "🏃 Run Functional Tests" run: > ./gradlew bootJar check - --continue --stacktrace + --continue + --rerun-tasks + --stacktrace -PonlyFunctionalTests + -PskipCodeStyle -PskipHibernate5Tests -PskipMongodbTests - --rerun-tasks mongodbFunctional: if: ${{ !contains(github.event.head_commit.message, '[skip tests]') }} name: "Mongodb Functional Tests" @@ -195,10 +210,12 @@ jobs: GITHUB_MAVEN_PASSWORD: ${{ secrets.GITHUB_TOKEN }} run: > ./gradlew bootJar cleanTest check - --continue --stacktrace + --continue + --rerun-tasks + --stacktrace -PonlyMongodbTests -PmongodbContainerVersion=${{ matrix.mongodb-version }} - --rerun-tasks + -PskipCodeStyle hibernate5Functional: if: ${{ !contains(github.event.head_commit.message, '[skip tests]') }} name: "Hibernate5 Functional Tests" @@ -226,9 +243,11 @@ jobs: GITHUB_MAVEN_PASSWORD: ${{ secrets.GITHUB_TOKEN }} run: > ./gradlew bootJar cleanTest check - --continue --stacktrace - -PonlyHibernate5Tests + --continue --rerun-tasks + --stacktrace + -PonlyHibernate5Tests + -PskipCodeStyle publishGradle: if: github.repository_owner == 'apache' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') needs: [ buildGradle ] @@ -256,7 +275,9 @@ jobs: working-directory: 'grails-gradle' run: > ./gradlew publish aggregateChecksums aggregatePublishedArtifacts - -Dorg.gradle.internal.publish.checksums.insecure=true --no-build-cache --rerun-tasks + --no-build-cache + --rerun-tasks + -Dorg.gradle.internal.publish.checksums.insecure=true - name: "📤 Upload grails-gradle checksums" uses: actions/upload-artifact@v4 with: diff --git a/.github/workflows/groovy-joint-workflow.yml b/.github/workflows/groovy-joint-workflow.yml index 8e320855dc2..cdaef7148bd 100644 --- a/.github/workflows/groovy-joint-workflow.yml +++ b/.github/workflows/groovy-joint-workflow.yml @@ -161,3 +161,4 @@ jobs: run: > ./gradlew build -x groovydoc + -PskipCodeStyle From 73e3278c279c99b6815a70954d585a6f441d235c Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Tue, 26 Aug 2025 14:27:53 +0200 Subject: [PATCH 04/22] fix: `skipCodeStyle` task condition --- gradle/code-style-config.gradle | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gradle/code-style-config.gradle b/gradle/code-style-config.gradle index 1c21f080c7f..e4fe09006fe 100644 --- a/gradle/code-style-config.gradle +++ b/gradle/code-style-config.gradle @@ -36,9 +36,11 @@ extensions.configure(CodeNarcExtension) { } // Do not run Code Style checks if the property 'skipCodeStyle' is defined -if (findProperty('skipCodeStyle')) { - tasks.withType(Checkstyle).configureEach { enabled = false } - tasks.withType(CodeNarc).configureEach { enabled = false } +tasks.withType(Checkstyle).configureEach { + onlyIf { !project.hasProperty('skipCodeStyle') } +} +tasks.withType(CodeNarc).configureEach { + onlyIf { !project.hasProperty('skipCodeStyle') } } tasks.register('codeStyle') { From ae2efa24bcbd4d75556ab790ff8a3a7f188b6eaa Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Tue, 26 Aug 2025 14:36:33 +0200 Subject: [PATCH 05/22] ci: add report upload --- .github/workflows/codestyle.yml | 36 ++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index 2f555089812..07b2cf3b9a5 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -name: Code Style +name: "Code Style" on: push: branches: @@ -25,8 +25,8 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: false jobs: - codestyle: - name: "Check Code Style" + check_core_projects: + name: "Core Projects" runs-on: ubuntu-24.04 steps: - name: "🌐 Output Agent IP" # in the event RAO blocks this agent, this can be used to debug it @@ -44,6 +44,36 @@ jobs: develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} - name: "🔎 Check Core Projects" run: ./gradlew codeStyle + - name: "📤 Upload Failure Reports" + if: failure() + uses: actions/upload-artifact@v4 + with: + name: core-reports + path: '**/build/reports/' + check_gradle_plugin_projects: + name: "Gradle Plugin Projects" + runs-on: ubuntu-24.04 + steps: + - name: "🌐 Output Agent IP" # in the event RAO blocks this agent, this can be used to debug it + run: curl -s https://api.ipify.org + - name: "📥 Checkout repository" + uses: actions/checkout@v4 + - name: "☕️ Setup JDK" + uses: actions/setup-java@v4 + with: + distribution: liberica + java-version: 17 + - name: "🐘 Setup Gradle" + uses: gradle/actions/setup-gradle@v4 + with: + develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} - name: "🔎 Check Gradle Plugin Projects" working-directory: grails-gradle run: ./gradlew codeStyle + - name: "📤 Upload Failure Reports" + if: failure() + uses: actions/upload-artifact@v4 + working-directory: grails-gradle + with: + name: gradle-plugin-reports + path: '**/build/reports/' From 6fc1cc608411d60436e0a0c6f0d83d1852e0c33e Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Tue, 26 Aug 2025 15:04:25 +0200 Subject: [PATCH 06/22] ci: set correct report directory --- .github/workflows/codestyle.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index 07b2cf3b9a5..46b14bab8a3 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -73,7 +73,6 @@ jobs: - name: "📤 Upload Failure Reports" if: failure() uses: actions/upload-artifact@v4 - working-directory: grails-gradle with: name: gradle-plugin-reports - path: '**/build/reports/' + path: 'grails-gradle/**/build/reports/' From 12a1270e94316ff5ef6623cf945c0a0d9df673ec Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Tue, 26 Aug 2025 15:08:18 +0200 Subject: [PATCH 07/22] chore: trigger code style errors To test if reports are uploaded to the workflow summary page. --- .../main/groovy/grails/async/decorator/PromiseDecorator.groovy | 2 +- .../internal/DelegateAsyncTransactionalMethodTransformer.java | 2 +- .../org/apache/grails/gradle/common/PropertyFileUtils.groovy | 2 +- .../model/src/main/groovy/grails/util/CollectionUtils.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/grails-async/core/src/main/groovy/grails/async/decorator/PromiseDecorator.groovy b/grails-async/core/src/main/groovy/grails/async/decorator/PromiseDecorator.groovy index 8a1fe270135..17a58a47728 100644 --- a/grails-async/core/src/main/groovy/grails/async/decorator/PromiseDecorator.groovy +++ b/grails-async/core/src/main/groovy/grails/async/decorator/PromiseDecorator.groovy @@ -33,5 +33,5 @@ interface PromiseDecorator { * @param c The closure to decorate * @return The decorated closure */ - Closure decorate(Closure c) + Closure decorate (Closure c) } diff --git a/grails-async/core/src/main/groovy/org/grails/async/transform/internal/DelegateAsyncTransactionalMethodTransformer.java b/grails-async/core/src/main/groovy/org/grails/async/transform/internal/DelegateAsyncTransactionalMethodTransformer.java index 63c9e104197..39b1a585a0b 100644 --- a/grails-async/core/src/main/groovy/org/grails/async/transform/internal/DelegateAsyncTransactionalMethodTransformer.java +++ b/grails-async/core/src/main/groovy/org/grails/async/transform/internal/DelegateAsyncTransactionalMethodTransformer.java @@ -29,5 +29,5 @@ * @since 2.3 */ public interface DelegateAsyncTransactionalMethodTransformer { - void transformTransactionalMethod(ClassNode classNode, ClassNode delegateClassNode, MethodNode methodNode, ListExpression promiseDecoratorLookupArguments); + void transformTransactionalMethod (ClassNode classNode, ClassNode delegateClassNode, MethodNode methodNode, ListExpression promiseDecoratorLookupArguments); } diff --git a/grails-gradle/common/src/main/groovy/org/apache/grails/gradle/common/PropertyFileUtils.groovy b/grails-gradle/common/src/main/groovy/org/apache/grails/gradle/common/PropertyFileUtils.groovy index f4490a7cd6e..62c3db2479e 100644 --- a/grails-gradle/common/src/main/groovy/org/apache/grails/gradle/common/PropertyFileUtils.groovy +++ b/grails-gradle/common/src/main/groovy/org/apache/grails/gradle/common/PropertyFileUtils.groovy @@ -33,7 +33,7 @@ final class PropertyFileUtils { // prevent instantiation } - static ByteArrayInputStream makePropertiesOutputReproducible(ByteArrayOutputStream propertyOutputStream) { + static ByteArrayInputStream makePropertiesOutputReproducible (ByteArrayOutputStream propertyOutputStream) { List lines = propertyOutputStream.toString(StandardCharsets.ISO_8859_1.name()).readLines() ByteArrayOutputStream toWrite = new ByteArrayOutputStream() diff --git a/grails-gradle/model/src/main/groovy/grails/util/CollectionUtils.java b/grails-gradle/model/src/main/groovy/grails/util/CollectionUtils.java index 7834bc2ec50..f09aa432239 100644 --- a/grails-gradle/model/src/main/groovy/grails/util/CollectionUtils.java +++ b/grails-gradle/model/src/main/groovy/grails/util/CollectionUtils.java @@ -35,7 +35,7 @@ */ public class CollectionUtils { - private CollectionUtils() { + private CollectionUtils () { // static only } From 20468a45a4d04087c67692e264c7c8bdc3afddcc Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Tue, 26 Aug 2025 15:28:55 +0200 Subject: [PATCH 08/22] ci: specify code style reports more granular --- .github/workflows/codestyle.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index 46b14bab8a3..f77a05abdbe 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -49,7 +49,9 @@ jobs: uses: actions/upload-artifact@v4 with: name: core-reports - path: '**/build/reports/' + path: | + **/build/reports/checkstyle/ + **/build/reports/codenarc/ check_gradle_plugin_projects: name: "Gradle Plugin Projects" runs-on: ubuntu-24.04 @@ -75,4 +77,6 @@ jobs: uses: actions/upload-artifact@v4 with: name: gradle-plugin-reports - path: 'grails-gradle/**/build/reports/' + path: | + grails-gradle/**/build/reports/checkstyle/ + grails-gradle/**/build/reports/codenarc/ From 37355fcd585b23cd26c1a6ff98082b7533a411fd Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Tue, 26 Aug 2025 15:38:33 +0200 Subject: [PATCH 09/22] ci: add `--continue` to get all codestyle errors --- .github/workflows/codestyle.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index f77a05abdbe..22452826d9f 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -43,7 +43,7 @@ jobs: with: develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} - name: "🔎 Check Core Projects" - run: ./gradlew codeStyle + run: ./gradlew codeStyle --continue - name: "📤 Upload Failure Reports" if: failure() uses: actions/upload-artifact@v4 @@ -71,7 +71,7 @@ jobs: develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} - name: "🔎 Check Gradle Plugin Projects" working-directory: grails-gradle - run: ./gradlew codeStyle + run: ./gradlew codeStyle --continue - name: "📤 Upload Failure Reports" if: failure() uses: actions/upload-artifact@v4 From 8238b0a83063137107ae9dbac288e727022ae825 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Tue, 26 Aug 2025 15:40:08 +0200 Subject: [PATCH 10/22] ci: set correct `skipCodeStyle` condition for `grails-gradle` --- grails-gradle/gradle/code-style-config.gradle | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/grails-gradle/gradle/code-style-config.gradle b/grails-gradle/gradle/code-style-config.gradle index 6f14ee9d555..66d6f634726 100644 --- a/grails-gradle/gradle/code-style-config.gradle +++ b/grails-gradle/gradle/code-style-config.gradle @@ -36,9 +36,11 @@ extensions.configure(CodeNarcExtension) { } // Do not run Code Style checks if the property 'skipCodeStyle' is defined -if (findProperty('skipCodeStyle')) { - tasks.withType(Checkstyle).configureEach { enabled = false } - tasks.withType(CodeNarc).configureEach { enabled = false } +tasks.withType(Checkstyle).configureEach { + onlyIf { !project.hasProperty('skipCodeStyle') } +} +tasks.withType(CodeNarc).configureEach { + onlyIf { !project.hasProperty('skipCodeStyle') } } tasks.register('codeStyle') { From 1b6d267ccf9c2a7c9ee96207a9ce3bec48f21b28 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Tue, 26 Aug 2025 16:46:40 +0200 Subject: [PATCH 11/22] ci: stop using Gradle --continue for code style checks Code style tools (Checkstyle/CodeNarc) generate reports even when clean. Fail fast on style violations instead of continuing and producing pages of reports. Developers can still use `--continue` locally when needed. --- .github/workflows/codestyle.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index 22452826d9f..f77a05abdbe 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -43,7 +43,7 @@ jobs: with: develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} - name: "🔎 Check Core Projects" - run: ./gradlew codeStyle --continue + run: ./gradlew codeStyle - name: "📤 Upload Failure Reports" if: failure() uses: actions/upload-artifact@v4 @@ -71,7 +71,7 @@ jobs: develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} - name: "🔎 Check Gradle Plugin Projects" working-directory: grails-gradle - run: ./gradlew codeStyle --continue + run: ./gradlew codeStyle - name: "📤 Upload Failure Reports" if: failure() uses: actions/upload-artifact@v4 From 5dd8fcd7daee21cf97b6bdf30a72aa55a6988e23 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Tue, 26 Aug 2025 16:47:14 +0200 Subject: [PATCH 12/22] Revert "chore: trigger code style errors" This reverts commit 12a1270e94316ff5ef6623cf945c0a0d9df673ec. --- .../main/groovy/grails/async/decorator/PromiseDecorator.groovy | 2 +- .../internal/DelegateAsyncTransactionalMethodTransformer.java | 2 +- .../org/apache/grails/gradle/common/PropertyFileUtils.groovy | 2 +- .../model/src/main/groovy/grails/util/CollectionUtils.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/grails-async/core/src/main/groovy/grails/async/decorator/PromiseDecorator.groovy b/grails-async/core/src/main/groovy/grails/async/decorator/PromiseDecorator.groovy index 17a58a47728..8a1fe270135 100644 --- a/grails-async/core/src/main/groovy/grails/async/decorator/PromiseDecorator.groovy +++ b/grails-async/core/src/main/groovy/grails/async/decorator/PromiseDecorator.groovy @@ -33,5 +33,5 @@ interface PromiseDecorator { * @param c The closure to decorate * @return The decorated closure */ - Closure decorate (Closure c) + Closure decorate(Closure c) } diff --git a/grails-async/core/src/main/groovy/org/grails/async/transform/internal/DelegateAsyncTransactionalMethodTransformer.java b/grails-async/core/src/main/groovy/org/grails/async/transform/internal/DelegateAsyncTransactionalMethodTransformer.java index 39b1a585a0b..63c9e104197 100644 --- a/grails-async/core/src/main/groovy/org/grails/async/transform/internal/DelegateAsyncTransactionalMethodTransformer.java +++ b/grails-async/core/src/main/groovy/org/grails/async/transform/internal/DelegateAsyncTransactionalMethodTransformer.java @@ -29,5 +29,5 @@ * @since 2.3 */ public interface DelegateAsyncTransactionalMethodTransformer { - void transformTransactionalMethod (ClassNode classNode, ClassNode delegateClassNode, MethodNode methodNode, ListExpression promiseDecoratorLookupArguments); + void transformTransactionalMethod(ClassNode classNode, ClassNode delegateClassNode, MethodNode methodNode, ListExpression promiseDecoratorLookupArguments); } diff --git a/grails-gradle/common/src/main/groovy/org/apache/grails/gradle/common/PropertyFileUtils.groovy b/grails-gradle/common/src/main/groovy/org/apache/grails/gradle/common/PropertyFileUtils.groovy index 62c3db2479e..f4490a7cd6e 100644 --- a/grails-gradle/common/src/main/groovy/org/apache/grails/gradle/common/PropertyFileUtils.groovy +++ b/grails-gradle/common/src/main/groovy/org/apache/grails/gradle/common/PropertyFileUtils.groovy @@ -33,7 +33,7 @@ final class PropertyFileUtils { // prevent instantiation } - static ByteArrayInputStream makePropertiesOutputReproducible (ByteArrayOutputStream propertyOutputStream) { + static ByteArrayInputStream makePropertiesOutputReproducible(ByteArrayOutputStream propertyOutputStream) { List lines = propertyOutputStream.toString(StandardCharsets.ISO_8859_1.name()).readLines() ByteArrayOutputStream toWrite = new ByteArrayOutputStream() diff --git a/grails-gradle/model/src/main/groovy/grails/util/CollectionUtils.java b/grails-gradle/model/src/main/groovy/grails/util/CollectionUtils.java index f09aa432239..7834bc2ec50 100644 --- a/grails-gradle/model/src/main/groovy/grails/util/CollectionUtils.java +++ b/grails-gradle/model/src/main/groovy/grails/util/CollectionUtils.java @@ -35,7 +35,7 @@ */ public class CollectionUtils { - private CollectionUtils () { + private CollectionUtils() { // static only } From d4214c891a6ddeffdb6992950308b1c5695c3bae Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Wed, 27 Aug 2025 09:58:48 +0200 Subject: [PATCH 13/22] style: conform to code style --- .../cli/DelegatingShellApplication.groovy | 33 ++++++++++--------- .../grails/forge/analytics/postgres/Main.java | 9 ++--- .../forge/build/gradle/GradlePlugin.java | 2 +- .../src/main/resources/pom.xml | 2 +- .../org/grails/forge/netty/Application.java | 8 ++--- 5 files changed, 29 insertions(+), 25 deletions(-) diff --git a/grails-forge/grails-cli/src/main/groovy/org/apache/grails/cli/DelegatingShellApplication.groovy b/grails-forge/grails-cli/src/main/groovy/org/apache/grails/cli/DelegatingShellApplication.groovy index fbbf77b8ddb..44a40962ade 100644 --- a/grails-forge/grails-cli/src/main/groovy/org/apache/grails/cli/DelegatingShellApplication.groovy +++ b/grails-forge/grails-cli/src/main/groovy/org/apache/grails/cli/DelegatingShellApplication.groovy @@ -1,18 +1,20 @@ /* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at * - * https://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. */ package org.apache.grails.cli @@ -25,6 +27,7 @@ import java.lang.reflect.Method */ @CompileStatic class DelegatingShellApplication { + static void main(String[] args) { // Ideally, we'd use pico cli to delegate between them and get autocomplete, but we can't easily do that because // grails-forge-cli does not implement picocli compliant commands (they can't be nested because they're beans that micronaut expects to create) @@ -53,17 +56,17 @@ class DelegatingShellApplication { String preferredShell = System.getenv('GRAILS_PREFERRED_SHELL')?.trim()?.toLowerCase() ?: 'shell' validateShellType(preferredShell) - if(!args) { + if (!args) { return new Tuple2<>(preferredShell == 'forge', args) } List listArgs = args.toList() String first = listArgs.first().trim().toLowerCase() - if(first != '-t' && first != '--type') { + if (first != '-t' && first != '--type') { return new Tuple2<>(preferredShell == 'forge', args) } - if(listArgs.size() == 1) { + if (listArgs.size() == 1) { System.err.println("Missing argument for -t, --type; possible values are 'shell' or 'forge'") System.exit(1) } diff --git a/grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/Main.java b/grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/Main.java index 44dcdc382eb..4f800133c81 100644 --- a/grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/Main.java +++ b/grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/Main.java @@ -28,12 +28,17 @@ import io.netty.util.internal.PlatformDependent; public class Main { + static { byte[] bestMacAddr = new byte[8]; PlatformDependent.threadLocalRandom().nextBytes(bestMacAddr); System.setProperty("io.netty.machineId", MacAddressUtil.formatAddress(bestMacAddr)); } + public static void main(String... args) { + Micronaut.run(args); + } + @ContextConfigurer public static class DefaultEnvironmentConfigurer implements ApplicationContextConfigurer { @Override @@ -41,8 +46,4 @@ public void configure(@NonNull ApplicationContextBuilder builder) { builder.defaultEnvironments(Environment.DEVELOPMENT); } } - - public static void main(String... args) { - Micronaut.run(args); - } } diff --git a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/GradlePlugin.java b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/GradlePlugin.java index ad35259bdc1..bd85c6ba142 100644 --- a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/GradlePlugin.java +++ b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/GradlePlugin.java @@ -179,7 +179,7 @@ public GradlePlugin.Builder id(@NonNull String id) { } @NonNull - public GradlePlugin.Builder buildImports(String ...imports) { + public GradlePlugin.Builder buildImports(String... imports) { this.buildImports.addAll(Arrays.asList(imports)); return this; } diff --git a/grails-forge/grails-forge-core/src/main/resources/pom.xml b/grails-forge/grails-forge-core/src/main/resources/pom.xml index 3dd8c70a660..0939ae9f27f 100644 --- a/grails-forge/grails-forge-core/src/main/resources/pom.xml +++ b/grails-forge/grails-forge-core/src/main/resources/pom.xml @@ -9,7 +9,7 @@ "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an diff --git a/grails-forge/grails-forge-web-netty/src/main/java/org/grails/forge/netty/Application.java b/grails-forge/grails-forge-web-netty/src/main/java/org/grails/forge/netty/Application.java index f6e4200db2e..1ebf60e3028 100644 --- a/grails-forge/grails-forge-web-netty/src/main/java/org/grails/forge/netty/Application.java +++ b/grails-forge/grails-forge-web-netty/src/main/java/org/grails/forge/netty/Application.java @@ -27,6 +27,10 @@ public class Application { + public static void main(String... args) { + Micronaut.run(args); + } + @ContextConfigurer public static class DefaultEnvironmentConfigurer implements ApplicationContextConfigurer { @Override @@ -34,8 +38,4 @@ public void configure(@NonNull ApplicationContextBuilder builder) { builder.defaultEnvironments(Environment.DEVELOPMENT); } } - - public static void main(String...args) { - Micronaut.run(args); - } } From 43dcd6fddb7608a59f98aea7ddf27875d62c62ef Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Wed, 27 Aug 2025 10:01:48 +0200 Subject: [PATCH 14/22] refactor(build): dry up `code-style-config` --- gradle/code-style-config.gradle | 13 ++----------- grails-gradle/gradle/code-style-config.gradle | 12 ++---------- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/gradle/code-style-config.gradle b/gradle/code-style-config.gradle index e4fe09006fe..9c3ad1f3c13 100644 --- a/gradle/code-style-config.gradle +++ b/gradle/code-style-config.gradle @@ -37,9 +37,11 @@ extensions.configure(CodeNarcExtension) { // Do not run Code Style checks if the property 'skipCodeStyle' is defined tasks.withType(Checkstyle).configureEach { + group = 'verification' onlyIf { !project.hasProperty('skipCodeStyle') } } tasks.withType(CodeNarc).configureEach { + group = 'verification' onlyIf { !project.hasProperty('skipCodeStyle') } } @@ -50,28 +52,17 @@ tasks.register('codeStyle') { dependsOn(tasks.withType(CodeNarc)) } -tasks.named('checkstyleMain') { - group = 'verification' -} - tasks.named('checkstyleTest') { - group = 'verification' enabled = false // Do not check test sources at this time } -tasks.named('codenarcMain') { - group = 'verification' -} - tasks.named('codenarcTest') { - group = 'verification' enabled = false // Do not check test sources at this time } gradle.taskGraph.whenReady { if (tasks.findByName('codenarcIntegrationTest')) { tasks.named('codenarcIntegrationTest') { - group = 'verification' enabled = false // Do not check test sources at this time } } diff --git a/grails-gradle/gradle/code-style-config.gradle b/grails-gradle/gradle/code-style-config.gradle index 66d6f634726..27dbef48d31 100644 --- a/grails-gradle/gradle/code-style-config.gradle +++ b/grails-gradle/gradle/code-style-config.gradle @@ -37,9 +37,11 @@ extensions.configure(CodeNarcExtension) { // Do not run Code Style checks if the property 'skipCodeStyle' is defined tasks.withType(Checkstyle).configureEach { + group = 'verification' onlyIf { !project.hasProperty('skipCodeStyle') } } tasks.withType(CodeNarc).configureEach { + group = 'verification' onlyIf { !project.hasProperty('skipCodeStyle') } } @@ -50,20 +52,10 @@ tasks.register('codeStyle') { dependsOn(tasks.withType(CodeNarc)) } -tasks.named('checkstyleMain') { - group = 'verification' -} - tasks.named('checkstyleTest') { - group = 'verification' enabled = false // Do not check test sources at this time } -tasks.named('codenarcMain') { - group = 'verification' -} - tasks.named('codenarcTest') { - group = 'verification' enabled = false // Do not check test sources at this time } \ No newline at end of file From cc80268f7b51d91c7449e926b7aa807a65705b75 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Wed, 27 Aug 2025 10:05:00 +0200 Subject: [PATCH 15/22] fix(build): align code style checking in `grails-forge` Grails Forge is still using its own Checkstyle rules after this change. --- grails-forge/gradle/code-style-config.gradle | 103 ++++++++++++++++++ .../gradle/style-enforcement-config.gradle | 59 ---------- grails-forge/grails-cli/build.gradle | 1 + .../build.gradle | 4 +- grails-forge/grails-forge-api/build.gradle | 2 +- grails-forge/grails-forge-cli/build.gradle | 2 +- grails-forge/grails-forge-core/build.gradle | 2 +- .../grails-forge-web-netty/build.gradle | 4 +- grails-forge/test-core/build.gradle | 1 - 9 files changed, 113 insertions(+), 65 deletions(-) create mode 100644 grails-forge/gradle/code-style-config.gradle delete mode 100644 grails-forge/gradle/style-enforcement-config.gradle diff --git a/grails-forge/gradle/code-style-config.gradle b/grails-forge/gradle/code-style-config.gradle new file mode 100644 index 00000000000..e4e6d994878 --- /dev/null +++ b/grails-forge/gradle/code-style-config.gradle @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import com.diffplug.gradle.spotless.SpotlessExtension +import io.spring.nohttp.gradle.NoHttpExtension + +apply plugin: 'checkstyle' +apply plugin: 'codenarc' +apply plugin: 'com.diffplug.spotless' +apply plugin: 'io.spring.nohttp' // enforce https everywhere + +extensions.configure(SpotlessExtension) { + // Explicit `it` is required in extension configuration block + it.java { + target('src/main/java/**/*.java') + // Formatters: + licenseHeaderFile(rootProject.layout.projectDirectory.file('config/spotless.license.java')) + } + it.groovy { + target('src/main/groovy/**') + // Formatters: + licenseHeaderFile(rootProject.layout.projectDirectory.file('config/spotless.license.java')) + } + it.format('javaMisc') { + target( + 'src/main/**/module-info.java', + 'src/main/**/package-info.java', + ) + // Formatters: + licenseHeaderFile(rootProject.layout.projectDirectory.file('config/spotless.license.java'), '\\/\\*\\*') + } +} + +extensions.configure(CheckstyleExtension) { + // Explicit `it` is required in extension configuration + it.configDirectory = rootProject.layout.projectDirectory.dir('config/checkstyle').asFile + it.toolVersion = checkstyleVersion +} + +extensions.configure(CodeNarcExtension) { + // Explicit `it` is required in extension configuration + it.configFile = rootProject.layout.projectDirectory.file('../etc/config/codenarc/codenarc.groovy').asFile + it.toolVersion = codenarcVersion +} + +extensions.configure(NoHttpExtension) { + // Explicit `it` is required in extension configuration block + it.source.exclude( + 'build/**', + 'src/main/resources/assets/**', + 'src/main/resources/main/pom.xml', + 'src/test/**', + ) +} + +// Do not run Code Style checks if the property 'skipCodeStyle' is defined +tasks.withType(Checkstyle).configureEach { + group = 'verification' + onlyIf { !project.hasProperty('skipCodeStyle') } +} +tasks.withType(CodeNarc).configureEach { + group = 'verification' + onlyIf { !project.hasProperty('skipCodeStyle') } +} + +tasks.register('codeStyle') { + group = 'verification' + description = 'Runs code style checks' + dependsOn(tasks.withType(Checkstyle)) + dependsOn(tasks.withType(CodeNarc)) +} + +tasks.named('checkstyleTest') { + enabled = false // Do not check test sources at this time +} + +tasks.named('checkstyleMain') { + dependsOn('spotlessCheck') +} + +gradle.taskGraph.whenReady { + if (tasks.findByName('codenarcTest')) { + tasks.named('codenarcTest') { + enabled = false // Do not check test sources at this time + } + } +} diff --git a/grails-forge/gradle/style-enforcement-config.gradle b/grails-forge/gradle/style-enforcement-config.gradle deleted file mode 100644 index 374fec9ed83..00000000000 --- a/grails-forge/gradle/style-enforcement-config.gradle +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -apply plugin: 'checkstyle' -apply plugin: 'com.diffplug.spotless' -apply plugin: 'io.spring.nohttp' // enforce https everywhere - -spotless { - java { - licenseHeaderFile(rootProject.file("${rootDir}/config/spotless.license.java")) - target('src/main/java/**/*.java') - } - groovy { - licenseHeaderFile(rootProject.file("${rootDir}/config/spotless.license.java")) - target('src/main/groovy/**') - } - format 'javaMisc', { - target('src/main/**/package-info.java', 'src/main/**/module-info.java') - licenseHeaderFile(rootProject.file('config/spotless.license.java'), '\\/\\*\\*') - } -} - -checkstyle { - configFile = project.rootProject.file('config/checkstyle/checkstyle.xml') - - // Per submodule - maxErrors = 1 - maxWarnings = 10 - - showViolations = true -} - -nohttp { - source.exclude('src/test/**', 'build/**', 'src/main/resources/assets/**', 'src/resources/main/pom.xml') -} - -tasks.named('checkstyleTest').configure { - it.enabled = false -} - -tasks.named('checkstyleMain').configure { - it.dependsOn('spotlessCheck') -} \ No newline at end of file diff --git a/grails-forge/grails-cli/build.gradle b/grails-forge/grails-cli/build.gradle index a48763bb719..59e79ba704d 100644 --- a/grails-forge/grails-cli/build.gradle +++ b/grails-forge/grails-cli/build.gradle @@ -77,6 +77,7 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') } diff --git a/grails-forge/grails-forge-analytics-postgres/build.gradle b/grails-forge/grails-forge-analytics-postgres/build.gradle index 2209e3c813e..197893615f3 100644 --- a/grails-forge/grails-forge-analytics-postgres/build.gradle +++ b/grails-forge/grails-forge-analytics-postgres/build.gradle @@ -68,4 +68,6 @@ tasks.named('dockerBuildNative') { tasks.named('dockerBuild') { images = [findProperty('dockerImageName') ?: 'grailsforge'] -} \ No newline at end of file +} + +apply from: rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') diff --git a/grails-forge/grails-forge-api/build.gradle b/grails-forge/grails-forge-api/build.gradle index 1972acbb6ec..d15ac9b001c 100644 --- a/grails-forge/grails-forge-api/build.gradle +++ b/grails-forge/grails-forge-api/build.gradle @@ -75,9 +75,9 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/micronaut-openapi-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') - from rootProject.layout.projectDirectory.file('gradle/style-enforcement-config.gradle') from rootProject.layout.projectDirectory.file('gradle/doc-config.gradle') } diff --git a/grails-forge/grails-forge-cli/build.gradle b/grails-forge/grails-forge-cli/build.gradle index 45c9785df2a..2422caec5a3 100644 --- a/grails-forge/grails-forge-cli/build.gradle +++ b/grails-forge/grails-forge-cli/build.gradle @@ -109,9 +109,9 @@ rocker { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') - from rootProject.layout.projectDirectory.file('gradle/style-enforcement-config.gradle') from rootProject.layout.projectDirectory.file('gradle/doc-config.gradle') } diff --git a/grails-forge/grails-forge-core/build.gradle b/grails-forge/grails-forge-core/build.gradle index 39b6961cdaa..ef008f864d3 100644 --- a/grails-forge/grails-forge-core/build.gradle +++ b/grails-forge/grails-forge-core/build.gradle @@ -115,9 +115,9 @@ copyGrailsWrapper.configure { Sync it -> apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') + from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') - from rootProject.layout.projectDirectory.file('gradle/style-enforcement-config.gradle') from rootProject.layout.projectDirectory.file('gradle/doc-config.gradle') } diff --git a/grails-forge/grails-forge-web-netty/build.gradle b/grails-forge/grails-forge-web-netty/build.gradle index 47f270e2ebd..3152efca271 100644 --- a/grails-forge/grails-forge-web-netty/build.gradle +++ b/grails-forge/grails-forge-web-netty/build.gradle @@ -67,4 +67,6 @@ tasks.named('dockerBuildNative') { tasks.named('dockerBuild') { images = [findProperty('dockerImageName') ?: 'grailsforge'] -} \ No newline at end of file +} + +apply from: rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle') diff --git a/grails-forge/test-core/build.gradle b/grails-forge/test-core/build.gradle index d37b4620db3..ccb1ef8fb99 100644 --- a/grails-forge/test-core/build.gradle +++ b/grails-forge/test-core/build.gradle @@ -71,5 +71,4 @@ dependencies { apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') - from rootProject.layout.projectDirectory.file('gradle/style-enforcement-config.gradle') } \ No newline at end of file From 611c745823ad3293f7a272705c08a54836978ee0 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Wed, 27 Aug 2025 10:06:26 +0200 Subject: [PATCH 16/22] ci: add `grails-forge` code style checking --- .github/workflows/codestyle.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index f77a05abdbe..c64d23852e6 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -80,3 +80,32 @@ jobs: path: | grails-gradle/**/build/reports/checkstyle/ grails-gradle/**/build/reports/codenarc/ + check_gradle_forge_projects: + name: "Gradle Forge Projects" + runs-on: ubuntu-24.04 + steps: + - name: "🌐 Output Agent IP" # in the event RAO blocks this agent, this can be used to debug it + run: curl -s https://api.ipify.org + - name: "📥 Checkout repository" + uses: actions/checkout@v4 + - name: "☕️ Setup JDK" + uses: actions/setup-java@v4 + with: + distribution: liberica + java-version: 17 + - name: "🐘 Setup Gradle" + uses: gradle/actions/setup-gradle@v4 + with: + develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} + - name: "🔎 Check Gradle Forge Projects" + working-directory: grails-forge + run: ./gradlew codeStyle + - name: "📤 Upload Failure Reports" + if: failure() + uses: actions/upload-artifact@v4 + with: + name: gradle-plugin-reports + path: | + grails-forge/**/build/reports/checkstyle/ + grails-forge/**/build/reports/checkstyleNohttp/ + grails-forge/**/build/reports/codenarc/ From ef17c7f6e08824bf1abd09f97cfa6ed7f085f324 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Wed, 27 Aug 2025 10:09:43 +0200 Subject: [PATCH 17/22] ci: fix typos --- .github/workflows/codestyle.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index c64d23852e6..92753051cdb 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -41,7 +41,7 @@ jobs: - name: "🐘 Setup Gradle" uses: gradle/actions/setup-gradle@v4 with: - develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} + develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} - name: "🔎 Check Core Projects" run: ./gradlew codeStyle - name: "📤 Upload Failure Reports" @@ -68,7 +68,7 @@ jobs: - name: "🐘 Setup Gradle" uses: gradle/actions/setup-gradle@v4 with: - develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} + develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} - name: "🔎 Check Gradle Plugin Projects" working-directory: grails-gradle run: ./gradlew codeStyle @@ -80,8 +80,8 @@ jobs: path: | grails-gradle/**/build/reports/checkstyle/ grails-gradle/**/build/reports/codenarc/ - check_gradle_forge_projects: - name: "Gradle Forge Projects" + check_grails_forge_projects: + name: "Forge Projects" runs-on: ubuntu-24.04 steps: - name: "🌐 Output Agent IP" # in the event RAO blocks this agent, this can be used to debug it @@ -96,15 +96,15 @@ jobs: - name: "🐘 Setup Gradle" uses: gradle/actions/setup-gradle@v4 with: - develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} - - name: "🔎 Check Gradle Forge Projects" + develocity-access-key: ${{ secrets.GRAILS_DEVELOCITY_ACCESS_KEY }} + - name: "🔎 Check Forge Projects" working-directory: grails-forge run: ./gradlew codeStyle - name: "📤 Upload Failure Reports" if: failure() uses: actions/upload-artifact@v4 with: - name: gradle-plugin-reports + name: forge-reports path: | grails-forge/**/build/reports/checkstyle/ grails-forge/**/build/reports/checkstyleNohttp/ From 40b134c9d61b86e175cc1d33c7f949f0ad414e69 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Wed, 27 Aug 2025 16:34:07 +0200 Subject: [PATCH 18/22] ci: remove redundant gradle param `-Dorg.gradle.internal.publish.checksums.insecure=true` is no longer required as it is set by the publish plugin by default. --- .github/workflows/gradle.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index f41337fb661..1585dbd990a 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -277,7 +277,6 @@ jobs: ./gradlew publish aggregateChecksums aggregatePublishedArtifacts --no-build-cache --rerun-tasks - -Dorg.gradle.internal.publish.checksums.insecure=true - name: "📤 Upload grails-gradle checksums" uses: actions/upload-artifact@v4 with: @@ -381,7 +380,8 @@ jobs: working-directory: 'grails-forge' run: > ./gradlew publish aggregateChecksums aggregatePublishedArtifacts - -Dorg.gradle.internal.publish.checksums.insecure=true --no-build-cache --rerun-tasks + --no-build-cache + --rerun-tasks - name: "📤 Upload grails-forge checksums" uses: actions/upload-artifact@v4 with: From c2118cae602826cfbd34fb3b9d6592d559c86f6c Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Wed, 27 Aug 2025 16:36:44 +0200 Subject: [PATCH 19/22] docs: add `skipCodeStyle` to `DEVELOPMENT.md` --- DEVELOPMENT.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index fbb39ca2a87..7a89a9f27a6 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -19,6 +19,7 @@ limitations under the License. * onlyHibernate5Tests - runs only a hibernate5 related test * onlyMongodbTests - runs only a mongodb related test * onlyCoreTests - runs tests that do not include mongo, hibernate, or functional +* skipCodeStyle - does not run code style checks * skipFunctionalTests - does not run the functional tests * skipHibernate5Tests - does not run hibernate5 related tests * skipMongodbTests - does not run mongo related tests From 955b4235ee789edf8beb40ac700c52dbdede5945 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Wed, 27 Aug 2025 16:50:42 +0200 Subject: [PATCH 20/22] docs: update `DEVELOPMENT.md` --- DEVELOPMENT.md | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 7a89a9f27a6..dc1cc957b23 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -14,18 +14,23 @@ See the License for the specific language governing permissions and limitations under the License. --> -# Various properties that control which & how tests run -* onlyFunctionalTests - runs only grails-test-examples/* tests -* onlyHibernate5Tests - runs only a hibernate5 related test -* onlyMongodbTests - runs only a mongodb related test -* onlyCoreTests - runs tests that do not include mongo, hibernate, or functional -* skipCodeStyle - does not run code style checks -* skipFunctionalTests - does not run the functional tests -* skipHibernate5Tests - does not run hibernate5 related tests -* skipMongodbTests - does not run mongo related tests -* skipCoreTests - does not run the "core" tests -* serializeMongoTests - if true, only integration tests from one mongo project will run at a time -* skipTests - no tests will run +# Various properties that control which tasks to run + +These can be set on the command line like so: + +`./gradlew check -PskipCodeStyle` + +* `onlyCoreTests` - runs tests that do not include mongo, hibernate, or functional +* `onlyFunctionalTests` - runs only grails-test-examples/* tests +* `onlyHibernate5Tests` - runs only a hibernate5 related test +* `onlyMongodbTests` - runs only a mongodb related test +* `serializeMongoTests` - if true, only integration tests from one mongo project will run at a time +* `skipCodeStyle` - does not run code style checks +* `skipCoreTests` - does not run the "core" tests +* `skipFunctionalTests` - does not run the functional tests +* `skipHibernate5Tests` - does not run hibernate5 related tests +* `skipMongodbTests` - does not run mongo related tests +* `skipTests` - no tests will run # Start a mongo docker container (containers will start by default) `docker run -d --name mongo-on-docker -p 27017:27017 mongo` \ No newline at end of file From 63959392ac46dea877183b661c94949e9f870710 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Wed, 27 Aug 2025 17:31:30 +0200 Subject: [PATCH 21/22] docs: update `DEVELOPMENT.md` Add info about useful custom Gradle tasks. --- DEVELOPMENT.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index dc1cc957b23..9399c7eabae 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -14,7 +14,18 @@ See the License for the specific language governing permissions and limitations under the License. --> -# Various properties that control which tasks to run +# Development + +## Useful Custom Gradle tasks + +These tasks can be run like so: + +`./gradlew publishGuide` + +* `codeStyle` - runs all code style checks +* `publishGuide` - generates the user guide in the `grails-doc/build/original-guide` + +## Various properties that control which tasks to run These can be set on the command line like so: @@ -32,5 +43,5 @@ These can be set on the command line like so: * `skipMongodbTests` - does not run mongo related tests * `skipTests` - no tests will run -# Start a mongo docker container (containers will start by default) +## Start a mongo docker container (containers will start by default) `docker run -d --name mongo-on-docker -p 27017:27017 mongo` \ No newline at end of file From 2dbf541cb36807b5f79b0d2b89ec3b96d8335822 Mon Sep 17 00:00:00 2001 From: Mattias Reichel Date: Wed, 27 Aug 2025 17:32:02 +0200 Subject: [PATCH 22/22] docs: update `CONTRIBUTING.md` Update the section on code style. --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 502f79f769e..cba8dac2b92 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -239,7 +239,8 @@ changes. ## Code Style -Grails code style mostly mirrors the Spring Framework's [Style Guide](https://github.com/spring-projects/spring-framework/blob/main/CONTRIBUTING.md#source-code-style). We are currently working on a more detailed proposal under ticket [#13754](https://github.com/apache/grails-core/issues/13754). +Grails has a limited set of code styles enforced by Checkstyle (for Java) and CodeNarc (for Groovy). +To check compliance with the code styles, run the `codeStyle` Gradle task. ### Commit Messages