matrei commented on code in PR #596:
URL: https://github.com/apache/grails-forge/pull/596#discussion_r2145477486
##########
gradle/java-config.gradle:
##########
@@ -25,13 +25,16 @@ extensions.configure(JavaPluginExtension) {
it.withSourcesJar()
}
+tasks.withType(JavaCompile).configureEach {
+ options.encoding = "UTF-8"
Review Comment:
Align on single quotes for strings?
##########
gradle/micronaut-openapi-config.gradle:
##########
@@ -16,20 +16,15 @@
* specific language governing permissions and limitations
* under the License.
*/
-
import groovy.transform.CompileStatic
-plugins {
- id "org.grails.forge.internal.convention"
-}
-
def openApiOutputFile =
layout.buildDirectory.file('generated/openapi/openapi.properties')
-
-def openApiProperties = tasks.register("openApiProperties", WriteProperties) {
- outputFile(openApiOutputFile.get().asFile)
- properties(
- 'swagger-ui.enabled':true,
- 'redoc.enabled':true,
+def openApiPropertiesTask = tasks.register("openApiProperties",
WriteProperties)
Review Comment:
Align on single quotes for strings?
##########
gradle/style-enforcement-config.gradle:
##########
@@ -0,0 +1,59 @@
+/*
+ * 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 = file("${rootDir}/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 {
Review Comment:
Remove `.configure`?
##########
settings.gradle:
##########
@@ -16,18 +16,6 @@
* specific language governing permissions and limitations
* under the License.
*/
-
-pluginManagement {
- repositories {
- gradlePluginPortal()
- mavenCentral()
- }
-}
-buildscript {
- dependencies {
- classpath "org.antlr:antlr4-runtime:$antlr4Version"
- }
-}
plugins {
id "com.gradle.develocity" version "$develocityVersion"
id "com.gradle.common-custom-user-data-gradle-plugin" version
"$customUserDataVersion"
Review Comment:
- Align on single quotes for strings?
- No need for GString for the versions, use the variables directly?
##########
grails-forge-api/build.gradle:
##########
@@ -18,13 +18,19 @@
*/
plugins {
- id 'org.grails.forge.internal.build.openapi-module'
+ id 'groovy'
+ id 'java-library'
}
version = projectVersion
group = 'org.apache.grails.forge'
dependencies {
+ annotationProcessor
platform("io.micronaut:micronaut-bom:$micronautVersion")
+ implementation platform("io.micronaut:micronaut-bom:$micronautVersion")
+ annotationProcessor "io.micronaut:micronaut-inject-java"
+ testAnnotationProcessor
platform("io.micronaut:micronaut-bom:$micronautVersion")
+ testAnnotationProcessor "io.micronaut:micronaut-inject-java"
Review Comment:
Align on single quotes for strings?
##########
grails-forge-api/build.gradle:
##########
@@ -51,9 +57,42 @@ dependencies {
testImplementation 'io.micronaut.test:micronaut-test-spock'
testCompileOnly "io.micronaut:micronaut-inject-groovy:$micronautVersion"
+
+ if (project.hasProperty('micronautVersion')) {
+ testCompileOnly
"io.micronaut:micronaut-inject-groovy:${micronautVersion}"
+ }
+
+ testImplementation "org.codehaus.groovy:groovy:$groovyVersion"
+ testImplementation "org.spockframework:spock-core:$spockVersion", {
+ exclude group: "org.codehaus.groovy", module: "groovy-all"
+ }
+
+ testImplementation "cglib:cglib-nodep:$cglibVersion"
+ testImplementation "org.objenesis:objenesis:$objenesisVersion"
+ testRuntimeOnly "ch.qos.logback:logback-classic:$logbackClassicVersion"
+ testImplementation "org.codehaus.groovy:groovy-test:$groovyVersion"
}
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-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')
+}
+
+configurations {
+ all {
+ resolutionStrategy {
+ eachDependency { DependencyResolveDetails details ->
+ if (details.requested.group == "org.codehaus.groovy") {
+ details.useVersion(groovyVersion)
+ }
+ if (details.requested.name == "spock-core") {
Review Comment:
Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -40,11 +46,25 @@ configurations.configureEach {
}
}
+def processManPages = tasks.register("processManPages", Sync)
configurations {
generateConfig
+
+ asciidocPages {
+ canBeConsumed = true
+ canBeResolved = false
+ outgoing.artifact(processManPages.map {
+
project.layout.buildDirectory.dir("processed-manpages").get().asFile
Review Comment:
- Use `it.project.layout` for type hinting.
- Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
Review Comment:
Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
+ it.group = "Documentation"
+ it.from generateManpageAsciiDoc
+ it.include "**/*.adoc"
+ it.into layout.buildDirectory.dir("processed-manpages")
+ it.filter { String line ->
+ if (line == ':doctype: manpage' || line.startsWith('= ')) {
+ return ""
+ } else if (line.startsWith('==')) {
+ return '=' + line
+ } else {
+ return line
+ }
+ }
+}
+
+def buildCompletion = tasks.register("buildCompletion",
PicocliBuildCompletionTask)
+buildCompletion.configure { PicocliBuildCompletionTask it ->
+ it.outputDirectory.set(layout.buildDirectory.dir("bin"))
+ it.classpath.from(sourceSets.main.runtimeClasspath)
+ it.mainClass.set(application.mainClass)
+}
+
+distributions {
+ main {
+ contents {
+ from(buildCompletion) {
+ into 'bin'
+ }
+ from(rootProject.layout.projectDirectory.file('LICENSE')) {
+ into ''
+ }
+ }
+ }
+}
+
+tasks.named('shadowJar') {
+ mergeServiceFiles()
+}
+
+tasks.named("shadowDistZip") {
+ enabled = false
+}
+tasks.named("shadowDistTar") {
+ enabled = false
+}
+
+tasks.register("copyShadowJar", Sync) {
+ from shadowJar.outputs
+ into "${project.rootProject.buildDir}/libs"
+ rename { String fileName -> "cli.jar" }
+}
+
+tasks.register("exploded", Sync) {
+ dependsOn 'distZip'
+ from zipTree(distZip.outputs.files.singleFile)
+ into "${project.buildDir}/exploded"
+ eachFile { FileCopyDetails fcd ->
+ fcd.relativePath = new RelativePath(true,
fcd.relativePath.segments.drop(1))
+ }
+ onlyIf {
+ distZip.outputs.files.singleFile.exists()
+ }
+}
+
+tasks.register("cleanup", Delete) {
+ delete "${project.rootProject.buildDir}/libs/cli.jar"
+ delete "${project.buildDir}/dist"
+}
Review Comment:
- Align on single quotes for strings?
- Align on parentheses for method calls?
- Use layout?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
+ it.group = "Documentation"
+ it.from generateManpageAsciiDoc
+ it.include "**/*.adoc"
+ it.into layout.buildDirectory.dir("processed-manpages")
+ it.filter { String line ->
+ if (line == ':doctype: manpage' || line.startsWith('= ')) {
+ return ""
+ } else if (line.startsWith('==')) {
+ return '=' + line
+ } else {
+ return line
+ }
+ }
+}
+
+def buildCompletion = tasks.register("buildCompletion",
PicocliBuildCompletionTask)
+buildCompletion.configure { PicocliBuildCompletionTask it ->
+ it.outputDirectory.set(layout.buildDirectory.dir("bin"))
+ it.classpath.from(sourceSets.main.runtimeClasspath)
+ it.mainClass.set(application.mainClass)
+}
+
+distributions {
+ main {
+ contents {
+ from(buildCompletion) {
+ into 'bin'
+ }
+ from(rootProject.layout.projectDirectory.file('LICENSE')) {
+ into ''
+ }
+ }
+ }
+}
+
+tasks.named('shadowJar') {
+ mergeServiceFiles()
+}
+
+tasks.named("shadowDistZip") {
+ enabled = false
+}
+tasks.named("shadowDistTar") {
+ enabled = false
+}
+
+tasks.register("copyShadowJar", Sync) {
+ from shadowJar.outputs
+ into "${project.rootProject.buildDir}/libs"
+ rename { String fileName -> "cli.jar" }
+}
+
+tasks.register("exploded", Sync) {
+ dependsOn 'distZip'
+ from zipTree(distZip.outputs.files.singleFile)
+ into "${project.buildDir}/exploded"
+ eachFile { FileCopyDetails fcd ->
+ fcd.relativePath = new RelativePath(true,
fcd.relativePath.segments.drop(1))
+ }
+ onlyIf {
+ distZip.outputs.files.singleFile.exists()
+ }
+}
+
+tasks.register("cleanup", Delete) {
+ delete "${project.rootProject.buildDir}/libs/cli.jar"
+ delete "${project.buildDir}/dist"
+}
+
+tasks.named("clean") {
+ dependsOn 'cleanup'
+}
+
+tasks.named("assemble") {
+ dependsOn('exploded')
+}
+
+configurations {
+ all {
+ resolutionStrategy {
+ eachDependency { DependencyResolveDetails details ->
+ if (details.requested.group == "org.codehaus.groovy") {
+ details.useVersion(groovyVersion)
+ }
+ if (details.requested.name == "spock-core") {
+ details.useVersion(spockVersion)
+ }
Review Comment:
Align on single quotes for strings?
##########
grails-forge-core/build.gradle:
##########
@@ -44,6 +45,11 @@ configurations {
}
dependencies {
+ annotationProcessor
platform("io.micronaut:micronaut-bom:$micronautVersion")
+ implementation platform("io.micronaut:micronaut-bom:$micronautVersion")
+ annotationProcessor "io.micronaut:micronaut-inject-java"
+ testAnnotationProcessor
platform("io.micronaut:micronaut-bom:$micronautVersion")
+ testAnnotationProcessor "io.micronaut:micronaut-inject-java"
Review Comment:
Align on single quotes for strings?
##########
grails-forge-core/src/test/groovy/org/grails/forge/build/gradle/GradleSpec.groovy:
##########
@@ -66,6 +81,11 @@ class GradleSpec extends ApplicationContextSpec implements
CommandOutputFixture
String buildSrcGradle = output["buildSrc/build.gradle"]
expect:
+ if (!buildSrcGradle.contains('repositories')) {
+ // this test randomly fails. adding logging for when it fails to
debug further
+ log.error("Output: ${output}")
+ log.error("Build Src: ${buildSrcGradle}")
Review Comment:
Align on lazy log message evaluation?
##########
gradle/style-enforcement-config.gradle:
##########
@@ -0,0 +1,59 @@
+/*
+ * 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 = file("${rootDir}/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"
Review Comment:
- Align on using single quotes for strings?
- Align on using parentheses for method calls?
##########
gradle/style-enforcement-config.gradle:
##########
@@ -0,0 +1,59 @@
+/*
+ * 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 = file("${rootDir}/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
Review Comment:
Remove `it.`?
##########
gradle/style-enforcement-config.gradle:
##########
@@ -0,0 +1,59 @@
+/*
+ * 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'),
'\\/\\*\\*'
+ }
Review Comment:
Align on using perenthases for method calls?
##########
gradle/micronaut-openapi-config.gradle:
##########
@@ -38,11 +33,11 @@ def openApiProperties = tasks.register("openApiProperties",
WriteProperties) {
)
}
-tasks.named("compileJava", JavaCompile) {
+tasks.named("compileJava", JavaCompile).configure { JavaCompile it ->
Review Comment:
- Align on single quotes for strings?
- Remove `.configure`?
- Without `.configure`, remove explicit closure param?
##########
gradle/style-enforcement-config.gradle:
##########
@@ -0,0 +1,59 @@
+/*
+ * 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 = file("${rootDir}/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')
Review Comment:
- Remove `it.`?
##########
grails-forge-api/build.gradle:
##########
@@ -18,13 +18,19 @@
*/
plugins {
- id 'org.grails.forge.internal.build.openapi-module'
+ id 'groovy'
+ id 'java-library'
}
version = projectVersion
group = 'org.apache.grails.forge'
dependencies {
+ annotationProcessor
platform("io.micronaut:micronaut-bom:$micronautVersion")
+ implementation platform("io.micronaut:micronaut-bom:$micronautVersion")
+ annotationProcessor "io.micronaut:micronaut-inject-java"
Review Comment:
Align on single quotes for strings?
##########
gradle/style-enforcement-config.gradle:
##########
@@ -0,0 +1,59 @@
+/*
+ * 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 = file("${rootDir}/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 {
Review Comment:
Remove `.configure`?
##########
grails-forge-api/build.gradle:
##########
@@ -51,9 +57,42 @@ dependencies {
testImplementation 'io.micronaut.test:micronaut-test-spock'
testCompileOnly "io.micronaut:micronaut-inject-groovy:$micronautVersion"
+
+ if (project.hasProperty('micronautVersion')) {
+ testCompileOnly
"io.micronaut:micronaut-inject-groovy:${micronautVersion}"
Review Comment:
Align on no curly braces?
##########
gradle/test-config.gradle:
##########
@@ -40,7 +30,20 @@ tasks.withType(Test).configureEach {
testLogging {
exceptionFormat = 'full'
}
+
+ jvmArgs '-Duser.country=US'
+ jvmArgs '-Duser.language=en'
Review Comment:
Align on using parentheses for method calls?
##########
grails-forge-api/build.gradle:
##########
@@ -51,9 +57,42 @@ dependencies {
testImplementation 'io.micronaut.test:micronaut-test-spock'
testCompileOnly "io.micronaut:micronaut-inject-groovy:$micronautVersion"
+
+ if (project.hasProperty('micronautVersion')) {
+ testCompileOnly
"io.micronaut:micronaut-inject-groovy:${micronautVersion}"
+ }
+
+ testImplementation "org.codehaus.groovy:groovy:$groovyVersion"
+ testImplementation "org.spockframework:spock-core:$spockVersion", {
+ exclude group: "org.codehaus.groovy", module: "groovy-all"
+ }
+
+ testImplementation "cglib:cglib-nodep:$cglibVersion"
+ testImplementation "org.objenesis:objenesis:$objenesisVersion"
+ testRuntimeOnly "ch.qos.logback:logback-classic:$logbackClassicVersion"
+ testImplementation "org.codehaus.groovy:groovy-test:$groovyVersion"
}
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-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')
+}
+
+configurations {
+ all {
+ resolutionStrategy {
+ eachDependency { DependencyResolveDetails details ->
+ if (details.requested.group == "org.codehaus.groovy") {
Review Comment:
Align on single quotes for strings?
##########
build.gradle:
##########
@@ -24,22 +24,19 @@ import java.time.format.DateTimeFormatter
version = projectVersion
group = 'org.apache.grails.forge'
-// we must apply the publish configuration first or the aggregator plugin will
not work
-apply from: layout.projectDirectory.file('gradle/publish-root-config.gradle')
-
-apply plugin: 'org.grails.forge.internal.aggregator'
-
ext {
buildInstant =
java.util.Optional.ofNullable(System.getenv('SOURCE_DATE_EPOCH'))
.map(Long::parseLong)
.map(Instant::ofEpochSecond)
.orElseGet(Instant::now) as Instant
formattedBuildDate = DateTimeFormatter.ISO_INSTANT.format(buildInstant)
buildDate = (buildInstant as Instant).atZone(ZoneOffset.UTC) // for
reproducible builds
+ isCiBuild = System.getenv().get('CI') as Boolean
Review Comment:
Use `System.getenv().containsKey('CI')`?
##########
grails-forge-api/build.gradle:
##########
@@ -51,9 +57,42 @@ dependencies {
testImplementation 'io.micronaut.test:micronaut-test-spock'
testCompileOnly "io.micronaut:micronaut-inject-groovy:$micronautVersion"
+
+ if (project.hasProperty('micronautVersion')) {
+ testCompileOnly
"io.micronaut:micronaut-inject-groovy:${micronautVersion}"
+ }
+
+ testImplementation "org.codehaus.groovy:groovy:$groovyVersion"
+ testImplementation "org.spockframework:spock-core:$spockVersion", {
+ exclude group: "org.codehaus.groovy", module: "groovy-all"
Review Comment:
Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -40,11 +46,25 @@ configurations.configureEach {
}
}
+def processManPages = tasks.register("processManPages", Sync)
Review Comment:
Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -61,35 +81,23 @@ dependencies {
implementation "org.yaml:snakeyaml:$snakeyamlVersion"
compileOnly 'com.google.code.findbugs:jsr305'
- compileOnly 'org.graalvm.nativeimage:svm'
testImplementation 'io.micronaut.picocli:micronaut-picocli'
testImplementation "org.reflections:reflections:$reflectionsVersion"
testImplementation 'org.testcontainers:spock'
-}
+ if (project.hasProperty('micronautVersion')) {
+ testCompileOnly
"io.micronaut:micronaut-inject-groovy:${micronautVersion}"
Review Comment:
Align on no curly braces?
##########
grails-forge-cli/build.gradle:
##########
@@ -61,35 +81,23 @@ dependencies {
implementation "org.yaml:snakeyaml:$snakeyamlVersion"
compileOnly 'com.google.code.findbugs:jsr305'
- compileOnly 'org.graalvm.nativeimage:svm'
testImplementation 'io.micronaut.picocli:micronaut-picocli'
testImplementation "org.reflections:reflections:$reflectionsVersion"
testImplementation 'org.testcontainers:spock'
-}
+ if (project.hasProperty('micronautVersion')) {
+ testCompileOnly
"io.micronaut:micronaut-inject-groovy:${micronautVersion}"
+ }
-graalvmNative {
- toolchainDetection = false
-
- binaries {
- main {
- // Main options
- sharedLibrary = false
- imageName = 'grails-forge-cli'
- buildArgs(
-
'--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.configure=ALL-UNNAMED',
-
'--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk=ALL-UNNAMED',
-
'--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.jni=ALL-UNNAMED',
-
'--add-exports=org.graalvm.sdk/org.graalvm.nativeimage.impl=ALL-UNNAMED',
- '-H:+ReportExceptionStackTraces'
- )
- if (project.hasProperty('musl')) {
- logger.lifecycle('Using musl libc')
- buildArgs('--libc=musl', '--static')
- }
- mainClass = 'org.grails.forge.cli.Application'
- }
+ testImplementation "org.codehaus.groovy:groovy:$groovyVersion"
+ testImplementation "org.spockframework:spock-core:$spockVersion", {
+ exclude group: "org.codehaus.groovy", module: "groovy-all"
Review Comment:
Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
+ it.group = "Documentation"
+ it.from generateManpageAsciiDoc
+ it.include "**/*.adoc"
+ it.into layout.buildDirectory.dir("processed-manpages")
+ it.filter { String line ->
+ if (line == ':doctype: manpage' || line.startsWith('= ')) {
+ return ""
+ } else if (line.startsWith('==')) {
+ return '=' + line
+ } else {
+ return line
+ }
+ }
+}
+
+def buildCompletion = tasks.register("buildCompletion",
PicocliBuildCompletionTask)
Review Comment:
Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
Review Comment:
- Why not do this configuration on task registration (and remove
`.configure` and closure param)?
- Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -40,11 +46,25 @@ configurations.configureEach {
}
}
+def processManPages = tasks.register("processManPages", Sync)
configurations {
generateConfig
+
+ asciidocPages {
+ canBeConsumed = true
+ canBeResolved = false
+ outgoing.artifact(processManPages.map {
+
project.layout.buildDirectory.dir("processed-manpages").get().asFile
+ })
+ }
}
dependencies {
+ annotationProcessor
platform("io.micronaut:micronaut-bom:$micronautVersion")
+ implementation platform("io.micronaut:micronaut-bom:$micronautVersion")
+ annotationProcessor "io.micronaut:micronaut-inject-java"
+ testAnnotationProcessor
platform("io.micronaut:micronaut-bom:$micronautVersion")
+ testAnnotationProcessor "io.micronaut:micronaut-inject-java"
Review Comment:
Align on single quotes for strings?
##########
grails-forge-api/build.gradle:
##########
@@ -51,9 +57,42 @@ dependencies {
testImplementation 'io.micronaut.test:micronaut-test-spock'
testCompileOnly "io.micronaut:micronaut-inject-groovy:$micronautVersion"
+
+ if (project.hasProperty('micronautVersion')) {
+ testCompileOnly
"io.micronaut:micronaut-inject-groovy:${micronautVersion}"
+ }
+
+ testImplementation "org.codehaus.groovy:groovy:$groovyVersion"
+ testImplementation "org.spockframework:spock-core:$spockVersion", {
+ exclude group: "org.codehaus.groovy", module: "groovy-all"
+ }
+
+ testImplementation "cglib:cglib-nodep:$cglibVersion"
+ testImplementation "org.objenesis:objenesis:$objenesisVersion"
+ testRuntimeOnly "ch.qos.logback:logback-classic:$logbackClassicVersion"
+ testImplementation "org.codehaus.groovy:groovy-test:$groovyVersion"
}
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-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')
+}
+
+configurations {
+ all {
Review Comment:
Use `configureEach` instead of `all`?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
+ it.group = "Documentation"
+ it.from generateManpageAsciiDoc
+ it.include "**/*.adoc"
+ it.into layout.buildDirectory.dir("processed-manpages")
+ it.filter { String line ->
+ if (line == ':doctype: manpage' || line.startsWith('= ')) {
+ return ""
+ } else if (line.startsWith('==')) {
+ return '=' + line
+ } else {
+ return line
+ }
+ }
+}
+
+def buildCompletion = tasks.register("buildCompletion",
PicocliBuildCompletionTask)
+buildCompletion.configure { PicocliBuildCompletionTask it ->
+ it.outputDirectory.set(layout.buildDirectory.dir("bin"))
+ it.classpath.from(sourceSets.main.runtimeClasspath)
+ it.mainClass.set(application.mainClass)
+}
+
+distributions {
+ main {
+ contents {
+ from(buildCompletion) {
+ into 'bin'
+ }
+ from(rootProject.layout.projectDirectory.file('LICENSE')) {
+ into ''
+ }
+ }
+ }
+}
+
+tasks.named('shadowJar') {
Review Comment:
Add ShadowJar type for type hinting?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
+ it.group = "Documentation"
+ it.from generateManpageAsciiDoc
+ it.include "**/*.adoc"
+ it.into layout.buildDirectory.dir("processed-manpages")
+ it.filter { String line ->
+ if (line == ':doctype: manpage' || line.startsWith('= ')) {
+ return ""
+ } else if (line.startsWith('==')) {
+ return '=' + line
+ } else {
+ return line
+ }
+ }
+}
+
+def buildCompletion = tasks.register("buildCompletion",
PicocliBuildCompletionTask)
+buildCompletion.configure { PicocliBuildCompletionTask it ->
+ it.outputDirectory.set(layout.buildDirectory.dir("bin"))
+ it.classpath.from(sourceSets.main.runtimeClasspath)
+ it.mainClass.set(application.mainClass)
+}
Review Comment:
- Why not do this configuration on task registration (and remove
`.configure` and closure param)?
- Align on single quotes for strings?
- Use groovy setter instead of `.set()`?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
+ it.group = "Documentation"
+ it.from generateManpageAsciiDoc
+ it.include "**/*.adoc"
+ it.into layout.buildDirectory.dir("processed-manpages")
+ it.filter { String line ->
+ if (line == ':doctype: manpage' || line.startsWith('= ')) {
+ return ""
+ } else if (line.startsWith('==')) {
+ return '=' + line
+ } else {
+ return line
+ }
+ }
+}
+
+def buildCompletion = tasks.register("buildCompletion",
PicocliBuildCompletionTask)
+buildCompletion.configure { PicocliBuildCompletionTask it ->
+ it.outputDirectory.set(layout.buildDirectory.dir("bin"))
+ it.classpath.from(sourceSets.main.runtimeClasspath)
+ it.mainClass.set(application.mainClass)
+}
+
+distributions {
+ main {
+ contents {
+ from(buildCompletion) {
+ into 'bin'
+ }
+ from(rootProject.layout.projectDirectory.file('LICENSE')) {
+ into ''
+ }
+ }
+ }
+}
+
+tasks.named('shadowJar') {
+ mergeServiceFiles()
+}
+
+tasks.named("shadowDistZip") {
Review Comment:
Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
+ it.group = "Documentation"
+ it.from generateManpageAsciiDoc
+ it.include "**/*.adoc"
+ it.into layout.buildDirectory.dir("processed-manpages")
+ it.filter { String line ->
+ if (line == ':doctype: manpage' || line.startsWith('= ')) {
+ return ""
+ } else if (line.startsWith('==')) {
+ return '=' + line
+ } else {
+ return line
+ }
+ }
+}
+
+def buildCompletion = tasks.register("buildCompletion",
PicocliBuildCompletionTask)
+buildCompletion.configure { PicocliBuildCompletionTask it ->
+ it.outputDirectory.set(layout.buildDirectory.dir("bin"))
+ it.classpath.from(sourceSets.main.runtimeClasspath)
+ it.mainClass.set(application.mainClass)
+}
+
+distributions {
+ main {
+ contents {
+ from(buildCompletion) {
+ into 'bin'
+ }
+ from(rootProject.layout.projectDirectory.file('LICENSE')) {
+ into ''
+ }
+ }
+ }
+}
+
+tasks.named('shadowJar') {
+ mergeServiceFiles()
+}
+
+tasks.named("shadowDistZip") {
+ enabled = false
+}
+tasks.named("shadowDistTar") {
Review Comment:
Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
Review Comment:
- Use groovy setter notation instead of `.set()`?
- Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
+ it.group = "Documentation"
+ it.from generateManpageAsciiDoc
+ it.include "**/*.adoc"
+ it.into layout.buildDirectory.dir("processed-manpages")
+ it.filter { String line ->
+ if (line == ':doctype: manpage' || line.startsWith('= ')) {
+ return ""
+ } else if (line.startsWith('==')) {
+ return '=' + line
+ } else {
+ return line
+ }
+ }
+}
+
+def buildCompletion = tasks.register("buildCompletion",
PicocliBuildCompletionTask)
+buildCompletion.configure { PicocliBuildCompletionTask it ->
+ it.outputDirectory.set(layout.buildDirectory.dir("bin"))
+ it.classpath.from(sourceSets.main.runtimeClasspath)
+ it.mainClass.set(application.mainClass)
+}
+
+distributions {
+ main {
+ contents {
+ from(buildCompletion) {
+ into 'bin'
+ }
+ from(rootProject.layout.projectDirectory.file('LICENSE')) {
+ into ''
+ }
+ }
+ }
+}
+
+tasks.named('shadowJar') {
+ mergeServiceFiles()
+}
+
+tasks.named("shadowDistZip") {
+ enabled = false
+}
+tasks.named("shadowDistTar") {
+ enabled = false
+}
+
+tasks.register("copyShadowJar", Sync) {
+ from shadowJar.outputs
+ into "${project.rootProject.buildDir}/libs"
+ rename { String fileName -> "cli.jar" }
+}
+
+tasks.register("exploded", Sync) {
+ dependsOn 'distZip'
+ from zipTree(distZip.outputs.files.singleFile)
+ into "${project.buildDir}/exploded"
+ eachFile { FileCopyDetails fcd ->
+ fcd.relativePath = new RelativePath(true,
fcd.relativePath.segments.drop(1))
+ }
+ onlyIf {
+ distZip.outputs.files.singleFile.exists()
+ }
+}
Review Comment:
- Align on single quotes for strings?
- Align on parentheses for method calls?
- Use layout?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
+ it.group = "Documentation"
+ it.from generateManpageAsciiDoc
+ it.include "**/*.adoc"
+ it.into layout.buildDirectory.dir("processed-manpages")
+ it.filter { String line ->
+ if (line == ':doctype: manpage' || line.startsWith('= ')) {
+ return ""
+ } else if (line.startsWith('==')) {
+ return '=' + line
+ } else {
+ return line
+ }
+ }
+}
+
+def buildCompletion = tasks.register("buildCompletion",
PicocliBuildCompletionTask)
+buildCompletion.configure { PicocliBuildCompletionTask it ->
+ it.outputDirectory.set(layout.buildDirectory.dir("bin"))
+ it.classpath.from(sourceSets.main.runtimeClasspath)
+ it.mainClass.set(application.mainClass)
+}
+
+distributions {
+ main {
+ contents {
+ from(buildCompletion) {
+ into 'bin'
+ }
+ from(rootProject.layout.projectDirectory.file('LICENSE')) {
+ into ''
+ }
+ }
+ }
+}
+
+tasks.named('shadowJar') {
+ mergeServiceFiles()
+}
+
+tasks.named("shadowDistZip") {
+ enabled = false
+}
+tasks.named("shadowDistTar") {
+ enabled = false
+}
+
+tasks.register("copyShadowJar", Sync) {
+ from shadowJar.outputs
+ into "${project.rootProject.buildDir}/libs"
+ rename { String fileName -> "cli.jar" }
+}
Review Comment:
- Align on single quotes for strings?
- Align on parentheses for method calls?
- Use layout?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
+ it.group = "Documentation"
+ it.from generateManpageAsciiDoc
+ it.include "**/*.adoc"
+ it.into layout.buildDirectory.dir("processed-manpages")
+ it.filter { String line ->
+ if (line == ':doctype: manpage' || line.startsWith('= ')) {
+ return ""
+ } else if (line.startsWith('==')) {
+ return '=' + line
+ } else {
+ return line
+ }
+ }
+}
+
+def buildCompletion = tasks.register("buildCompletion",
PicocliBuildCompletionTask)
+buildCompletion.configure { PicocliBuildCompletionTask it ->
+ it.outputDirectory.set(layout.buildDirectory.dir("bin"))
+ it.classpath.from(sourceSets.main.runtimeClasspath)
+ it.mainClass.set(application.mainClass)
+}
+
+distributions {
+ main {
+ contents {
+ from(buildCompletion) {
+ into 'bin'
+ }
+ from(rootProject.layout.projectDirectory.file('LICENSE')) {
+ into ''
+ }
+ }
+ }
+}
+
+tasks.named('shadowJar') {
+ mergeServiceFiles()
+}
+
+tasks.named("shadowDistZip") {
+ enabled = false
+}
+tasks.named("shadowDistTar") {
+ enabled = false
+}
+
+tasks.register("copyShadowJar", Sync) {
+ from shadowJar.outputs
+ into "${project.rootProject.buildDir}/libs"
+ rename { String fileName -> "cli.jar" }
+}
+
+tasks.register("exploded", Sync) {
+ dependsOn 'distZip'
+ from zipTree(distZip.outputs.files.singleFile)
+ into "${project.buildDir}/exploded"
+ eachFile { FileCopyDetails fcd ->
+ fcd.relativePath = new RelativePath(true,
fcd.relativePath.segments.drop(1))
+ }
+ onlyIf {
+ distZip.outputs.files.singleFile.exists()
+ }
+}
+
+tasks.register("cleanup", Delete) {
+ delete "${project.rootProject.buildDir}/libs/cli.jar"
+ delete "${project.buildDir}/dist"
+}
+
+tasks.named("clean") {
+ dependsOn 'cleanup'
+}
Review Comment:
- Align on single quotes for strings?
- Align on parentheses for method calls?
##########
test-core/build.gradle:
##########
@@ -51,11 +52,24 @@ dependencies {
testImplementation project(':grails-forge-core')
testImplementation "ch.qos.logback:logback-classic:$logbackClassicVersion"
testImplementation 'io.micronaut.picocli:micronaut-picocli'
-}
-tasks.withType(Test).configureEach {
- onlyIf {
- !['skipTests'].find { project.hasProperty(it) }
+ if (project.hasProperty('micronautVersion')) {
+ testCompileOnly
"io.micronaut:micronaut-inject-groovy:${micronautVersion}"
+ }
+
+ testImplementation "org.codehaus.groovy:groovy:$groovyVersion"
+ testImplementation "org.spockframework:spock-core:$spockVersion", {
+ exclude group: "org.codehaus.groovy", module: "groovy-all"
Review Comment:
Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
+ it.group = "Documentation"
+ it.from generateManpageAsciiDoc
+ it.include "**/*.adoc"
+ it.into layout.buildDirectory.dir("processed-manpages")
+ it.filter { String line ->
+ if (line == ':doctype: manpage' || line.startsWith('= ')) {
+ return ""
+ } else if (line.startsWith('==')) {
+ return '=' + line
+ } else {
+ return line
+ }
+ }
+}
+
+def buildCompletion = tasks.register("buildCompletion",
PicocliBuildCompletionTask)
+buildCompletion.configure { PicocliBuildCompletionTask it ->
+ it.outputDirectory.set(layout.buildDirectory.dir("bin"))
+ it.classpath.from(sourceSets.main.runtimeClasspath)
+ it.mainClass.set(application.mainClass)
+}
+
+distributions {
+ main {
+ contents {
+ from(buildCompletion) {
+ into 'bin'
+ }
+ from(rootProject.layout.projectDirectory.file('LICENSE')) {
+ into ''
+ }
+ }
+ }
+}
+
+tasks.named('shadowJar') {
+ mergeServiceFiles()
+}
+
+tasks.named("shadowDistZip") {
+ enabled = false
+}
+tasks.named("shadowDistTar") {
+ enabled = false
+}
+
+tasks.register("copyShadowJar", Sync) {
+ from shadowJar.outputs
+ into "${project.rootProject.buildDir}/libs"
+ rename { String fileName -> "cli.jar" }
+}
+
+tasks.register("exploded", Sync) {
+ dependsOn 'distZip'
+ from zipTree(distZip.outputs.files.singleFile)
+ into "${project.buildDir}/exploded"
+ eachFile { FileCopyDetails fcd ->
+ fcd.relativePath = new RelativePath(true,
fcd.relativePath.segments.drop(1))
+ }
+ onlyIf {
+ distZip.outputs.files.singleFile.exists()
+ }
+}
+
+tasks.register("cleanup", Delete) {
+ delete "${project.rootProject.buildDir}/libs/cli.jar"
+ delete "${project.buildDir}/dist"
+}
+
+tasks.named("clean") {
+ dependsOn 'cleanup'
+}
+
+tasks.named("assemble") {
+ dependsOn('exploded')
+}
+
+configurations {
+ all {
Review Comment:
Use `configureEach` instead of `all`?
##########
grails-forge-core/build.gradle:
##########
@@ -62,6 +68,20 @@ dependencies {
testImplementation 'org.codehaus.groovy:groovy-yaml'
grailsWrapper "org.apache.grails.profiles:base:$grailsVersion@jar"
+
+ if (project.hasProperty('micronautVersion')) {
+ testCompileOnly
"io.micronaut:micronaut-inject-groovy:${micronautVersion}"
Review Comment:
Align on no curly braces?
##########
grails-forge-core/build.gradle:
##########
@@ -62,6 +68,20 @@ dependencies {
testImplementation 'org.codehaus.groovy:groovy-yaml'
grailsWrapper "org.apache.grails.profiles:base:$grailsVersion@jar"
+
+ if (project.hasProperty('micronautVersion')) {
+ testCompileOnly
"io.micronaut:micronaut-inject-groovy:${micronautVersion}"
+ }
+
+ testImplementation "org.codehaus.groovy:groovy:$groovyVersion"
+ testImplementation "org.spockframework:spock-core:$spockVersion", {
+ exclude group: "org.codehaus.groovy", module: "groovy-all"
Review Comment:
Align on single quotes for strings?
##########
grails-forge-cli/build.gradle:
##########
@@ -107,4 +115,106 @@ startScripts {
apply {
from rootProject.layout.projectDirectory.file('gradle/java-config.gradle')
from
rootProject.layout.projectDirectory.file('gradle/publish-config.gradle')
-}
\ No newline at end of file
+ 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')
+}
+
+def generateManpageAsciiDoc = tasks.register("generateManpageAsciiDoc",
GenerateManpageAsciidoc) {
+ mainClass = application.mainClass
+ classpath.from(configurations.generateConfig,
sourceSets.main.runtimeClasspath)
+ outputDirectory.set(layout.buildDirectory.dir("generated-picocli-docs"))
+}
+
+processManPages.configure { Sync it ->
+ it.group = "Documentation"
+ it.from generateManpageAsciiDoc
+ it.include "**/*.adoc"
+ it.into layout.buildDirectory.dir("processed-manpages")
+ it.filter { String line ->
+ if (line == ':doctype: manpage' || line.startsWith('= ')) {
+ return ""
+ } else if (line.startsWith('==')) {
+ return '=' + line
+ } else {
+ return line
+ }
+ }
+}
+
+def buildCompletion = tasks.register("buildCompletion",
PicocliBuildCompletionTask)
+buildCompletion.configure { PicocliBuildCompletionTask it ->
+ it.outputDirectory.set(layout.buildDirectory.dir("bin"))
+ it.classpath.from(sourceSets.main.runtimeClasspath)
+ it.mainClass.set(application.mainClass)
+}
+
+distributions {
+ main {
+ contents {
+ from(buildCompletion) {
+ into 'bin'
+ }
+ from(rootProject.layout.projectDirectory.file('LICENSE')) {
+ into ''
+ }
+ }
+ }
+}
+
+tasks.named('shadowJar') {
+ mergeServiceFiles()
+}
+
+tasks.named("shadowDistZip") {
+ enabled = false
+}
+tasks.named("shadowDistTar") {
+ enabled = false
+}
+
+tasks.register("copyShadowJar", Sync) {
+ from shadowJar.outputs
+ into "${project.rootProject.buildDir}/libs"
+ rename { String fileName -> "cli.jar" }
+}
+
+tasks.register("exploded", Sync) {
+ dependsOn 'distZip'
+ from zipTree(distZip.outputs.files.singleFile)
+ into "${project.buildDir}/exploded"
+ eachFile { FileCopyDetails fcd ->
+ fcd.relativePath = new RelativePath(true,
fcd.relativePath.segments.drop(1))
+ }
+ onlyIf {
+ distZip.outputs.files.singleFile.exists()
+ }
+}
+
+tasks.register("cleanup", Delete) {
+ delete "${project.rootProject.buildDir}/libs/cli.jar"
+ delete "${project.buildDir}/dist"
+}
+
+tasks.named("clean") {
+ dependsOn 'cleanup'
+}
+
+tasks.named("assemble") {
Review Comment:
Align on single quotes for strings?
##########
grails-forge-core/build.gradle:
##########
@@ -99,10 +123,32 @@ copyGrailsWrapper.configure { Sync it ->
apply {
from rootProject.layout.projectDirectory.file('gradle/java-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')
+}
+
+nohttp {
+ source.exclude('**/pom.rocker.raw')
}
['processResources', 'sourcesJar', 'spotlessJavaMisc',
'checkstyleNohttp'].each { name ->
tasks.named(name).configure {
it.dependsOn copyGrailsWrapper
}
+}
+
+configurations {
+ all {
+ resolutionStrategy {
+ eachDependency { DependencyResolveDetails details ->
+ if (details.requested.group == "org.codehaus.groovy") {
+ details.useVersion(groovyVersion)
+ }
+ if (details.requested.name == "spock-core") {
+ details.useVersion(spockVersion)
+ }
Review Comment:
Align on single quotes for strings?
##########
test-core/build.gradle:
##########
@@ -51,11 +52,24 @@ dependencies {
testImplementation project(':grails-forge-core')
testImplementation "ch.qos.logback:logback-classic:$logbackClassicVersion"
testImplementation 'io.micronaut.picocli:micronaut-picocli'
-}
-tasks.withType(Test).configureEach {
- onlyIf {
- !['skipTests'].find { project.hasProperty(it) }
+ if (project.hasProperty('micronautVersion')) {
+ testCompileOnly
"io.micronaut:micronaut-inject-groovy:${micronautVersion}"
Review Comment:
Align on no curly braces?
##########
grails-forge-core/build.gradle:
##########
@@ -99,10 +123,32 @@ copyGrailsWrapper.configure { Sync it ->
apply {
from rootProject.layout.projectDirectory.file('gradle/java-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')
+}
+
+nohttp {
+ source.exclude('**/pom.rocker.raw')
}
['processResources', 'sourcesJar', 'spotlessJavaMisc',
'checkstyleNohttp'].each { name ->
tasks.named(name).configure {
it.dependsOn copyGrailsWrapper
}
+}
+
+configurations {
+ all {
Review Comment:
Replace `all` with `configureEach`?
##########
grails-forge-core/build.gradle:
##########
@@ -44,6 +45,11 @@ configurations {
}
dependencies {
+ annotationProcessor
platform("io.micronaut:micronaut-bom:$micronautVersion")
+ implementation platform("io.micronaut:micronaut-bom:$micronautVersion")
+ annotationProcessor "io.micronaut:micronaut-inject-java"
Review Comment:
Align on single quotes for strings?
##########
grails-forge-core/build.gradle:
##########
@@ -76,8 +96,12 @@ rocker {
postProcessing = ['org.grails.forge.rocker.plugin.WhitespaceProcessor']
}
-nohttp {
- source.exclude('**/pom.rocker.raw')
+repositories {
+ // mavenLocal()
+ maven { url = 'https://repo.grails.org/grails/restricted' }
+ maven { url = 'https://repository.apache.org/content/groups/staging' }
+ maven { url = 'https://repository.apache.org/content/groups/snapshots' }
Review Comment:
Should we limit the artifacts allowed for RAO?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]