From 2ee38bb80d82720cea6bb3f010cf439e65d30214 Mon Sep 17 00:00:00 2001 From: puneetbehl Date: Thu, 19 Sep 2024 19:42:47 +0000 Subject: [PATCH 01/11] [skip ci] Release v5.1.1 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b5af1cd..f7124fe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -projectVersion=5.1.1-SNAPSHOT +projectVersion=5.1.1 grailsVersion=6.1.1 fieldsVersion=5.0.3 From ce7e8d88c57ebe5d4c47c62724bd0a6cd2baf561 Mon Sep 17 00:00:00 2001 From: puneetbehl Date: Thu, 19 Sep 2024 19:46:24 +0000 Subject: [PATCH 02/11] chore: Bump version to 5.1.2-SNAPSHOT --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f7124fe..8336e0f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -projectVersion=5.1.1 +projectVersion=5.1.2-SNAPSHOT grailsVersion=6.1.1 fieldsVersion=5.0.3 From bc3b3db49b971a366428b3fe8f7e9ad434512a30 Mon Sep 17 00:00:00 2001 From: Scott Murphy Heiberg Date: Tue, 24 Sep 2024 15:18:28 -0500 Subject: [PATCH 03/11] version increment --- build.gradle | 2 +- gradle.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 539312f..7fc3148 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,7 @@ dependencies { api "org.grails:grails-dependencies" api "org.grails:grails-web-boot" - api "io.github.gpc:fields:$fieldsVersion" + api "org.grails.plugins:fields:$fieldsVersion" console "org.grails:grails-console" } diff --git a/gradle.properties b/gradle.properties index 8336e0f..aa4317b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ projectVersion=5.1.2-SNAPSHOT -grailsVersion=6.1.1 -fieldsVersion=5.0.3 +grailsVersion=6.2.0 +fieldsVersion=5.1.0-SNAPSHOT org.gradle.caching=true org.gradle.daemon=true From 22405c31f42092bb2436565af3e0d3b0e5abb578 Mon Sep 17 00:00:00 2001 From: Scott Murphy Heiberg Date: Thu, 26 Sep 2024 17:46:44 -0700 Subject: [PATCH 04/11] Restore shell scripts --- .../scripts/CreateScaffoldController.groovy | 16 ++++++ src/main/scripts/GenerateAll.groovy | 15 ++++++ .../scripts/GenerateAsyncController.groovy | 41 +++++++++++++++ src/main/scripts/GenerateController.groovy | 51 +++++++++++++++++++ src/main/scripts/GenerateViews.groovy | 45 ++++++++++++++++ src/main/scripts/InstallTemplates.groovy | 29 +++++++++++ 6 files changed, 197 insertions(+) create mode 100644 src/main/scripts/CreateScaffoldController.groovy create mode 100644 src/main/scripts/GenerateAll.groovy create mode 100644 src/main/scripts/GenerateAsyncController.groovy create mode 100644 src/main/scripts/GenerateController.groovy create mode 100644 src/main/scripts/GenerateViews.groovy create mode 100644 src/main/scripts/InstallTemplates.groovy diff --git a/src/main/scripts/CreateScaffoldController.groovy b/src/main/scripts/CreateScaffoldController.groovy new file mode 100644 index 0000000..8259200 --- /dev/null +++ b/src/main/scripts/CreateScaffoldController.groovy @@ -0,0 +1,16 @@ +description("Creates a scaffolded controller") { + usage 'create-controller [controller name]' + completer org.grails.cli.interactive.completers.DomainClassCompleter + argument name:'Controller Name', description:"The name of controller", required:true + flag name:'force', description:"Whether to overwrite existing files" + } + +def model = model(args[0]) +def overwrite = flag('force') ? true : false + +render template: template('scaffolding/ScaffoldedController.groovy'), + destination: file("grails-app/controllers/${model.packagePath}/${model.convention("Controller")}.groovy"), + model: model, + overwrite: overwrite + +return true diff --git a/src/main/scripts/GenerateAll.groovy b/src/main/scripts/GenerateAll.groovy new file mode 100644 index 0000000..7005231 --- /dev/null +++ b/src/main/scripts/GenerateAll.groovy @@ -0,0 +1,15 @@ +import org.grails.cli.interactive.completers.DomainClassCompleter + +description("Generates a controller that performs CRUD operations and the associated views") { + usage "grails generate-all [DOMAIN CLASS]" + argument name: 'Domain Class', description: "The name of the domain class", required: true + completer DomainClassCompleter + flag name: 'force', description: "Whether to overwrite existing files" +} + +if (args) { + generateController(*args) + generateViews(*args) +} else { + error "No domain class specified" +} diff --git a/src/main/scripts/GenerateAsyncController.groovy b/src/main/scripts/GenerateAsyncController.groovy new file mode 100644 index 0000000..108eb50 --- /dev/null +++ b/src/main/scripts/GenerateAsyncController.groovy @@ -0,0 +1,41 @@ +import org.grails.cli.interactive.completers.DomainClassCompleter + +description( "Generates an asynchronous controller that performs CRUD operations" ) { + usage "grails generate-async-controller [DOMAIN CLASS]" + completer DomainClassCompleter + flag name:'force', description:"Whether to overwrite existing files" +} + + +if(args) { + def classNames = args + if(args[0] == '*') { + classNames = resources("file:grails-app/domain/**/*.groovy") + .collect { className(it) } + } + for(arg in classNames) { + def sourceClass = source(arg) + def overwrite = flag('force') ? true : false + if(sourceClass) { + def model = model(sourceClass) + render template: template('scaffolding/AsyncController.groovy'), + destination: file("grails-app/controllers/${model.packagePath}/${model.convention('Controller')}.groovy"), + model: model, + overwrite: overwrite + + render template: template('scaffolding/AsyncSpec.groovy'), + destination: file("src/test/groovy/${model.packagePath}/${model.convention('ControllerSpec')}.groovy"), + model: model, + overwrite: overwrite + + + addStatus "Scaffolding completed for ${projectPath(sourceClass)}" + } + else { + error "Domain class not found for name $arg" + } + } +} +else { + error "No domain class specified" +} diff --git a/src/main/scripts/GenerateController.groovy b/src/main/scripts/GenerateController.groovy new file mode 100644 index 0000000..42ef375 --- /dev/null +++ b/src/main/scripts/GenerateController.groovy @@ -0,0 +1,51 @@ +import org.grails.cli.interactive.completers.DomainClassCompleter + +description( "Generates a controller that performs CRUD operations" ) { + usage "grails generate-controller [DOMAIN CLASS]" + completer DomainClassCompleter + flag name:'force', description:"Whether to overwrite existing files" +} + + +if(args) { + def classNames = args + if(args[0] == '*') { + classNames = resources("file:grails-app/domain/**/*.groovy") + .collect { className(it) } + } + for(arg in classNames) { + def sourceClass = source(arg) + def overwrite = flag('force') ? true : false + if(sourceClass) { + def model = model(sourceClass) + render template: template('scaffolding/Controller.groovy'), + destination: file("grails-app/controllers/${model.packagePath}/${model.convention('Controller')}.groovy"), + model: model, + overwrite: overwrite + + render template: template('scaffolding/Service.groovy'), + destination: file("grails-app/services/${model.packagePath}/${model.convention('Service')}.groovy"), + model: model, + overwrite: overwrite + + render template: template('scaffolding/Spec.groovy'), + destination: file("src/test/groovy/${model.packagePath}/${model.convention('ControllerSpec')}.groovy"), + model: model, + overwrite: overwrite + + render template: template('scaffolding/ServiceSpec.groovy'), + destination: file("src/integration-test/groovy/${model.packagePath}/${model.convention('ServiceSpec')}.groovy"), + model: model, + overwrite: overwrite + + + addStatus "Scaffolding completed for ${projectPath(sourceClass)}" + } + else { + error "Domain class not found for name $arg" + } + } +} +else { + error "No domain class specified" +} diff --git a/src/main/scripts/GenerateViews.groovy b/src/main/scripts/GenerateViews.groovy new file mode 100644 index 0000000..4da9c09 --- /dev/null +++ b/src/main/scripts/GenerateViews.groovy @@ -0,0 +1,45 @@ +import org.grails.cli.interactive.completers.DomainClassCompleter + +description( "Generates GSP views for the specified domain class" ) { + usage "grails generate-views [DOMAIN CLASS]|*" + argument name:'Domain Class', description:"The name of the domain class, or '*' for all", required:true + completer DomainClassCompleter + flag name:'force', description:"Whether to overwrite existing files" +} + +if(args) { + def classNames = args + if(args[0] == '*') { + classNames = resources("file:grails-app/domain/**/*.groovy").collect { className(it) } + } + def viewNames = resources("file:src/main/templates/scaffolding/*.gsp") + .collect { + it.filename + } + if(!viewNames) { + viewNames = resources("classpath*:META-INF/templates/scaffolding/*.gsp") + .collect { + it.filename + } + } + + for(arg in classNames) { + def sourceClass = source(arg) + def overwrite = flag('force') ? true : false + if(sourceClass) { + def model = model(sourceClass) + viewNames.each { + render template: template('scaffolding/'+it), + destination: file("grails-app/views/${model.propertyName}/"+it), + model: model, + overwrite: overwrite + } + + addStatus "Views generated for ${projectPath(sourceClass)}" + } else { + error "Domain class not found for name $arg" + } + } +} else { + error "No domain class specified" +} diff --git a/src/main/scripts/InstallTemplates.groovy b/src/main/scripts/InstallTemplates.groovy new file mode 100644 index 0000000..0fb3d5f --- /dev/null +++ b/src/main/scripts/InstallTemplates.groovy @@ -0,0 +1,29 @@ +/* + * Copyright 2012 Rob Fletcher + * + * Licensed 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 + * + * http://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. + */ + +description "Installs scaffolding templates that use f:all to render properties", "grails install-templates" + +updateStatus "Copying scaffolding templates" +mkdir "src/main/templates/scaffolding" +copy { + from templates("scaffolding/*.gsp") + into "src/main/templates/scaffolding" +} +copy { + from templates("scaffolding/*.groovy") + into "src/main/templates/scaffolding" +} +addStatus "Template installation complete" From cb0bfe0f3000a9af168962e69755aa0dee0d2169 Mon Sep 17 00:00:00 2001 From: Scott Murphy Heiberg Date: Thu, 26 Sep 2024 17:59:22 -0700 Subject: [PATCH 05/11] Support if annotation is not present --- .../compiler/scaffolding/ScaffoldingControllerInjector.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/groovy/org/grails/compiler/scaffolding/ScaffoldingControllerInjector.groovy b/src/main/groovy/org/grails/compiler/scaffolding/ScaffoldingControllerInjector.groovy index b44e53b..f0727d9 100644 --- a/src/main/groovy/org/grails/compiler/scaffolding/ScaffoldingControllerInjector.groovy +++ b/src/main/groovy/org/grails/compiler/scaffolding/ScaffoldingControllerInjector.groovy @@ -67,7 +67,7 @@ class ScaffoldingControllerInjector implements GrailsArtefactClassInjector { } } classNode.setSuperClass(GrailsASTUtils.nonGeneric(superClassNode, domainClass)) - def readOnlyExpression = (ConstantExpression) annotationNode.getMember("readOnly") + def readOnlyExpression = (ConstantExpression) annotationNode?.getMember("readOnly") new ResourceTransform().addConstructor(classNode, domainClass, readOnlyExpression?.getValue()?.asBoolean()?:false) } else if (!currentSuperClass.isDerivedFrom(superClassNode)) { GrailsASTUtils.error(source, classNode, "Scaffolded controllers (${classNode.name}) cannot extend other classes: ${currentSuperClass.getName()}", true) From 148e5cb50217466d3a592a826201774a45a59f7a Mon Sep 17 00:00:00 2001 From: James Fredley Date: Thu, 3 Oct 2024 17:33:38 -0400 Subject: [PATCH 06/11] Update to org.grails.plugins:fields:5.1.0 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index aa4317b..d598cb1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ projectVersion=5.1.2-SNAPSHOT grailsVersion=6.2.0 -fieldsVersion=5.1.0-SNAPSHOT +fieldsVersion=5.1.0 org.gradle.caching=true org.gradle.daemon=true From c26982cad119efbb384af6eabd564239c95e8754 Mon Sep 17 00:00:00 2001 From: puneetbehl Date: Thu, 3 Oct 2024 21:38:58 +0000 Subject: [PATCH 07/11] [skip ci] Release v5.1.2 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index d598cb1..e870d76 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -projectVersion=5.1.2-SNAPSHOT +projectVersion=5.1.2 grailsVersion=6.2.0 fieldsVersion=5.1.0 From efb038d1bd9e19e66df546ee321f2759775dd5d4 Mon Sep 17 00:00:00 2001 From: puneetbehl Date: Thu, 3 Oct 2024 21:41:59 +0000 Subject: [PATCH 08/11] chore: Bump version to 5.1.3-SNAPSHOT --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index e870d76..961a250 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -projectVersion=5.1.2 +projectVersion=5.1.3-SNAPSHOT grailsVersion=6.2.0 fieldsVersion=5.1.0 From fc2b332c0ef290de4065969388afd5e42c40cc83 Mon Sep 17 00:00:00 2001 From: Scott Murphy Heiberg Date: Thu, 10 Oct 2024 19:35:27 -0700 Subject: [PATCH 09/11] Update build env --- .github/workflows/gradle.yml | 4 ++-- .github/workflows/release.yml | 2 +- .sdkmanrc | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 .sdkmanrc diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 97602aa..2ac45cc 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -18,7 +18,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v4 with: - distribution: 'adopt' + distribution: 'librca' java-version: '11' - name: Run Build uses: gradle/gradle-build-action@v3 @@ -37,7 +37,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v4 with: - distribution: 'adopt' + distribution: 'librca' java-version: '11' - name: Publish Artifacts (repo.grails.org) id: publish diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9ccd32f..f17f8e6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v4 with: - distribution: 'adopt' + distribution: 'librca' java-version: ${{ matrix.java }} - name: Set the current release version id: release_version diff --git a/.sdkmanrc b/.sdkmanrc new file mode 100644 index 0000000..e2a1d58 --- /dev/null +++ b/.sdkmanrc @@ -0,0 +1 @@ +java=11.0.24-librca From 9b0b9f929c34e36e5cb6137b4bc09e66d47152bd Mon Sep 17 00:00:00 2001 From: Scott Murphy Heiberg Date: Thu, 10 Oct 2024 19:35:34 -0700 Subject: [PATCH 10/11] Don't force grails-dependencies --- build.gradle | 10 +++------- gradle.properties | 1 + 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 7fc3148..23a4271 100644 --- a/build.gradle +++ b/build.gradle @@ -25,15 +25,11 @@ dependencyManagement { } dependencies { - api "org.grails:grails-dependencies" - api "org.grails:grails-web-boot" - - api "org.grails.plugins:fields:$fieldsVersion" - - console "org.grails:grails-console" + compileOnly "org.codehaus.groovy:groovy" + compileOnly "org.grails:grails-plugin-rest" + api "org.grails.plugins:fields:$fieldsVersion" } - grailsPublish { userOrg = "grails" githubSlug = 'grails/scaffolding' diff --git a/gradle.properties b/gradle.properties index 961a250..64528f0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,7 @@ projectVersion=5.1.3-SNAPSHOT grailsVersion=6.2.0 fieldsVersion=5.1.0 +groovyVersion=3.0.22 org.gradle.caching=true org.gradle.daemon=true From a80a21b77be340f896700bc0dcb332054512dd42 Mon Sep 17 00:00:00 2001 From: Scott Murphy Heiberg Date: Thu, 10 Oct 2024 19:39:42 -0700 Subject: [PATCH 11/11] liberica --- .github/workflows/gradle.yml | 4 ++-- .github/workflows/release.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 2ac45cc..460b09f 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -18,7 +18,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v4 with: - distribution: 'librca' + distribution: 'liberica' java-version: '11' - name: Run Build uses: gradle/gradle-build-action@v3 @@ -37,7 +37,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v4 with: - distribution: 'librca' + distribution: 'liberica' java-version: '11' - name: Publish Artifacts (repo.grails.org) id: publish diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f17f8e6..0c2bcdd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v4 with: - distribution: 'librca' + distribution: 'liberica' java-version: ${{ matrix.java }} - name: Set the current release version id: release_version