You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by jd...@apache.org on 2026/10/14 15:04:49 UTC
(grails-core) branch 9.1.x updated (829de6092e -> 5f5e961628)
This is an automated email from the ASF dual-hosted git repository.
jdaugherty pushed a change to branch 9.1.x
in repository https://gitbox.apache.org/repos/asf/grails-core.git
from 829de6092e Set the 9.1.x branch version to 9.1.0-SNAPSHOT and githubBranch to 9.1.x
add b18c864d16 Integrate Spring AI through a grails-spring-ai plugin and stream Publishers from actions
add f77d9182d9 Address the review of the Spring AI integration
add ea0698edeb Address the second review of the Spring AI integration
add 6089445541 Merge pull request #16599 from jdaugherty/feat/grails-ai
add a6cc5e3c2a Geb: manage Selenium 4.49.0 so the Chrome container image has an arm64 variant
add 7ed196e0b5 Merge pull request #16626 from jdaugherty/fix/geb-default-chromium-image
add 7008f7f309 Hibernate 7: keep HQL queries with a subquery intact
add f0f8729b27 fix(hibernate7): do not read select inside a longer word as the select of an HQL query
add 85d7c8621c Merge pull request #16597 from gustavoharff/fix/hibernate7-hql-subquery-select
add b214607a5b Replace ehcache's jaxb-runtime version range with the BOM-managed version
add 974357f6ca Keep the dependency metadata cache on pull request runs
add fc0ac6266f Report every validation failure at once and warn about what resolution skipped
add 200ab342fa Log the resolution warnings from the task so a configuration cache hit shows them
add a6d05ed1f3 Merge pull request #16644 from jdaugherty/fix/ehcache-jaxb-dynamic-version
add f9af0924cc Merge branch '8.0.x' into 8.1.x
add 1edb825aa8 Merge branch '8.1.x' into 9.0.x
add ba940ec415 Honour grails.native2ascii in a plugin's build script
add e1131ca72e Move the Forge build conventions into build-logic
add 46ff841f4e Make Forge a Grails plugin hosted by a web application and a CLI application
add 50f0f7975d Let a GSP page write no line for its template logic
add b686570349 Render Forge's templates with GSP instead of Rocker
add 6010bed3a4 Keep the Forge API's OpenAPI base document with the web application's configuration
add 27971429e8 Reduce Forge's documentation script to what Groovydoc needs
add 651f2cde15 Trim only the logic lines of a GSP page's text
add 27068cdbbf Leave a GSP page's last line of blanks as it is when trimming logic lines
add a20c6e6402 Merge branch '8.0.x' into feat/forge-grails-composite
add 2d11d0d1c5 Keep build-logic on the Maven 3 compatible plexus-xml
add 0203519866 Merge branch '8.1.x' into feat/forge-grails-composite
add 9f08b0d9af Build the Forge AWS bundle with the configuration cache
add acb868664a Poll status before failing the start in the hidden-details spec
add 1b259afe51 Restore Forge compatibility after the Grails conversion
add 967cb319c5 Merge branch '8.1.x' into feat/forge-grails-composite
add 313f9787b7 Keep hosted Forge API details in the deployment runbook
add 6a14f076e4 Merge branch '8.1.x' into feat/forge-grails-composite
add f64c002d33 Merge pull request #16551 from apache/feat/forge-grails-composite
add 696429eab7 Merge branch '8.1.x' into 9.0.x
add 1c2b6b8cac Copy the streamed renderers before adding the built-in ones
add 386e881473 Give the Forge CLI test fixtures Groovy 6's call-site module
new 5f5e961628 Merge branch '9.0.x' into 9.1.x
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.agents/skills/README.md | 1 +
.agents/skills/gradle-developer/SKILL.md | 9 +-
.agents/skills/grails-ai-developer | 1 +
.github/dependency-graph/external-references.yml | 1 +
.github/workflows/forge-deploy-aws.yml | 4 +-
.gitignore | 4 +
AGENTS.md | 5 +-
RELEASE.md | 4 +-
THREAT_MODEL.md | 6 +-
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
build-logic/plugins/build.gradle | 13 +
.../grails/buildsrc/BomDependencyGraph.groovy | 187 +++++++
.../grails/buildsrc/GrailsCodeStylePlugin.groovy | 2 +-
.../GrailsDependencyValidatorPlugin.groovy | 103 ++--
.../org/apache/grails/buildsrc/SbomPlugin.groovy | 4 +
.../buildsrc/ValidateDependencyVersionsTask.groovy | 89 ++-
.../buildsrc/WriteGrailsVersionInfoTask.groovy | 12 +-
.../GrailsGroovyExtensionTransformer.groovy | 26 +-
.../shadowjar/GrailsShadowLicenseTransform.groovy | 0
.../shadowjar/GrailsShadowNoticeTransform.groovy | 0
.../internal/tasks/GenerateManpageAsciidoc.java | 0
.../internal/tasks/PicocliBuildCompletionTask.java | 0
.../grails/buildsrc/BomDependencyGraphSpec.groovy | 41 +-
.../ValidateDependencyVersionsTaskSpec.groovy | 178 +++++-
.../buildsrc/WriteGrailsVersionInfoTaskSpec.groovy | 122 ++++
.../GrailsGroovyExtensionTransformerSpec.groovy | 125 +++++
build.gradle | 13 +-
dependencies.gradle | 4 +
end-to-end/agent-skills-plain-build/build.gradle | 1 +
end-to-end/agent-skills/build.gradle | 1 +
.../grails/e2e/skills/AgentSkillsSpec.groovy | 1 +
gradle.properties | 4 +-
gradle/docs-dependencies.gradle | 6 +
gradle/publish-root-config.gradle | 2 +
gradle/rat-root-config.gradle | 2 +-
gradle/wrapper/gradle-wrapper.properties | 2 +-
grails-async/plugin/build.gradle | 6 +
.../grails/async/web/StreamItemRenderer.groovy | 41 ++
.../web/async/ControllersAsyncGrailsPlugin.groovy | 53 +-
.../web/async/mvc/DefaultStreamItemRenderer.groovy | 52 +-
.../web/async/mvc/JacksonStreamItemRenderer.groovy | 67 +++
.../mvc/PublisherActionResultTransformer.groovy | 177 ++++++
.../web/async/mvc/ServerSentEventFormatter.groovy | 126 +++++
.../web/async/mvc/ServerSentEventSubscriber.groovy | 209 +++++++
.../web/async/mvc/SingleValueSubscriber.groovy | 86 +++
.../additional-spring-configuration-metadata.json | 21 +
.../async/ControllersAsyncGrailsPluginSpec.groovy | 94 ++++
.../PublisherActionResultTransformerSpec.groovy | 388 +++++++++++++
.../async/mvc/ServerSentEventFormatterSpec.groovy | 133 +++++
.../orm/hibernate/query/HqlQueryContext.java | 97 +++-
.../hibernate/HibernateGormStaticApiSpec.groovy | 71 +++
.../orm/hibernate/query/HqlQueryContextSpec.groovy | 94 ++++
grails-doc/build.gradle | 14 +-
grails-doc/src/en/guide/async/asyncStreaming.adoc | 110 ++++
.../guide/async/rxjava/asyncServerSentEvents.adoc | 2 +
.../src/en/guide/commandLine/creatingProject.adoc | 2 +-
.../src/en/guide/commandLine/interactiveMode.adoc | 10 +-
.../src/en/guide/gettingStarted/agentSkills.adoc | 3 +
grails-doc/src/en/guide/introduction/whatsNew.adoc | 14 +
.../src/en/guide/testing/functionalTesting.adoc | 40 +-
.../theWebLayer/gsp/GSPBasics/pageDirectives.adoc | 40 ++
grails-doc/src/en/guide/toc.yml | 10 +
.../src/en/guide/upgrading/upgrading81x.adoc | 53 ++
grails-doc/src/en/guide/usingAi.adoc | 32 ++
grails-doc/src/en/guide/usingAi/aiChatClient.adoc | 87 +++
.../src/en/guide/usingAi/aiConfiguration.adoc | 74 +++
.../src/en/guide/usingAi/aiInstallation.adoc | 43 ++
grails-doc/src/en/guide/usingAi/aiProviders.adoc | 213 +++++++
grails-doc/src/en/guide/usingAi/aiStreaming.adoc | 64 +++
grails-doc/src/en/guide/usingAi/aiTesting.adoc | 77 +++
.../src/en/ref/Command Line/create-plugin.adoc | 2 +-
.../src/en/ref/Command Line/create-restapi.adoc | 2 +-
.../src/en/ref/Command Line/create-web-plugin.adoc | 2 +-
grails-doc/src/en/ref/Command Line/help.adoc | 4 +-
.../src/en/ref/Command Line/list-features.adoc | 6 +
grails-forge/.gitattributes | 5 -
grails-forge/.gitignore | 20 -
grails-forge/README.md | 61 +-
grails-forge/build.gradle | 18 +-
grails-forge/buildSrc/build.gradle | 62 ---
grails-forge/buildSrc/settings.gradle | 35 --
.../forge/rocker/plugin/JavaGeneratorRunnable.java | 166 ------
.../forge/rocker/plugin/RockerConfiguration.java | 99 ----
.../grails/forge/rocker/plugin/RockerPlugin.java | 92 ---
.../rocker/plugin/RockerSourceSetProperty.java | 80 ---
.../org/grails/forge/rocker/plugin/RockerTask.java | 185 -------
.../forge/rocker/plugin/TemplateDirectorySet.java | 124 -----
.../forge/rocker/plugin/WhitespaceProcessor.java | 52 --
grails-forge/config/checkstyle/checkstyle.xml | 227 --------
grails-forge/config/spotless.license.java | 18 -
grails-forge/docs/aws-elastic-beanstalk.md | 18 +-
grails-forge/docs/choose-postgresql.png | Bin 108993 -> 0 bytes
grails-forge/docs/cloud_sql_create_intance.png | Bin 100207 -> 0 bytes
grails-forge/docs/create-database.png | Bin 150843 -> 0 bytes
grails-forge/docs/create-two-databases.png | Bin 175471 -> 0 bytes
grails-forge/docs/dbinstance-options.png | Bin 100921 -> 0 bytes
grails-forge/docs/enable-cloud-sql-admin-api.png | Bin 151032 -> 0 bytes
grails-forge/docs/enable-compute-engine-api.png | Bin 79831 -> 0 bytes
.../etc/bin/generate-build-artifact-hashes.groovy | 79 ---
grails-forge/etc/bin/test-reproducible-builds.sh | 64 ---
grails-forge/gradle.properties | 33 +-
grails-forge/gradle/code-style-config.gradle | 96 ----
grails-forge/gradle/doc-config.gradle | 15 +-
grails-forge/gradle/groovy-version-pin.gradle | 29 -
.../gradle/micronaut-openapi-config.gradle | 53 --
grails-forge/gradle/test-config.gradle | 26 +-
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
grails-forge/grails-cli-shadow/build.gradle | 11 +
grails-forge/grails-cli/build.gradle | 16 +-
.../grails/cli/DelegatingShellApplication.groovy | 2 +-
.../grails-forge-analytics-postgres/build.gradle | 120 ----
.../analytics/postgres/AnalyticsController.java | 98 ----
.../forge/analytics/postgres/Application.java | 140 -----
.../analytics/postgres/ApplicationRepository.java | 53 --
.../grails/forge/analytics/postgres/Feature.java | 79 ---
.../analytics/postgres/FeatureRepository.java | 121 ----
.../org/grails/forge/analytics/postgres/Main.java | 49 --
.../postgres/gcp/GoogleCloudSqlSetup.java | 58 --
.../native-image.properties | 24 -
.../src/main/resources/application-dev.yml | 9 -
.../src/main/resources/application.yml | 14 -
.../resources/databasemigrations/V1__schema.sql | 21 -
.../src/main/resources/logback.xml | 15 -
.../postgres/StoreGeneratedProjectStatsSpec.groovy | 125 -----
grails-forge/grails-forge-api/build.gradle | 83 ---
.../grails/forge/api/ApplicationController.java | 240 --------
.../org/grails/forge/api/ApplicationTypeDTO.java | 129 -----
.../forge/api/ApplicationTypeOperations.java | 75 ---
.../org/grails/forge/api/DevelopmentReloading.java | 50 --
.../grails/forge/api/DevelopmentReloadingDTO.java | 103 ----
.../main/java/org/grails/forge/api/FeatureDTO.java | 153 -----
.../java/org/grails/forge/api/FeatureService.java | 104 ----
.../java/org/grails/forge/api/GormImplDTO.java | 111 ----
.../java/org/grails/forge/api/JdkVersionDTO.java | 110 ----
.../java/org/grails/forge/api/LanguageDTO.java | 124 -----
.../main/java/org/grails/forge/api/LinkDTO.java | 63 ---
.../java/org/grails/forge/api/RequestInfo.java | 139 -----
.../java/org/grails/forge/api/SelectOptionDTO.java | 62 ---
.../java/org/grails/forge/api/ServletImplDTO.java | 100 ----
.../forge/api/analytics/GenerationListener.java | 68 ---
.../forge/api/bind/RequestInfoArgumentBinder.java | 93 ----
.../forge/api/create/AbstractCreateController.java | 117 ----
.../forge/api/create/zip/ZipCreateController.java | 196 -------
.../forge/api/create/zip/ZipCreateOperation.java | 69 ---
.../org/grails/forge/api/diff/DiffController.java | 228 --------
.../org/grails/forge/api/diff/DiffOperations.java | 92 ---
.../api/options/ApplicationTypeSelectOptions.java | 42 --
.../options/DevelopmentReloadingSelectOptions.java | 42 --
.../forge/api/options/JdkVersionSelectOptions.java | 42 --
.../forge/api/options/LanguageSelectOptions.java | 42 --
.../forge/api/options/SelectOptionsController.java | 60 --
.../forge/api/options/SelectOptionsOperations.java | 27 -
.../api/options/ServletImplSelectOptions.java | 42 --
.../forge/api/preview/PreviewController.java | 120 ----
.../forge/api/preview/PreviewOperations.java | 61 --
.../grails-forge-api/reflect-config.json | 52 --
.../grails-forge-api/resource-config.json | 11 -
.../src/main/resources/application.yml | 5 -
.../src/main/resources/select_options.properties | 1 -
.../forge/api/ApplicationControllerSpec.groovy | 111 ----
.../grails/forge/api/ApplicationTypeClient.groovy | 42 --
.../org/grails/forge/api/CreateClient.groovy | 57 --
.../groovy/org/grails/forge/api/DiffClient.groovy | 56 --
.../org/grails/forge/api/DiffControllerSpec.groovy | 85 ---
.../grails/forge/api/FeatureControllerSpec.groovy | 211 -------
.../org/grails/forge/api/PreviewClient.groovy | 42 --
.../grails/forge/api/PreviewControllerSpec.groovy | 62 ---
.../forge/api/ZipCreateControllerSpec.groovy | 145 -----
.../src/test/resources/features_es.properties | 4 -
.../src/test/resources/logback.xml | 17 -
grails-forge/grails-forge-cli/build.gradle | 109 ++--
.../grails-app/conf/application.yml | 28 +
.../init/org/grails/forge/cli/Application.groovy | 84 +++
.../forge/cli/command/templates/controller.gsp} | 23 +-
.../cli/command/templates/controllerSpec.gsp} | 25 +-
.../views/forge/cli/command/templates/domain.gsp} | 25 +-
.../forge/cli/command/templates/domainSpec.gsp} | 27 +-
.../forge/cli/command/templates/interceptor.gsp} | 25 +-
.../cli/command/templates/interceptorSpec.gsp} | 27 +-
.../views/forge/cli/command/templates/job.gsp} | 23 +-
.../views/forge/cli/command/templates/service.gsp} | 27 +-
.../forge/cli/command/templates/serviceSpec.gsp} | 25 +-
.../views/forge/cli/command/templates/taglib.gsp} | 23 +-
.../forge/cli/command/templates/taglibSpec.gsp} | 25 +-
.../org/grails/forge/cli/CodeGenConfig.groovy | 189 +++++++
.../grails/forge/cli/CommonOptionsMixin.groovy} | 28 +-
.../groovy/org/grails/forge/cli/ForgeCli.groovy | 133 +++++
.../org/grails/forge/cli/ForgeCommand.groovy | 67 +++
.../grails/forge/cli/GrailsPicocliFactory.groovy | 59 ++
.../org/grails/forge/cli/InteractiveShell.groovy} | 107 ++--
.../forge/cli/command/AddPropertyCommand.groovy | 169 ++++++
.../grails/forge/cli/command/BaseCommand.groovy | 88 +++
.../grails/forge/cli/command/CodeGenCommand.groovy | 118 ++++
.../forge/cli/command/CreateAppCommand.groovy} | 45 +-
.../grails/forge/cli/command/CreateCommand.groovy | 126 +++++
.../cli/command/CreateControllerCommand.groovy | 84 +++
.../cli/command/CreateDomainClassCommand.groovy | 84 +++
.../cli/command/CreateInterceptorCommand.groovy | 84 +++
.../forge/cli/command/CreateJobCommand.groovy | 85 +++
.../forge/cli/command/CreatePluginCommand.groovy} | 45 +-
.../forge/cli/command/CreateRestApiCommand.groovy} | 45 +-
.../forge/cli/command/CreateServiceCommand.groovy | 84 +++
.../forge/cli/command/CreateTagLibCommand.groovy | 84 +++
.../cli/command/CreateWebPluginCommand.groovy} | 45 +-
.../forge/cli/command/CreateWebappCommand.groovy} | 45 +-
.../command/DevelopmentReloadingCandidates.groovy} | 18 +-
.../command/DevelopmentReloadingConverter.groovy} | 20 +-
.../forge/cli/command/GormImplCandidates.groovy} | 17 +-
.../forge/cli/command/GormImplConverter.groovy} | 22 +-
.../forge/cli/command/LanguageCandidates.groovy} | 17 +-
.../forge/cli/command/LanguageConverter.groovy} | 18 +-
.../grails/forge/cli/command/ListFeatures.groovy | 106 ++++
.../cli/command/ServletImplCandidates.groovy} | 17 +-
.../forge/cli/command/ServletImplConverter.groovy} | 20 +-
.../forge/cli/util/GrailsVersionProvider.groovy} | 28 +-
.../java/org/grails/forge/cli/Application.java | 128 -----
.../java/org/grails/forge/cli/CodeGenConfig.java | 180 ------
.../org/grails/forge/cli/GrailsPicocliFactory.java | 57 --
.../forge/cli/command/AddPropertyCommand.java | 181 ------
.../org/grails/forge/cli/command/BaseCommand.java | 92 ---
.../grails/forge/cli/command/CodeGenCommand.java | 123 -----
.../grails/forge/cli/command/CreateCommand.java | 137 -----
.../forge/cli/command/CreateControllerCommand.java | 88 ---
.../cli/command/CreateDomainClassCommand.java | 88 ---
.../cli/command/CreateInterceptorCommand.java | 88 ---
.../grails/forge/cli/command/CreateJobCommand.java | 87 ---
.../forge/cli/command/CreateServiceCommand.java | 88 ---
.../forge/cli/command/CreateTagLibCommand.java | 88 ---
.../org/grails/forge/cli/command/ListFeatures.java | 111 ----
.../grails-forge-cli/native-image.properties | 2 -
.../grails-forge-cli/resource-config.json | 7 -
.../src/main/resources/simplelogger.properties | 23 +
.../org/grails/forge/cli/ApplicationSpec.groovy | 110 ++++
.../CodeGenConfigDevelopmentReloadingSpec.groovy | 24 +-
.../org/grails/forge/cli/CommandFixture.groovy | 6 +-
.../groovy/org/grails/forge/cli/CommandSpec.groovy | 8 +
.../org/grails/forge/cli/ForgeCliSpec.groovy} | 41 +-
.../cli/command/ApplicationCommandSpec.groovy | 18 +-
.../forge/cli/command/CodeGenCommandSpec.groovy | 21 +-
.../forge/cli/command/CreateAppCommandSpec.groovy | 34 +-
.../cli/command/CreateControllerCommandSpec.groovy | 8 -
.../command/CreateDomainClassCommandSpec.groovy | 7 -
.../command/CreateInterceptorCommandSpec.groovy | 9 -
.../forge/cli/command/CreateJobCommandSpec.groovy | 8 -
.../cli/command/CreateServiceCommandSpec.groovy | 8 -
.../cli/command/CreateTagLibCommandSpec.groovy | 12 -
.../groovy/org/grails/forge/cli/CliRunner.groovy} | 21 +-
grails-forge/grails-forge-core/build.gradle | 80 +--
.../asciidoctor/template/asciidocGradle.gsp} | 17 +-
.../feature/asciidoctor/template/indexAdoc.gsp} | 8 +-
.../views/forge/feature/build/gitignore.gsp} | 6 +-
.../feature/build/gradle/templates/buildGradle.gsp | 140 +++++
.../gradle/templates/buildSrcBuildGradle.gsp} | 56 +-
.../build/gradle/templates/dependencies.gsp} | 34 +-
.../build/gradle/templates/gradleProperties.gsp} | 38 +-
.../gradle/templates/gradleWrapperProperties.gsp} | 33 +-
.../build/gradle/templates/settingsGradle.gsp | 45 +-
.../grails-app/views/forge/feature/cli.gsp | 43 ++
.../plain/templates/plainGithubWorkflow.gsp} | 27 +-
.../github/workflows/templates/javaSetup.gsp} | 24 +-
.../grails/templates/applicationController.gsp} | 14 +-
.../forge/feature/grails/templates/plugin.gsp} | 41 +-
.../feature/grails/templates/urlMappings.gsp} | 29 +-
.../feature/lang/groovy/templates/application.gsp} | 58 +-
.../feature/lang/groovy/templates/bootStrap.gsp} | 37 +-
.../forge/feature/logging/template/logback.gsp} | 12 +-
.../migration/templates/dbMigrationGradle.gsp} | 11 +-
.../forge/feature/other/template/maindocs.gsp} | 23 +-
.../forge/feature/other/template/markdownLink.gsp} | 11 +-
.../views/forge/feature/other/template/readme.gsp} | 45 +-
.../forge/feature/security/template/role.gsp} | 18 +-
.../template/securityApplicationGroovy.gsp} | 31 +-
.../forge/feature/security/template/user.gsp} | 26 +-
.../feature/security/template/userClassic.gsp} | 28 +-
.../security/template/userClassicService.gsp} | 16 +-
.../feature/security/template/userClassicSpec.gsp} | 14 +-
.../feature/security/template/userController.gsp} | 16 +-
.../forge/feature/security/template/userRole.gsp} | 20 +-
.../feature/security/template/userService.gsp} | 20 +-
.../forge/feature/security/template/userSpec.gsp} | 14 +-
.../feature/spring/template/springResources.gsp} | 6 +-
.../feature/test/template/containerGebSpec.gsp} | 25 +-
.../forge/feature/test/template/gebConfig.gsp} | 14 +-
.../views/forge/feature/test/template/gebSpec.gsp} | 25 +-
.../forge/feature/view/json/templates/_errors.gsp} | 6 +-
.../forge/feature/view/json/templates/_object.gsp} | 8 +-
.../forge/feature/view/json/templates/error.gsp} | 6 +-
.../forge/feature/view/json/templates/index.gsp} | 6 +-
.../feature/view/json/templates/notFound.gsp} | 6 +-
.../feature/view/markup/templates/_errors.gsp} | 6 +-
.../feature/view/markup/templates/_object.gsp} | 8 +-
.../forge/feature/view/markup/templates/error.gsp} | 6 +-
.../forge/feature/view/markup/templates/index.gsp} | 6 +-
.../feature/view/markup/templates/notFound.gsp} | 6 +-
.../views/forge/template/api/grailsForgeApi.gsp} | 37 +-
.../org/grails/forge/ForgeCoreConfiguration.groovy | 50 ++
.../org/grails/forge/ForgeGrailsPlugin.groovy | 49 ++
.../forge/application/ApplicationType.groovy} | 44 +-
.../forge/application/ContextFactory.groovy} | 131 +++--
.../forge/application/OperatingSystem.groovy} | 27 +-
.../application/PluginAvailableFeatures.groovy} | 20 +-
.../org/grails/forge/application/Project.groovy | 93 ++++
.../forge/application/ProjectIdentifier.groovy} | 26 +-
.../application/RestApiAvailableFeatures.groovy} | 20 +-
.../forge/application/WebAvailableFeatures.groovy} | 23 +-
.../application/WebPluginAvailableFeatures.groovy} | 20 +-
.../generator/DefaultProjectGenerator.groovy} | 103 ++--
.../application/generator/GeneratorContext.groovy | 397 +++++++++++++
.../application/generator/ProjectGenerator.groovy} | 30 +-
.../org/grails/forge/build/BuildPlugin.groovy} | 28 +-
.../org/grails/forge/build/BuildProperties.groovy} | 36 +-
.../org/grails/forge/build/Comment.groovy} | 15 +-
.../org/grails/forge/build/Property.groovy} | 15 +-
.../forge/build/dependencies/Coordinate.groovy} | 45 +-
.../build/dependencies/CoordinateResolver.groovy} | 10 +-
.../dependencies/DefaultCoordinateResolver.groovy} | 32 +-
.../forge/build/dependencies/Dependency.groovy | 393 +++++++++++++
.../build/dependencies/DependencyContext.groovy} | 41 +-
.../build/dependencies/DependencyCoordinate.groovy | 120 ++++
.../dependencies/LookupFailedException.groovy} | 12 +-
.../grails/forge/build/dependencies/Phase.groovy} | 8 +-
.../PomDependencyVersionResolver.groovy | 150 +++++
.../grails/forge/build/dependencies/Scope.groovy} | 97 ++--
.../grails/forge/build/dependencies/Source.groovy} | 8 +-
.../build/gradle/DefaultGradleRepository.groovy | 141 +++++
.../grails/forge/build/gradle/GradleBuild.groovy | 162 ++++++
.../forge/build/gradle/GradleBuildCreator.groovy} | 58 +-
.../forge/build/gradle/GradleConfiguration.groovy} | 134 ++---
.../forge/build/gradle/GradleDependency.groovy | 123 +++++
.../grails/forge/build/gradle/GradleDsl.groovy} | 8 +-
.../grails/forge/build/gradle/GradlePlugin.groovy | 256 +++++++++
.../forge/build/gradle/GradleRepository.groovy} | 97 ++--
.../build/gradle/MavenCentralRepository.groovy} | 25 +-
.../build/gradle/MavenLocalRepository.groovy} | 25 +-
.../build/gradle/VersionRegexRepoFilter.groovy | 56 ++
.../grails/forge/build/gradle/VersionType.groovy} | 8 +-
.../grails/forge/defaults/HasDefaultBuild.groovy} | 11 +-
.../HasDefaultDevelopmentReloading.groovy} | 12 +-
.../grails/forge/defaults/IncludesDefaults.groovy} | 10 +-
.../grails/forge/defaults/LanguageDefaults.groovy} | 32 +-
.../org/grails/forge/diff/FeatureDiffer.groovy} | 114 ++--
.../forge/feature/ApplicationFeature.groovy} | 14 +-
.../grails/forge/feature/AvailableFeatures.groovy} | 20 +-
.../forge/feature/BaseAvailableFeatures.groovy | 88 +++
.../org/grails/forge/feature/Category.groovy | 65 +++
.../grails/forge/feature/DefaultFeature.groovy} | 14 +-
.../org/grails/forge/feature/Feature.groovy} | 50 +-
.../org/grails/forge/feature/FeatureContext.groovy | 133 +++++
.../org/grails/forge/feature/FeaturePhase.groovy} | 17 +-
.../grails/forge/feature/FeaturePredicate.groovy} | 11 +-
.../grails/forge/feature/FeatureRegistry.groovy | 94 ++++
.../org/grails/forge/feature/Features.groovy | 134 +++++
.../org/grails/forge/feature/OneOfFeature.groovy} | 10 +-
.../grails/forge/feature/ai/GrailsSpringAi.groovy | 87 +++
.../forge/feature/ai/SpringAiAnthropic.groovy | 62 +++
.../grails/forge/feature/ai/SpringAiOllama.groovy | 68 +++
.../grails/forge/feature/ai/SpringAiOpenAi.groovy | 62 +++
.../feature/ai/SpringAiProviderFeature.groovy | 90 +++
.../org/grails/forge/feature/api/OpenApi.groovy | 87 +++
.../forge/feature/asciidoctor/Asciidoctor.groovy | 83 +++
.../feature/assetPipeline/AssetPipeline.groovy | 159 ++++++
.../forge/feature/build/BuildFeature.groovy} | 18 +-
.../forge/feature/build/gradle/Dockerfile.groovy | 85 +++
.../forge/feature/build/gradle/Gradle.groovy | 100 ++++
.../feature/build/gradle/GradleBuildSrc.groovy | 77 +++
.../build/gradle/GradleBuildSrcFeature.groovy} | 22 +-
.../feature/build/gradle/GradleSettingsFile.groovy | 81 +++
.../build/gradle/GradleSettingsFileFeature.groovy} | 22 +-
.../forge/feature/cache/CacheFeature.groovy} | 18 +-
.../org/grails/forge/feature/cache/EHCache.groovy | 67 +++
.../grails/forge/feature/cache/GrailsCache.groovy | 76 +++
.../config/ApplicationConfiguration.groovy} | 38 +-
.../feature/config/BootstrapConfiguration.groovy} | 24 +-
.../forge/feature/config/Configuration.groovy} | 157 +++---
.../feature/config/ConfigurationFeature.groovy} | 39 +-
.../grails/forge/feature/config/Properties.groovy} | 47 +-
.../org/grails/forge/feature/config/Yaml.groovy} | 54 +-
.../forge/feature/database/AsyncGorm.groovy} | 68 +--
.../DatabaseDriverConfigurationFeature.groovy} | 57 +-
.../feature/database/DatabaseDriverFeature.groovy | 88 +++
.../forge/feature/database/GormFeature.groovy} | 26 +-
.../feature/database/GormOneOfFeature.groovy} | 12 +-
.../feature/database/GrailsDataHibernate5.groovy | 128 +++++
.../feature/database/GrailsDataHibernate7.groovy | 124 +++++
.../database/GrailsDataHibernateValidator.groovy} | 35 +-
.../feature/database/GrailsDataMongoDB.groovy} | 91 ++-
.../forge/feature/database/GraphqlGorm.groovy} | 68 +--
.../org/grails/forge/feature/database/H2.groovy | 106 ++++
.../forge/feature/database/JpaFeature.groovy} | 8 +-
.../feature/database/MongoDBTestingSupport.groovy | 78 +++
.../MongoDBTestingSupportValidator.groovy} | 28 +-
.../forge/feature/database/MongoFeature.groovy} | 30 +-
.../grails/forge/feature/database/MongoSync.groovy | 87 +++
.../org/grails/forge/feature/database/MySQL.groovy | 98 ++++
.../grails/forge/feature/database/Neo4jGorm.groovy | 77 +++
.../forge/feature/database/PostgreSQL.groovy | 99 ++++
.../grails/forge/feature/database/SQLServer.groovy | 98 ++++
.../forge/feature/database/TestContainers.groovy | 134 +++++
.../github/workflows/GitHubWorkflowFeature.groovy} | 33 +-
.../forge/feature/github/workflows/Secret.groovy} | 37 +-
.../plain/PlainGithubWorkflowFeature.groovy | 59 ++
.../grails/forge/feature/grails/GrailsBase.groovy | 117 ++++
.../feature/grails/GrailsCompileStatic.groovy} | 38 +-
.../feature/grails/GrailsDefaultPlugins.groovy | 91 +++
.../forge/feature/grails/GrailsGradlePlugin.groovy | 82 +++
.../forge/feature/grails/GrailsUrlMappings.groovy | 63 +++
.../forge/feature/grails/GrailsWebConsole.groovy | 74 +++
.../feature/grailsProfiles/GrailsProfiles.groovy | 79 +++
.../feature/grailsWrapper/GrailsWrapper.groovy | 81 +++
.../forge/feature/lang/LanguageFeature.groovy} | 22 +-
.../feature/lang/groovy/GrailsApplication.groovy | 88 +++
.../lang/groovy/GrailsApplicationFeature.groovy} | 10 +-
.../grails/forge/feature/logging/Logback.groovy} | 56 +-
.../forge/feature/logging/LogbackConfig.groovy} | 56 +-
.../forge/feature/logging/LoggingFeature.groovy} | 18 +-
.../forge/feature/micronaut/GrailsMicronaut.groovy | 103 ++++
.../micronaut/GrailsMicronautValidator.groovy} | 29 +-
.../feature/micronaut/MicronautHttpClient.groovy | 117 ++++
.../migration/DatabaseMigrationPlugin.groovy | 80 +++
.../feature/migration/MigrationFeature.groovy} | 18 +-
.../org/grails/forge/feature/other/AppName.groovy | 66 +++
.../grails/forge/feature/other/GrailsQuartz.groovy | 74 +++
.../feature/other/GrailsStartupProgress.groovy | 79 +++
.../forge/feature/other/HibernateValidator.groovy | 70 +++
.../org/grails/forge/feature/other/Readme.groovy | 94 ++++
.../grails/forge/feature/other/ShadePlugin.groovy | 77 +++
.../grails/forge/feature/reloading/Jrebel.groovy | 74 +++
.../feature/reloading/ReloadingFeature.groovy} | 26 +-
.../feature/reloading/SpringBootDevTools.groovy | 93 ++++
.../feature/security/GrailsSpringSecurity.groovy | 90 +++
.../feature/security/GrailsSpringSecurityUi.groovy | 97 ++++
.../security/PrimarySecurityFeature.groovy} | 10 +-
.../forge/feature/security/SecurityFeature.groovy | 87 +++
.../security/SpringBootStarterSecurity.groovy | 86 +++
.../forge/feature/sitemesh3/Sitemesh3.groovy} | 54 +-
.../feature/spring/SpringBootAutoconfigure.groovy | 67 +++
.../spring/SpringBootEmbeddedServlet.groovy} | 22 +-
.../feature/spring/SpringBootJettyFeature.groovy | 63 +++
.../feature/spring/SpringBootStarterFeature.groovy | 76 +++
.../feature/spring/SpringBootTomcatFeature.groovy} | 60 +-
.../spring/SpringBootUndertowFeature.groovy} | 54 +-
.../spring/SpringBootVirtualThreads.groovy} | 46 +-
.../forge/feature/spring/SpringResources.groovy | 65 +++
.../feature/spring/SpringThreadingFeature.groovy} | 18 +-
.../grails/forge/feature/test/GebFeature.groovy} | 22 +-
.../forge/feature/test/GebWithLocalBrowsers.groovy | 124 +++++
.../feature/test/GebWithTestcontainers.groovy | 106 ++++
.../forge/feature/test/GormTestingSupport.groovy | 67 +++
.../feature/test/GrailsWebTestingSupport.groovy | 67 +++
.../org/grails/forge/feature/test/Mockito.groovy | 77 +++
.../forge/feature/test/MockitoValidator.groovy} | 25 +-
.../org/grails/forge/feature/test/Spock.groovy | 73 +++
.../feature/test/ViewsJsonTestingSupport.groovy | 67 +++
.../validation/CompositeFeatureValidator.groovy} | 35 +-
.../feature/validation/FeatureValidator.groovy} | 18 +-
.../validation/OneOfFeatureValidator.groovy} | 39 +-
.../org/grails/forge/feature/view/GrailsGsp.groovy | 106 ++++
.../grails/forge/feature/view/GrailsLayout.groovy} | 34 +-
.../grails/forge/feature/view/GrailsViews.groovy | 72 +++
.../grails/forge/feature/view/GspLayout.groovy} | 24 +-
.../grails/forge/feature/view/Scaffolding.groovy | 88 +++
.../grails/forge/feature/view/json/ViewJson.groovy | 93 ++++
.../forge/feature/view/markup/ViewMarkup.groovy | 77 +++
.../org/grails/forge/feature/web/GrailsWeb.groovy} | 36 +-
.../org/grails/forge/io/ConsoleOutput.groovy} | 37 +-
.../grails/forge/io/FileSystemOutputHandler.groovy | 144 +++++
.../org/grails/forge/io/MapOutputHandler.groovy} | 45 +-
.../org/grails/forge/io/OutputHandler.groovy} | 17 +-
.../org/grails/forge/io/OutputUtils.groovy} | 43 +-
.../org/grails/forge/io/ZipOutputHandler.groovy | 146 +++++
.../org/grails/forge/options/BuildTool.groovy | 78 +++
.../forge/options/DefaultTestViewProvider.groovy} | 19 +-
.../forge/options/DevelopmentReloading.groovy} | 48 +-
.../org/grails/forge/options/FeatureFilter.groovy} | 59 +-
.../org/grails/forge/options/GormImpl.groovy} | 52 +-
.../org/grails/forge/options/JdkVersion.groovy} | 29 +-
.../org/grails/forge/options/Language.groovy | 99 ++++
.../groovy/org/grails/forge/options/Options.groovy | 128 +++++
.../org/grails/forge/options/ServletImpl.groovy} | 38 +-
.../org/grails/forge/options/TestFramework.groovy} | 53 +-
.../grails/forge/options/TestViewProvider.groovy} | 22 +-
.../grails/forge/template/BinaryTemplate.groovy} | 19 +-
.../grails/forge/template/Config4kTemplate.groovy} | 43 +-
.../forge/template/DefaultTemplateRenderer.groovy} | 63 ++-
.../org/grails/forge/template/ForgePages.groovy | 109 ++++
.../org/grails/forge/template/GspTemplate.groovy} | 46 +-
.../org/grails/forge/template/GspView.groovy | 69 +++
.../forge/template/PropertiesTemplate.groovy} | 65 +--
.../org/grails/forge/template/RenderResult.groovy} | 69 +--
.../grails/forge/template/StringTemplate.groovy} | 28 +-
.../org/grails/forge/template/Template.groovy} | 13 +-
.../grails/forge/template/TemplateModel.groovy} | 8 +-
.../grails/forge/template/TemplateRenderer.groovy} | 22 +-
.../org/grails/forge/template/URLTemplate.groovy} | 45 +-
.../org/grails/forge/template/Writable.groovy} | 9 +-
.../org/grails/forge/template/YamlTemplate.groovy | 89 +++
.../org/grails/forge/util/IOFeatureUtil.groovy} | 42 +-
.../org/grails/forge/util/NameUtils.groovy} | 471 ++++++++--------
.../org/grails/forge/util/ThrowingSupplier.groovy} | 10 +-
.../org/grails/forge/util/VersionInfo.groovy | 188 +++++++
.../org/grails/forge/util/ZipUtil.groovy} | 72 ++-
.../java/org/grails/forge/analytics/Generated.java | 112 ----
.../grails/forge/analytics/SelectedFeature.java | 38 --
.../forge/application/PluginAvailableFeatures.java | 35 --
.../java/org/grails/forge/application/Project.java | 94 ----
.../application/RestApiAvailableFeatures.java | 34 --
.../forge/application/WebAvailableFeatures.java | 35 --
.../application/WebPluginAvailableFeatures.java | 34 --
.../application/generator/GeneratorContext.java | 387 -------------
.../forge/build/dependencies/Dependency.java | 393 -------------
.../build/dependencies/DependencyCoordinate.java | 121 ----
.../build/dependencies/LookupFailedException.java | 26 -
.../dependencies/PomDependencyVersionResolver.java | 136 -----
.../build/gradle/DefaultGradleRepository.java | 142 -----
.../org/grails/forge/build/gradle/GradleBuild.java | 167 ------
.../forge/build/gradle/GradleDependency.java | 125 -----
.../grails/forge/build/gradle/GradlePlugin.java | 256 ---------
.../forge/build/gradle/VersionRegexRepoFilter.java | 22 -
.../grails/forge/defaults/IncludesDefaults.java | 23 -
.../forge/feature/BaseAvailableFeatures.java | 86 ---
.../java/org/grails/forge/feature/Category.java | 60 --
.../org/grails/forge/feature/FeatureContext.java | 133 -----
.../java/org/grails/forge/feature/Features.java | 137 -----
.../java/org/grails/forge/feature/api/OpenApi.java | 87 ---
.../forge/feature/asciidoctor/Asciidoctor.java | 82 ---
.../forge/feature/assetPipeline/AssetPipeline.java | 160 ------
.../forge/feature/build/gradle/Dockerfile.java | 85 ---
.../grails/forge/feature/build/gradle/Gradle.java | 109 ----
.../forge/feature/build/gradle/GradleBuildSrc.java | 81 ---
.../feature/build/gradle/GradleSettingsFile.java | 80 ---
.../build/gradle/templates/buildGradle.rocker.raw | 156 ------
.../gradle/templates/gradleProperties.rocker.raw | 33 --
.../gradle/templates/settingsGradle.rocker.raw | 35 --
.../org/grails/forge/feature/cache/EHCache.java | 67 ---
.../grails/forge/feature/cache/GrailsCache.java | 76 ---
.../java/org/grails/forge/feature/cli.rocker.raw | 48 --
.../feature/config/ApplicationConfiguration.java | 40 --
.../feature/database/DatabaseDriverFeature.java | 89 ---
.../feature/database/GrailsDataHibernate5.java | 129 -----
.../feature/database/GrailsDataHibernate7.java | 125 -----
.../java/org/grails/forge/feature/database/H2.java | 106 ----
.../feature/database/MongoDBTestingSupport.java | 76 ---
.../grails/forge/feature/database/MongoSync.java | 85 ---
.../org/grails/forge/feature/database/MySQL.java | 96 ----
.../grails/forge/feature/database/Neo4jGorm.java | 78 ---
.../grails/forge/feature/database/PostgreSQL.java | 97 ----
.../grails/forge/feature/database/SQLServer.java | 96 ----
.../forge/feature/database/TestContainers.java | 134 -----
.../plain/PlainGithubWorkflowFeature.java | 57 --
.../grails/forge/feature/grails/GrailsBase.java | 117 ----
.../forge/feature/grails/GrailsDefaultPlugins.java | 91 ---
.../forge/feature/grails/GrailsGradlePlugin.java | 82 ---
.../forge/feature/grails/GrailsUrlMappings.java | 63 ---
.../forge/feature/grails/GrailsWebConsole.java | 74 ---
.../feature/grailsProfiles/GrailsProfiles.java | 80 ---
.../forge/feature/grailsWrapper/GrailsWrapper.java | 81 ---
.../feature/lang/groovy/GrailsApplication.java | 89 ---
.../forge/feature/micronaut/GrailsMicronaut.java | 103 ----
.../feature/micronaut/MicronautHttpClient.java | 117 ----
.../feature/migration/DatabaseMigrationPlugin.java | 79 ---
.../org/grails/forge/feature/other/AppName.java | 67 ---
.../grails/forge/feature/other/GrailsQuartz.java | 72 ---
.../forge/feature/other/GrailsStartupProgress.java | 78 ---
.../forge/feature/other/HibernateValidator.java | 68 ---
.../org/grails/forge/feature/other/Readme.java | 99 ----
.../grails/forge/feature/other/ShadePlugin.java | 75 ---
.../forge/feature/other/template/readme.rocker.raw | 41 --
.../org/grails/forge/feature/reloading/Jrebel.java | 74 ---
.../feature/reloading/SpringBootDevTools.java | 94 ----
.../feature/security/GrailsSpringSecurity.java | 91 ---
.../feature/security/GrailsSpringSecurityUi.java | 98 ----
.../forge/feature/security/SecurityFeature.java | 88 ---
.../security/SpringBootStarterSecurity.java | 88 ---
.../feature/spring/SpringBootAutoconfigure.java | 66 ---
.../feature/spring/SpringBootJettyFeature.java | 63 ---
.../feature/spring/SpringBootStarterFeature.java | 76 ---
.../forge/feature/spring/SpringResources.java | 64 ---
.../forge/feature/test/GebWithLocalBrowsers.java | 124 -----
.../forge/feature/test/GebWithTestcontainers.java | 106 ----
.../forge/feature/test/GormTestingSupport.java | 66 ---
.../feature/test/GrailsWebTestingSupport.java | 66 ---
.../org/grails/forge/feature/test/Mockito.java | 77 ---
.../java/org/grails/forge/feature/test/Spock.java | 73 ---
.../feature/test/ViewsJsonTestingSupport.java | 66 ---
.../org/grails/forge/feature/view/GrailsGsp.java | 107 ----
.../org/grails/forge/feature/view/GrailsViews.java | 70 ---
.../org/grails/forge/feature/view/Scaffolding.java | 88 ---
.../grails/forge/feature/view/json/ViewJson.java | 93 ----
.../forge/feature/view/markup/ViewMarkup.java | 75 ---
.../grails/forge/io/FileSystemOutputHandler.java | 149 -----
.../java/org/grails/forge/io/ZipOutputHandler.java | 133 -----
.../java/org/grails/forge/options/BuildTool.java | 79 ---
.../org/grails/forge/options/FeatureFilter.java | 66 ---
.../forge/options/GormImplTypeConverter.java | 47 --
.../java/org/grails/forge/options/Language.java | 100 ----
.../java/org/grails/forge/options/Options.java | 158 ------
.../org/grails/forge/template/RockerWritable.java | 39 --
.../org/grails/forge/template/TemplateModel.java | 22 -
.../org/grails/forge/template/YamlTemplate.java | 93 ----
.../java/org/grails/forge/util/VersionInfo.java | 196 -------
.../grails-forge-core/resource-config.json | 14 -
...rk.boot.autoconfigure.AutoConfiguration.imports | 1 +
.../org/grails/forge/ApplicationContextSpec.groovy | 8 +-
.../groovy/org/grails/forge/BuildBuilder.groovy | 12 +-
...tionContextSpec.groovy => ForgeContexts.groovy} | 30 +-
...ec.groovy => ForgeCoreConfigurationSpec.groovy} | 18 +-
.../org/grails/forge/ForgeGrailsPluginSpec.groovy | 134 +++++
.../PomDependencyVersionResolverSpec.groovy | 10 +-
.../forge/build/gradle/GradleRepositorySpec.groovy | 16 +
.../grails/forge/build/gradle/GradleSpec.groovy | 5 +-
.../forge/feature/BaseAvailableFeaturesSpec.groovy | 6 +-
.../forge/feature/ai/GrailsSpringAiSpec.groovy | 147 +++++
.../grails/forge/feature/cache/CacheSpec.groovy | 4 +-
.../forge/feature/config/PropertiesSpec.groovy | 4 +-
.../grails/forge/feature/config/YamlSpec.groovy | 4 +-
.../feature/database/GrailsDataMongoDBSpec.groovy | 2 +-
.../forge/feature/database/MongoSyncSpec.groovy | 16 +
.../grails/forge/feature/database/MySQLSpec.groovy | 2 +-
.../forge/feature/database/Neo4JGormSpec.groovy | 2 +-
.../forge/feature/database/PostgresSpec.groovy | 2 +-
.../forge/feature/database/SQLServerSpec.groovy | 2 +-
.../feature/database/TestContainersSpec.groovy | 6 +-
.../workflows/PlainGithubWorkflowSpec.groovy | 4 +-
.../forge/feature/grails/GrailsBaseSpec.groovy | 4 +-
.../feature/grails/GrailsGradlePluginSpec.groovy | 4 +-
.../feature/grails/GrailsWebConsoleSpec.groovy | 4 +-
.../feature/lang/GrailsApplicationSpec.groovy | 4 +-
.../feature/micronaut/GrailsMicronautSpec.groovy | 4 +-
.../micronaut/MicronautHttpClientSpec.groovy | 4 +-
.../forge/feature/spring/SpringBootSpec.groovy | 4 +-
.../spring/SpringBootVirtualThreadsSpec.groovy | 4 +-
.../forge/fixture/CommandOutputFixture.groovy | 4 +-
.../org/grails/forge/fixture/ContextFixture.groovy | 9 +-
.../org/grails/forge/options/GormImplSpec.groovy | 1 +
...iderSpec.groovy => TestViewProviderSpec.groovy} | 10 +-
.../plugintest/ForgePluginTestApplication.groovy} | 46 +-
.../org/grails/forge/util/VersionInfoSpec.groovy | 6 +-
grails-forge/grails-forge-web-netty/build.gradle | 156 ------
.../java/org/grails/forge/netty/Application.java | 41 --
.../forge/netty/analytics/AnalyticsClient.java | 43 --
.../grails-forge-web-netty/native-image.properties | 18 -
.../grails-forge-web-netty/resource-config.json | 8 -
.../src/main/resources/application-dev.yml | 5 -
.../src/main/resources/application.yml | 37 --
.../src/main/resources/logback.xml | 15 -
.../aws/.platform/nginx/conf.d/proxy.conf | 0
.../aws/Procfile | 0
.../aws/start.sh | 4 +-
grails-forge/grails-forge-web/build.gradle | 124 +++++
.../grails-app/conf/application.yml | 45 ++
.../grails-app/conf/logback.xml} | 24 +-
.../grails-app/conf/openapi-base.yml | 22 +
.../org/grails/forge/web/DiffController.groovy | 142 +++++
.../forge/web/ForgeApplicationController.groovy | 146 +++++
.../org/grails/forge/web/PreviewController.groovy | 102 ++++
.../forge/web/SelectOptionsController.groovy | 52 ++
.../org/grails/forge/web/UrlMappings.groovy | 37 ++
.../grails/forge/web/ZipCreateController.groovy | 132 +++++
.../grails-app/i18n/messages.properties | 19 +
.../init/org/grails/forge/web/Application.groovy} | 44 +-
.../forge/web/ForgeApiIntegrationSpec.groovy | 615 +++++++++++++++++++++
.../resources/api-test-messages_fr.properties} | 9 +-
.../org/grails/forge/api/ApplicationTypeDTO.groovy | 112 ++++
.../grails/forge/api/ApplicationTypeList.groovy} | 30 +-
.../forge/api/ApplicationTypeOperations.groovy} | 24 +-
.../forge/api/DevelopmentReloadingDTO.groovy | 90 +++
.../groovy/org/grails/forge/api/FeatureDTO.groovy | 136 +++++
.../org/grails/forge/api/FeatureList.groovy} | 30 +-
.../org/grails/forge/api/FeatureOperations.groovy} | 22 +-
.../org/grails/forge/api/FeatureService.groovy | 81 +++
.../forge/api/ForgeApplicationService.groovy | 114 ++++
.../org/grails/forge/api/ForgeMessages.groovy} | 16 +-
.../groovy/org/grails/forge/api/GormImplDTO.groovy | 98 ++++
.../forge/api/GrailsForgeConfiguration.groovy} | 78 ++-
.../org/grails/forge/api/JdkVersionDTO.groovy | 97 ++++
.../groovy/org/grails/forge/api/LanguageDTO.groovy | 109 ++++
.../groovy/org/grails/forge/api/LinkDTO.groovy} | 40 +-
.../groovy/org/grails/forge/api/Linkable.groovy} | 34 +-
.../org/grails/forge/api/Relationship.groovy} | 35 +-
.../groovy/org/grails/forge/api/RequestInfo.groovy | 78 +++
.../org/grails/forge/api/SelectOptionDTO.groovy} | 39 +-
.../org/grails/forge/api/SelectOptionsDTO.groovy} | 150 +++--
.../groovy/org/grails/forge/api/Selectable.groovy} | 14 +-
.../org/grails/forge/api/ServletImplDTO.groovy | 86 +++
.../org/grails/forge/api/UserAgentParser.groovy} | 39 +-
.../groovy/org/grails/forge/api/VersionDTO.groovy} | 34 +-
.../forge/api/create/CreateProjectService.groovy | 88 +++
.../options/ApplicationTypeSelectOptions.groovy} | 25 +-
.../DevelopmentReloadingSelectOptions.groovy} | 25 +-
.../api/options/GormImplSelectOptions.groovy} | 25 +-
.../api/options/JdkVersionSelectOptions.groovy} | 25 +-
.../api/options/LanguageSelectOptions.groovy} | 25 +-
.../api/options/SelectOptionsOperations.groovy} | 14 +-
.../api/options/ServletImplSelectOptions.groovy} | 25 +-
.../grails/forge/api/preview/PreviewDTO.groovy} | 33 +-
.../grails/forge/web/ForgeRequestSupport.groovy | 187 +++++++
.../grails/forge/web/GroovyObjectJsonMixin.groovy} | 30 +-
.../forge/web/ForgeRequestSupportSpec.groovy | 162 ++++++
.../forge/web/GrailsForgeConfigurationSpec.groovy | 72 +++
grails-forge/grailsforgearchitecture.jpeg | Bin 218395 -> 0 bytes
grails-forge/infrastructure/README.md | 2 +-
grails-forge/infrastructure/environment.yaml | 9 -
grails-forge/infrastructure/shared.yaml | 2 +-
grails-forge/sam-local.yml | 43 --
grails-forge/settings.gradle | 8 +-
grails-forge/test-core/build.gradle | 39 +-
.../forge/cli/command/CreateControllerSpec.groovy | 6 +-
.../forge/cli/command/CreateInterceptorSpec.groovy | 6 +-
.../forge/cli/command/CreateServiceSpec.groovy | 6 +-
.../forge/cli/command/CreateTagLibSpec.groovy | 6 +-
.../org/grails/forge/utils/CommandSpec.groovy | 13 +-
grails-geb/README.md | 18 +
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
.../plugin/core/GrailsPluginGradlePlugin.groovy | 11 +-
...GrailsPluginGradlePluginNative2AsciiSpec.groovy | 43 ++
.../plugin-native2ascii-off/build.gradle | 8 +
.../gradle.properties | 0
.../grails-app/conf/application.yml | 0
.../plugin-native2ascii-off/settings.gradle | 1 +
.../resources/templates/messages_ru.properties | 19 +
.../org/grails/gsp/compiler/GroovyPageParser.java | 18 +-
.../org/grails/gsp/compiler/LogicLineTrimmer.java | 234 ++++++++
.../org/grails/gsp/GspTrimLogicLinesSpec.groovy | 299 ++++++++++
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
grails-skills/ai/build.gradle | 34 ++
.../ai/skills/grails-ai-developer/SKILL.md | 270 +++++++++
.../developer/skills/grails-developer/SKILL.md | 3 +
grails-spring-ai/build.gradle | 96 ++++
.../grails-app/conf/plugin.yml | 36 +-
.../apache/grails/ai/SpringAiGrailsPlugin.groovy | 57 ++
.../ai/async/ChatResponseStreamItemRenderer.groovy | 68 +++
...rk.boot.autoconfigure.AutoConfiguration.imports | 1 +
.../grails/ai/SpringAiAutoConfigurationSpec.groovy | 74 +++
.../grails/ai/SpringAiPluginDefaultsSpec.groovy | 57 ++
.../grails/ai/SpringAiPromptLoggingSpec.groovy | 89 +++
.../ChatResponseStreamItemRendererSpec.groovy | 75 +++
grails-spring-security/acl/plugin/build.gradle | 8 +-
grails-spring-security/plugin/build.gradle | 159 +++---
grails-test-examples/ai/build.gradle | 54 ++
.../ai/grails-app/conf/application.yml | 39 +-
.../{latency => ai}/grails-app/conf/logback.xml | 0
.../controllers/aiapp/ChatController.groovy | 23 +-
.../controllers/aiapp/StreamController.groovy | 71 +++
.../controllers/aiapp/UrlMappings.groovy | 12 +-
.../ai/grails-app/init/aiapp/Application.groovy | 16 +-
.../grails-app/services/aiapp/AnswerService.groovy | 42 +-
.../groovy/aiapp/AiDefaultsSpec.groovy | 80 +++
.../groovy/aiapp/ChatFunctionalSpec.groovy | 79 +++
.../groovy/aiapp/OwnChatModelFunctionalSpec.groovy | 60 ++
.../groovy/aiapp/OwnModelApplication.groovy | 56 ++
.../groovy/aiapp/StreamingFunctionalSpec.groovy | 84 +++
.../src/test/groovy/aiapp/AnswerServiceSpec.groovy | 35 +-
.../build.gradle | 42 +-
.../groovy/grails/testing/ai/AiUnitTest.groovy | 112 ++++
.../ai/AiStubEnvironmentPostProcessor.groovy | 115 ++++
.../grails/testing/ai/AiStubProperties.groovy | 49 ++
.../apache/grails/testing/ai/AiTestBeans.groovy | 96 ++++
.../testing/ai/AiTestingAutoConfiguration.groovy | 70 +++
.../AiTestingVectorStoreAutoConfiguration.groovy | 67 +++
.../testing/ai/ResettableSimpleVectorStore.groovy | 34 +-
.../grails/testing/ai/ScriptedChatModel.groovy | 165 ++++++
.../testing/ai/SimpleVectorStoreBeans.groovy | 59 ++
.../grails/testing/ai/StubEmbeddingModel.groovy | 129 +++++
.../testing/ai/spock/AiSetupInterceptor.groovy | 55 ++
.../testing/ai/spock/AiSetupSpecInterceptor.groovy | 46 ++
.../ai/spock/AiTestingSupportExtension.groovy | 47 ++
.../additional-spring-configuration-metadata.json | 21 +
...ockframework.runtime.extension.IGlobalExtension | 1 +
.../src/main/resources/META-INF/spring.factories | 13 +-
...rk.boot.autoconfigure.AutoConfiguration.imports | 2 +
.../testing/ai/AiUnitTestConfiguredSpec.groovy | 85 +++
.../testing/ai/AiUnitTestOwnBeansSpec.groovy | 97 ++++
.../groovy/grails/testing/ai/AiUnitTestSpec.groovy | 113 ++++
.../groovy/grails/testing/ai/AnswerService.groovy | 18 +-
.../ai/AiStubEnvironmentPostProcessorSpec.groovy | 162 ++++++
.../ai/AiTestingAutoConfigurationSpec.groovy | 222 ++++++++
.../grails/testing/ai/ScriptedChatModelSpec.groovy | 216 ++++++++
.../testing/ai/StubEmbeddingModelSpec.groovy | 154 ++++++
settings.gradle | 8 +
threat-model.yaml | 4 +-
781 files changed, 26190 insertions(+), 22092 deletions(-)
create mode 120000 .agents/skills/grails-ai-developer
create mode 100644 build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/BomDependencyGraph.groovy
rename {grails-forge/buildSrc => build-logic/plugins}/src/main/groovy/org/apache/grails/buildsrc/WriteGrailsVersionInfoTask.groovy (89%)
rename {grails-forge/buildSrc => build-logic/plugins}/src/main/groovy/org/apache/grails/forge/buildlogic/shadowjar/GrailsGroovyExtensionTransformer.groovy (79%)
rename {grails-forge/buildSrc => build-logic/plugins}/src/main/groovy/org/apache/grails/forge/buildlogic/shadowjar/GrailsShadowLicenseTransform.groovy (100%)
rename {grails-forge/buildSrc => build-logic/plugins}/src/main/groovy/org/apache/grails/forge/buildlogic/shadowjar/GrailsShadowNoticeTransform.groovy (100%)
rename {grails-forge/buildSrc => build-logic/plugins}/src/main/groovy/org/grails/forge/internal/tasks/GenerateManpageAsciidoc.java (100%)
rename {grails-forge/buildSrc => build-logic/plugins}/src/main/groovy/org/grails/forge/internal/tasks/PicocliBuildCompletionTask.java (100%)
copy grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/GormImplSpec.groovy => build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/BomDependencyGraphSpec.groovy (51%)
create mode 100644 build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/WriteGrailsVersionInfoTaskSpec.groovy
create mode 100644 build-logic/plugins/src/test/groovy/org/apache/grails/forge/buildlogic/shadowjar/GrailsGroovyExtensionTransformerSpec.groovy
create mode 100644 grails-async/plugin/src/main/groovy/grails/async/web/StreamItemRenderer.groovy
copy grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/Relationship.java => grails-async/plugin/src/main/groovy/org/grails/plugins/web/async/mvc/DefaultStreamItemRenderer.groovy (51%)
create mode 100644 grails-async/plugin/src/main/groovy/org/grails/plugins/web/async/mvc/JacksonStreamItemRenderer.groovy
create mode 100644 grails-async/plugin/src/main/groovy/org/grails/plugins/web/async/mvc/PublisherActionResultTransformer.groovy
create mode 100644 grails-async/plugin/src/main/groovy/org/grails/plugins/web/async/mvc/ServerSentEventFormatter.groovy
create mode 100644 grails-async/plugin/src/main/groovy/org/grails/plugins/web/async/mvc/ServerSentEventSubscriber.groovy
create mode 100644 grails-async/plugin/src/main/groovy/org/grails/plugins/web/async/mvc/SingleValueSubscriber.groovy
create mode 100644 grails-async/plugin/src/main/resources/META-INF/additional-spring-configuration-metadata.json
create mode 100644 grails-async/plugin/src/test/groovy/org/grails/plugins/web/async/mvc/PublisherActionResultTransformerSpec.groovy
create mode 100644 grails-async/plugin/src/test/groovy/org/grails/plugins/web/async/mvc/ServerSentEventFormatterSpec.groovy
create mode 100644 grails-doc/src/en/guide/async/asyncStreaming.adoc
create mode 100644 grails-doc/src/en/guide/upgrading/upgrading81x.adoc
create mode 100644 grails-doc/src/en/guide/usingAi.adoc
create mode 100644 grails-doc/src/en/guide/usingAi/aiChatClient.adoc
create mode 100644 grails-doc/src/en/guide/usingAi/aiConfiguration.adoc
create mode 100644 grails-doc/src/en/guide/usingAi/aiInstallation.adoc
create mode 100644 grails-doc/src/en/guide/usingAi/aiProviders.adoc
create mode 100644 grails-doc/src/en/guide/usingAi/aiStreaming.adoc
create mode 100644 grails-doc/src/en/guide/usingAi/aiTesting.adoc
delete mode 100644 grails-forge/.gitattributes
delete mode 100644 grails-forge/.gitignore
delete mode 100644 grails-forge/buildSrc/build.gradle
delete mode 100644 grails-forge/buildSrc/settings.gradle
delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/JavaGeneratorRunnable.java
delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerConfiguration.java
delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerPlugin.java
delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerSourceSetProperty.java
delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerTask.java
delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/TemplateDirectorySet.java
delete mode 100644 grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/WhitespaceProcessor.java
delete mode 100644 grails-forge/config/checkstyle/checkstyle.xml
delete mode 100644 grails-forge/config/spotless.license.java
delete mode 100644 grails-forge/docs/choose-postgresql.png
delete mode 100644 grails-forge/docs/cloud_sql_create_intance.png
delete mode 100644 grails-forge/docs/create-database.png
delete mode 100644 grails-forge/docs/create-two-databases.png
delete mode 100644 grails-forge/docs/dbinstance-options.png
delete mode 100644 grails-forge/docs/enable-cloud-sql-admin-api.png
delete mode 100644 grails-forge/docs/enable-compute-engine-api.png
delete mode 100755 grails-forge/etc/bin/generate-build-artifact-hashes.groovy
delete mode 100755 grails-forge/etc/bin/test-reproducible-builds.sh
delete mode 100644 grails-forge/gradle/code-style-config.gradle
delete mode 100644 grails-forge/gradle/groovy-version-pin.gradle
delete mode 100644 grails-forge/gradle/micronaut-openapi-config.gradle
delete mode 100644 grails-forge/grails-forge-analytics-postgres/build.gradle
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/AnalyticsController.java
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/Application.java
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/ApplicationRepository.java
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/Feature.java
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/FeatureRepository.java
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/Main.java
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/gcp/GoogleCloudSqlSetup.java
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/resources/META-INF/native-image/io.micronaut.starter/micronaut-starter-analytics-postgres/native-image.properties
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/resources/application-dev.yml
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/resources/application.yml
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/resources/databasemigrations/V1__schema.sql
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/main/resources/logback.xml
delete mode 100644 grails-forge/grails-forge-analytics-postgres/src/test/groovy/org/grails/forge/analytics/postgres/StoreGeneratedProjectStatsSpec.groovy
delete mode 100644 grails-forge/grails-forge-api/build.gradle
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ApplicationController.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ApplicationTypeDTO.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ApplicationTypeOperations.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/DevelopmentReloading.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/DevelopmentReloadingDTO.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/FeatureDTO.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/FeatureService.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/GormImplDTO.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/JdkVersionDTO.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/LanguageDTO.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/LinkDTO.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/RequestInfo.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/SelectOptionDTO.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/ServletImplDTO.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/analytics/GenerationListener.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/bind/RequestInfoArgumentBinder.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/AbstractCreateController.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/zip/ZipCreateController.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/create/zip/ZipCreateOperation.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/diff/DiffController.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/diff/DiffOperations.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/ApplicationTypeSelectOptions.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/DevelopmentReloadingSelectOptions.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/JdkVersionSelectOptions.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/LanguageSelectOptions.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/SelectOptionsController.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/SelectOptionsOperations.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/options/ServletImplSelectOptions.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/preview/PreviewController.java
delete mode 100644 grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/preview/PreviewOperations.java
delete mode 100644 grails-forge/grails-forge-api/src/main/resources/META-INF/native-image/org.grails.forge.api/grails-forge-api/reflect-config.json
delete mode 100644 grails-forge/grails-forge-api/src/main/resources/META-INF/native-image/org.grails.forge.api/grails-forge-api/resource-config.json
delete mode 100644 grails-forge/grails-forge-api/src/main/resources/application.yml
delete mode 100644 grails-forge/grails-forge-api/src/main/resources/select_options.properties
delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/ApplicationControllerSpec.groovy
delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/ApplicationTypeClient.groovy
delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/CreateClient.groovy
delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/DiffClient.groovy
delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/DiffControllerSpec.groovy
delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/FeatureControllerSpec.groovy
delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/PreviewClient.groovy
delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/PreviewControllerSpec.groovy
delete mode 100644 grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/ZipCreateControllerSpec.groovy
delete mode 100644 grails-forge/grails-forge-api/src/test/resources/features_es.properties
delete mode 100644 grails-forge/grails-forge-api/src/test/resources/logback.xml
create mode 100644 grails-forge/grails-forge-cli/grails-app/conf/application.yml
create mode 100644 grails-forge/grails-forge-cli/grails-app/init/org/grails/forge/cli/Application.groovy
rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/controller.rocker.raw => grails-app/views/forge/cli/command/templates/controller.gsp} (72%)
rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/controllerSpec.rocker.raw => grails-app/views/forge/cli/command/templates/controllerSpec.gsp} (71%)
rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/domain.rocker.raw => grails-app/views/forge/cli/command/templates/domain.gsp} (73%)
copy grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/domainSpec.rocker.raw => grails-app/views/forge/cli/command/templates/domainSpec.gsp} (69%)
rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/interceptor.rocker.raw => grails-app/views/forge/cli/command/templates/interceptor.gsp} (74%)
rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/interceptorSpec.rocker.raw => grails-app/views/forge/cli/command/templates/interceptorSpec.gsp} (67%)
copy grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/job.rocker.raw => grails-app/views/forge/cli/command/templates/job.gsp} (76%)
rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/service.rocker.raw => grails-app/views/forge/cli/command/templates/service.gsp} (73%)
rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/serviceSpec.rocker.raw => grails-app/views/forge/cli/command/templates/serviceSpec.gsp} (71%)
rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/taglib.rocker.raw => grails-app/views/forge/cli/command/templates/taglib.gsp} (73%)
rename grails-forge/grails-forge-cli/{src/main/java/org/grails/forge/cli/command/templates/taglibSpec.rocker.raw => grails-app/views/forge/cli/command/templates/taglibSpec.gsp} (71%)
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/CodeGenConfig.groovy
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/CommonOptionsMixin.java => groovy/org/grails/forge/cli/CommonOptionsMixin.groovy} (64%)
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/ForgeCli.groovy
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/ForgeCommand.groovy
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/GrailsPicocliFactory.groovy
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/InteractiveShell.java => groovy/org/grails/forge/cli/InteractiveShell.groovy} (60%)
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/AddPropertyCommand.groovy
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/BaseCommand.groovy
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CodeGenCommand.groovy
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/CreateAppCommand.java => groovy/org/grails/forge/cli/command/CreateAppCommand.groovy} (52%)
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateCommand.groovy
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateControllerCommand.groovy
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateDomainClassCommand.groovy
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateInterceptorCommand.groovy
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateJobCommand.groovy
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/CreatePluginCommand.java => groovy/org/grails/forge/cli/command/CreatePluginCommand.groovy} (51%)
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/CreateRestApiCommand.java => groovy/org/grails/forge/cli/command/CreateRestApiCommand.groovy} (51%)
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateServiceCommand.groovy
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/CreateTagLibCommand.groovy
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/CreateWebPluginCommand.java => groovy/org/grails/forge/cli/command/CreateWebPluginCommand.groovy} (51%)
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/CreateWebappCommand.java => groovy/org/grails/forge/cli/command/CreateWebappCommand.groovy} (52%)
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/DevelopmentReloadingCandidates.java => groovy/org/grails/forge/cli/command/DevelopmentReloadingCandidates.groovy} (74%)
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/DevelopmentReloadingConverter.java => groovy/org/grails/forge/cli/command/DevelopmentReloadingConverter.groovy} (70%)
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/GormImplCandidates.java => groovy/org/grails/forge/cli/command/GormImplCandidates.groovy} (73%)
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/GormImplConverter.java => groovy/org/grails/forge/cli/command/GormImplConverter.groovy} (63%)
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/LanguageCandidates.java => groovy/org/grails/forge/cli/command/LanguageCandidates.groovy} (73%)
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/LanguageConverter.java => groovy/org/grails/forge/cli/command/LanguageConverter.groovy} (69%)
create mode 100644 grails-forge/grails-forge-cli/src/main/groovy/org/grails/forge/cli/command/ListFeatures.groovy
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/ServletImplCandidates.java => groovy/org/grails/forge/cli/command/ServletImplCandidates.groovy} (72%)
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/command/ServletImplConverter.java => groovy/org/grails/forge/cli/command/ServletImplConverter.groovy} (67%)
rename grails-forge/grails-forge-cli/src/main/{java/org/grails/forge/cli/util/GrailsVersionProvider.java => groovy/org/grails/forge/cli/util/GrailsVersionProvider.groovy} (72%)
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/Application.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/CodeGenConfig.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/GrailsPicocliFactory.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/AddPropertyCommand.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/BaseCommand.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CodeGenCommand.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateCommand.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateControllerCommand.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateDomainClassCommand.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateInterceptorCommand.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateJobCommand.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateServiceCommand.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/CreateTagLibCommand.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/command/ListFeatures.java
delete mode 100644 grails-forge/grails-forge-cli/src/main/resources/META-INF/native-image/org.grails.forge.cli/grails-forge-cli/native-image.properties
delete mode 100644 grails-forge/grails-forge-cli/src/main/resources/META-INF/native-image/org.grails.forge.cli/grails-forge-cli/resource-config.json
create mode 100644 grails-forge/grails-forge-cli/src/main/resources/simplelogger.properties
create mode 100644 grails-forge/grails-forge-cli/src/test/groovy/org/grails/forge/cli/ApplicationSpec.groovy
copy grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/GrailsForgeConfigurationSpec.groovy => grails-forge-cli/src/test/groovy/org/grails/forge/cli/ForgeCliSpec.groovy} (50%)
copy grails-forge/{buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerGradleException.java => grails-forge-cli/src/testFixtures/groovy/org/grails/forge/cli/CliRunner.groovy} (61%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/asciidoctor/template/asciidocGradle.rocker.raw => grails-app/views/forge/feature/asciidoctor/template/asciidocGradle.gsp} (86%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/asciidoctor/template/indexAdoc.rocker.raw => grails-app/views/forge/feature/asciidoctor/template/indexAdoc.gsp} (94%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/build/gitignore.rocker.raw => grails-app/views/forge/feature/build/gitignore.gsp} (95%)
create mode 100644 grails-forge/grails-forge-core/grails-app/views/forge/feature/build/gradle/templates/buildGradle.gsp
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/build/gradle/templates/buildSrcBuildGradle.rocker.raw => grails-app/views/forge/feature/build/gradle/templates/buildSrcBuildGradle.gsp} (56%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/build/gradle/templates/dependencies.rocker.raw => grails-app/views/forge/feature/build/gradle/templates/dependencies.gsp} (54%)
rename grails-forge/{grails-forge-cli/src/main/java/org/grails/forge/cli/command/templates/job.rocker.raw => grails-forge-core/grails-app/views/forge/feature/build/gradle/templates/gradleProperties.gsp} (67%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/build/gradle/templates/gradleWrapperProperties.rocker.raw => grails-app/views/forge/feature/build/gradle/templates/gradleWrapperProperties.gsp} (55%)
copy grails-doc/src/en/guide/theWebLayer/gsp/GSPBasics/pageDirectives.adoc => grails-forge/grails-forge-core/grails-app/views/forge/feature/build/gradle/templates/settingsGradle.gsp (50%)
create mode 100644 grails-forge/grails-forge-core/grails-app/views/forge/feature/cli.gsp
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/github/workflows/plain/templates/plainGithubWorkflow.rocker.raw => grails-app/views/forge/feature/github/workflows/plain/templates/plainGithubWorkflow.gsp} (77%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/github/workflows/templates/javaSetup.rocker.raw => grails-app/views/forge/feature/github/workflows/templates/javaSetup.gsp} (66%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/grails/templates/applicationController.rocker.raw => grails-app/views/forge/feature/grails/templates/applicationController.gsp} (85%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/grails/templates/plugin.rocker.raw => grails-app/views/forge/feature/grails/templates/plugin.gsp} (73%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/grails/templates/urlMappings.rocker.raw => grails-app/views/forge/feature/grails/templates/urlMappings.gsp} (73%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/lang/groovy/application.rocker.raw => grails-app/views/forge/feature/lang/groovy/templates/application.gsp} (67%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/lang/groovy/bootStrap.rocker.raw => grails-app/views/forge/feature/lang/groovy/templates/bootStrap.gsp} (78%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/logging/template/logback.rocker.raw => grails-app/views/forge/feature/logging/template/logback.gsp} (89%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/migration/templates/dbMigrationGradle.rocker.raw => grails-app/views/forge/feature/migration/templates/dbMigrationGradle.gsp} (85%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/other/template/maindocs.rocker.raw => grails-app/views/forge/feature/other/template/maindocs.gsp} (66%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/other/template/markdownLink.rocker.raw => grails-app/views/forge/feature/other/template/markdownLink.gsp} (84%)
rename grails-forge/{grails-forge-cli/src/main/java/org/grails/forge/cli/command/templates/domainSpec.rocker.raw => grails-forge-core/grails-app/views/forge/feature/other/template/readme.gsp} (54%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/role.rocker.raw => grails-app/views/forge/feature/security/template/role.gsp} (78%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/securityApplicationGroovy.rocker.raw => grails-app/views/forge/feature/security/template/securityApplicationGroovy.gsp} (80%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/user.rocker.raw => grails-app/views/forge/feature/security/template/user.gsp} (77%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userClassic.rocker.raw => grails-app/views/forge/feature/security/template/userClassic.gsp} (74%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userClassicService.rocker.raw => grails-app/views/forge/feature/security/template/userClassicService.gsp} (79%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userClassicSpec.rocker.raw => grails-app/views/forge/feature/security/template/userClassicSpec.gsp} (88%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userController.rocker.raw => grails-app/views/forge/feature/security/template/userController.gsp} (79%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userRole.rocker.raw => grails-app/views/forge/feature/security/template/userRole.gsp} (91%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userService.rocker.raw => grails-app/views/forge/feature/security/template/userService.gsp} (83%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/security/template/userSpec.rocker.raw => grails-app/views/forge/feature/security/template/userSpec.gsp} (91%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/spring/template/springResources.rocker.raw => grails-app/views/forge/feature/spring/template/springResources.gsp} (92%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/test/template/containerGebSpec.rocker.raw => grails-app/views/forge/feature/test/template/containerGebSpec.gsp} (79%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/test/template/gebConfig.rocker.raw => grails-app/views/forge/feature/test/template/gebConfig.gsp} (92%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/test/template/gebSpec.rocker.raw => grails-app/views/forge/feature/test/template/gebSpec.gsp} (80%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/json/templates/_errors.rocker.raw => grails-app/views/forge/feature/view/json/templates/_errors.gsp} (96%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/json/templates/_object.rocker.raw => grails-app/views/forge/feature/view/json/templates/_object.gsp} (90%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/json/templates/error.rocker.raw => grails-app/views/forge/feature/view/json/templates/error.gsp} (92%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/json/templates/index.rocker.raw => grails-app/views/forge/feature/view/json/templates/index.gsp} (96%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/json/templates/notFound.rocker.raw => grails-app/views/forge/feature/view/json/templates/notFound.gsp} (92%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/markup/templates/_errors.rocker.raw => grails-app/views/forge/feature/view/markup/templates/_errors.gsp} (96%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/markup/templates/_object.rocker.raw => grails-app/views/forge/feature/view/markup/templates/_object.gsp} (90%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/markup/templates/error.rocker.raw => grails-app/views/forge/feature/view/markup/templates/error.gsp} (92%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/markup/templates/index.rocker.raw => grails-app/views/forge/feature/view/markup/templates/index.gsp} (97%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/feature/view/markup/templates/notFound.rocker.raw => grails-app/views/forge/feature/view/markup/templates/notFound.gsp} (92%)
rename grails-forge/grails-forge-core/{src/main/java/org/grails/forge/template/api/grailsForgeApi.rocker.raw => grails-app/views/forge/template/api/grailsForgeApi.gsp} (72%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/ForgeCoreConfiguration.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/ForgeGrailsPlugin.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/application/ApplicationType.java => groovy/org/grails/forge/application/ApplicationType.groovy} (54%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/application/ContextFactory.java => groovy/org/grails/forge/application/ContextFactory.groovy} (51%)
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/application/OperatingSystem.java => groovy/org/grails/forge/application/OperatingSystem.groovy} (74%)
copy grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/SpanishResourceBundleMessageSource.groovy => grails-forge-core/src/main/groovy/org/grails/forge/application/PluginAvailableFeatures.groovy} (64%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/application/Project.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/application/ProjectIdentifier.java => groovy/org/grails/forge/application/ProjectIdentifier.groovy} (67%)
copy grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/SpanishResourceBundleMessageSource.groovy => grails-forge-core/src/main/groovy/org/grails/forge/application/RestApiAvailableFeatures.groovy} (64%)
rename grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/MyEventListener.groovy => grails-forge-core/src/main/groovy/org/grails/forge/application/WebAvailableFeatures.groovy} (65%)
copy grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/SpanishResourceBundleMessageSource.groovy => grails-forge-core/src/main/groovy/org/grails/forge/application/WebPluginAvailableFeatures.groovy} (64%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/application/generator/DefaultProjectGenerator.java => groovy/org/grails/forge/application/generator/DefaultProjectGenerator.groovy} (50%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/application/generator/GeneratorContext.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/application/generator/ProjectGenerator.java => groovy/org/grails/forge/application/generator/ProjectGenerator.groovy} (67%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/BuildPlugin.java => groovy/org/grails/forge/build/BuildPlugin.groovy} (60%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/BuildProperties.java => groovy/org/grails/forge/build/BuildProperties.groovy} (62%)
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/Comment.java => groovy/org/grails/forge/build/Comment.groovy} (82%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/Property.java => groovy/org/grails/forge/build/Property.groovy} (81%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/Coordinate.java => groovy/org/grails/forge/build/dependencies/Coordinate.groovy} (59%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/defaults/HasDefaultDevelopmentReloading.java => groovy/org/grails/forge/build/dependencies/CoordinateResolver.groovy} (82%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/DefaultCoordinateResolver.java => groovy/org/grails/forge/build/dependencies/DefaultCoordinateResolver.groovy} (58%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/dependencies/Dependency.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/DependencyContext.java => groovy/org/grails/forge/build/dependencies/DependencyContext.groovy} (51%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/dependencies/DependencyCoordinate.groovy
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/GormOneOfFeature.java => groovy/org/grails/forge/build/dependencies/LookupFailedException.groovy} (75%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/Phase.java => groovy/org/grails/forge/build/dependencies/Phase.groovy} (90%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/dependencies/PomDependencyVersionResolver.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/Scope.java => groovy/org/grails/forge/build/dependencies/Scope.groovy} (58%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/Source.java => groovy/org/grails/forge/build/dependencies/Source.groovy} (88%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/gradle/DefaultGradleRepository.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/gradle/GradleBuild.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/GradleBuildCreator.java => groovy/org/grails/forge/build/gradle/GradleBuildCreator.groovy} (62%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/GradleConfiguration.java => groovy/org/grails/forge/build/gradle/GradleConfiguration.groovy} (61%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/gradle/GradleDependency.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/GradleDsl.java => groovy/org/grails/forge/build/gradle/GradleDsl.groovy} (88%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/gradle/GradlePlugin.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/GradleRepository.java => groovy/org/grails/forge/build/gradle/GradleRepository.groovy} (68%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/MavenCentralRepository.java => groovy/org/grails/forge/build/gradle/MavenCentralRepository.groovy} (67%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/MavenLocalRepository.java => groovy/org/grails/forge/build/gradle/MavenLocalRepository.groovy} (68%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/build/gradle/VersionRegexRepoFilter.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/gradle/VersionType.java => groovy/org/grails/forge/build/gradle/VersionType.groovy} (88%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/Writable.java => groovy/org/grails/forge/defaults/HasDefaultBuild.groovy} (81%)
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/JpaFeature.java => groovy/org/grails/forge/defaults/HasDefaultDevelopmentReloading.groovy} (78%)
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/defaults/HasDefaultBuild.java => groovy/org/grails/forge/defaults/IncludesDefaults.groovy} (85%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/defaults/LanguageDefaults.java => groovy/org/grails/forge/defaults/LanguageDefaults.groovy} (58%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/diff/FeatureDiffer.java => groovy/org/grails/forge/diff/FeatureDiffer.groovy} (66%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/ApplicationFeature.java => groovy/org/grails/forge/feature/ApplicationFeature.groovy} (74%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/AvailableFeatures.java => groovy/org/grails/forge/feature/AvailableFeatures.groovy} (66%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/BaseAvailableFeatures.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/Category.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/DefaultFeature.java => groovy/org/grails/forge/feature/DefaultFeature.groovy} (86%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/Feature.java => groovy/org/grails/forge/feature/Feature.groovy} (84%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/FeatureContext.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/FeaturePhase.java => groovy/org/grails/forge/feature/FeaturePhase.groovy} (81%)
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/FeaturePredicate.java => groovy/org/grails/forge/feature/FeaturePredicate.groovy} (80%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/FeatureRegistry.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/Features.groovy
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/defaults/HasDefaultBuild.java => groovy/org/grails/forge/feature/OneOfFeature.groovy} (83%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/ai/GrailsSpringAi.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/ai/SpringAiAnthropic.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/ai/SpringAiOllama.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/ai/SpringAiOpenAi.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/ai/SpringAiProviderFeature.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/api/OpenApi.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/asciidoctor/Asciidoctor.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/assetPipeline/AssetPipeline.groovy
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/build/BuildFeature.java => groovy/org/grails/forge/feature/build/BuildFeature.groovy} (73%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/build/gradle/Dockerfile.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/build/gradle/Gradle.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/build/gradle/GradleBuildSrc.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/build/gradle/GradleBuildSrcFeature.java => groovy/org/grails/forge/feature/build/gradle/GradleBuildSrcFeature.groovy} (69%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/build/gradle/GradleSettingsFile.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/build/gradle/GradleSettingsFileFeature.java => groovy/org/grails/forge/feature/build/gradle/GradleSettingsFileFeature.groovy} (69%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/spring/SpringThreadingFeature.java => groovy/org/grails/forge/feature/cache/CacheFeature.groovy} (74%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/cache/EHCache.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/cache/GrailsCache.groovy
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/github/workflows/Secret.java => groovy/org/grails/forge/feature/config/ApplicationConfiguration.groovy} (55%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/config/BootstrapConfiguration.java => groovy/org/grails/forge/feature/config/BootstrapConfiguration.groovy} (56%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/config/Configuration.java => groovy/org/grails/forge/feature/config/Configuration.groovy} (50%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/config/ConfigurationFeature.java => groovy/org/grails/forge/feature/config/ConfigurationFeature.groovy} (62%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/config/Properties.java => groovy/org/grails/forge/feature/config/Properties.groovy} (52%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/config/Yaml.java => groovy/org/grails/forge/feature/config/Yaml.groovy} (50%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/AsyncGorm.java => groovy/org/grails/forge/feature/database/AsyncGorm.groovy} (52%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/DatabaseDriverConfigurationFeature.java => groovy/org/grails/forge/feature/database/DatabaseDriverConfigurationFeature.groovy} (57%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/DatabaseDriverFeature.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/GormFeature.java => groovy/org/grails/forge/feature/database/GormFeature.groovy} (67%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/GormOneOfFeature.java => groovy/org/grails/forge/feature/database/GormOneOfFeature.groovy} (74%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/GrailsDataHibernate5.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/GrailsDataHibernate7.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/GrailsDataHibernateValidator.java => groovy/org/grails/forge/feature/database/GrailsDataHibernateValidator.groovy} (51%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/GrailsDataMongoDB.java => groovy/org/grails/forge/feature/database/GrailsDataMongoDB.groovy} (50%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/GraphqlGorm.java => groovy/org/grails/forge/feature/database/GraphqlGorm.groovy} (52%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/H2.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/JpaFeature.java => groovy/org/grails/forge/feature/database/JpaFeature.groovy} (83%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/MongoDBTestingSupport.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/MongoDBTestingSupportValidator.java => groovy/org/grails/forge/feature/database/MongoDBTestingSupportValidator.groovy} (61%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/database/MongoFeature.java => groovy/org/grails/forge/feature/database/MongoFeature.groovy} (67%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/MongoSync.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/MySQL.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/Neo4jGorm.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/PostgreSQL.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/SQLServer.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/database/TestContainers.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/github/workflows/GitHubWorkflowFeature.java => groovy/org/grails/forge/feature/github/workflows/GitHubWorkflowFeature.groovy} (58%)
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/github/workflows/Secret.java => groovy/org/grails/forge/feature/github/workflows/Secret.groovy} (60%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/github/workflows/plain/PlainGithubWorkflowFeature.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grails/GrailsBase.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/grails/GrailsCompileStatic.java => groovy/org/grails/forge/feature/grails/GrailsCompileStatic.groovy} (65%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grails/GrailsDefaultPlugins.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grails/GrailsGradlePlugin.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grails/GrailsUrlMappings.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grails/GrailsWebConsole.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grailsProfiles/GrailsProfiles.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/grailsWrapper/GrailsWrapper.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/lang/LanguageFeature.java => groovy/org/grails/forge/feature/lang/LanguageFeature.groovy} (72%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/lang/groovy/GrailsApplication.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/defaults/HasDefaultBuild.java => groovy/org/grails/forge/feature/lang/groovy/GrailsApplicationFeature.groovy} (79%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/logging/Logback.java => groovy/org/grails/forge/feature/logging/Logback.groovy} (57%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/logging/LogbackConfig.java => groovy/org/grails/forge/feature/logging/LogbackConfig.groovy} (62%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/migration/MigrationFeature.java => groovy/org/grails/forge/feature/logging/LoggingFeature.groovy} (73%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/micronaut/GrailsMicronaut.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/micronaut/GrailsMicronautValidator.java => groovy/org/grails/forge/feature/micronaut/GrailsMicronautValidator.groovy} (59%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/micronaut/MicronautHttpClient.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/migration/DatabaseMigrationPlugin.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/cache/CacheFeature.java => groovy/org/grails/forge/feature/migration/MigrationFeature.groovy} (73%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/other/AppName.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/other/GrailsQuartz.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/other/GrailsStartupProgress.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/other/HibernateValidator.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/other/Readme.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/other/ShadePlugin.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/reloading/Jrebel.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/reloading/ReloadingFeature.java => groovy/org/grails/forge/feature/reloading/ReloadingFeature.groovy} (66%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/reloading/SpringBootDevTools.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/security/GrailsSpringSecurity.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/security/GrailsSpringSecurityUi.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/security/PrimarySecurityFeature.java => groovy/org/grails/forge/feature/security/PrimarySecurityFeature.groovy} (84%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/security/SecurityFeature.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/security/SpringBootStarterSecurity.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/sitemesh3/Sitemesh3.java => groovy/org/grails/forge/feature/sitemesh3/Sitemesh3.groovy} (54%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/spring/SpringBootAutoconfigure.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/spring/SpringBootEmbeddedServlet.java => groovy/org/grails/forge/feature/spring/SpringBootEmbeddedServlet.groovy} (70%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/spring/SpringBootJettyFeature.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/spring/SpringBootStarterFeature.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/spring/SpringBootTomcatFeature.java => groovy/org/grails/forge/feature/spring/SpringBootTomcatFeature.groovy} (50%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/spring/SpringBootUndertowFeature.java => groovy/org/grails/forge/feature/spring/SpringBootUndertowFeature.groovy} (52%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/spring/SpringBootVirtualThreads.java => groovy/org/grails/forge/feature/spring/SpringBootVirtualThreads.groovy} (53%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/spring/SpringResources.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/logging/LoggingFeature.java => groovy/org/grails/forge/feature/spring/SpringThreadingFeature.groovy} (73%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/test/GebFeature.java => groovy/org/grails/forge/feature/test/GebFeature.groovy} (71%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/GebWithLocalBrowsers.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/GebWithTestcontainers.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/GormTestingSupport.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/GrailsWebTestingSupport.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/Mockito.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/test/MockitoValidator.java => groovy/org/grails/forge/feature/test/MockitoValidator.groovy} (59%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/Spock.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/test/ViewsJsonTestingSupport.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/validation/CompositeFeatureValidator.java => groovy/org/grails/forge/feature/validation/CompositeFeatureValidator.groovy} (57%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/validation/FeatureValidator.java => groovy/org/grails/forge/feature/validation/FeatureValidator.groovy} (73%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/validation/OneOfFeatureValidator.java => groovy/org/grails/forge/feature/validation/OneOfFeatureValidator.groovy} (61%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/view/GrailsGsp.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/view/GrailsLayout.java => groovy/org/grails/forge/feature/view/GrailsLayout.groovy} (61%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/view/GrailsViews.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/view/GspLayout.java => groovy/org/grails/forge/feature/view/GspLayout.groovy} (72%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/view/Scaffolding.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/view/json/ViewJson.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/feature/view/markup/ViewMarkup.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/web/GrailsWeb.java => groovy/org/grails/forge/feature/web/GrailsWeb.groovy} (57%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/io/ConsoleOutput.java => groovy/org/grails/forge/io/ConsoleOutput.groovy} (67%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/io/FileSystemOutputHandler.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/io/MapOutputHandler.java => groovy/org/grails/forge/io/MapOutputHandler.groovy} (56%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/io/OutputHandler.java => groovy/org/grails/forge/io/OutputHandler.groovy} (78%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/io/OutputUtils.java => groovy/org/grails/forge/io/OutputUtils.groovy} (53%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/io/ZipOutputHandler.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/options/BuildTool.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/DefaultTestRockerModelProvider.java => groovy/org/grails/forge/options/DefaultTestViewProvider.groovy} (71%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/DevelopmentReloading.java => groovy/org/grails/forge/options/DevelopmentReloading.groovy} (57%)
copy grails-forge/grails-forge-core/src/{test/groovy/org/grails/forge/options/GormImplSpec.groovy => main/groovy/org/grails/forge/options/FeatureFilter.groovy} (52%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/GormImpl.java => groovy/org/grails/forge/options/GormImpl.groovy} (63%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/JdkVersion.java => groovy/org/grails/forge/options/JdkVersion.groovy} (73%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/options/Language.groovy
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/options/Options.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/ServletImpl.java => groovy/org/grails/forge/options/ServletImpl.groovy} (61%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/TestFramework.java => groovy/org/grails/forge/options/TestFramework.groovy} (54%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/options/TestRockerModelProvider.java => groovy/org/grails/forge/options/TestViewProvider.groovy} (66%)
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/BinaryTemplate.java => groovy/org/grails/forge/template/BinaryTemplate.groovy} (71%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/Config4kTemplate.java => groovy/org/grails/forge/template/Config4kTemplate.groovy} (59%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/DefaultTemplateRenderer.java => groovy/org/grails/forge/template/DefaultTemplateRenderer.groovy} (51%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/template/ForgePages.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/RockerTemplate.java => groovy/org/grails/forge/template/GspTemplate.groovy} (53%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/template/GspView.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/PropertiesTemplate.java => groovy/org/grails/forge/template/PropertiesTemplate.groovy} (50%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/RenderResult.java => groovy/org/grails/forge/template/RenderResult.groovy} (60%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/StringTemplate.java => groovy/org/grails/forge/template/StringTemplate.groovy} (65%)
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/Template.java => groovy/org/grails/forge/template/Template.groovy} (82%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/OneOfFeature.java => groovy/org/grails/forge/template/TemplateModel.groovy} (87%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/TemplateRenderer.java => groovy/org/grails/forge/template/TemplateRenderer.groovy} (78%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/template/URLTemplate.java => groovy/org/grails/forge/template/URLTemplate.groovy} (53%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/feature/lang/groovy/GrailsApplicationFeature.java => groovy/org/grails/forge/template/Writable.groovy} (82%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/template/YamlTemplate.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/util/IOFeatureUtil.java => groovy/org/grails/forge/util/IOFeatureUtil.groovy} (72%)
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/util/NameUtils.java => groovy/org/grails/forge/util/NameUtils.groovy} (64%)
copy grails-forge/grails-forge-core/src/main/{java/org/grails/forge/build/dependencies/CoordinateResolver.java => groovy/org/grails/forge/util/ThrowingSupplier.groovy} (82%)
create mode 100644 grails-forge/grails-forge-core/src/main/groovy/org/grails/forge/util/VersionInfo.groovy
rename grails-forge/grails-forge-core/src/main/{java/org/grails/forge/util/ZipUtil.java => groovy/org/grails/forge/util/ZipUtil.groovy} (59%)
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/analytics/Generated.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/analytics/SelectedFeature.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/PluginAvailableFeatures.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/Project.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/RestApiAvailableFeatures.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/WebAvailableFeatures.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/WebPluginAvailableFeatures.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/generator/GeneratorContext.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/dependencies/Dependency.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/dependencies/DependencyCoordinate.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/dependencies/LookupFailedException.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/dependencies/PomDependencyVersionResolver.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/DefaultGradleRepository.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/GradleBuild.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/GradleDependency.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/GradlePlugin.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/gradle/VersionRegexRepoFilter.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/defaults/IncludesDefaults.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/BaseAvailableFeatures.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/Category.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/FeatureContext.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/Features.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/api/OpenApi.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/asciidoctor/Asciidoctor.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/assetPipeline/AssetPipeline.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/Dockerfile.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/Gradle.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/GradleBuildSrc.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/GradleSettingsFile.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/gradleProperties.rocker.raw
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/settingsGradle.rocker.raw
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/cache/EHCache.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/cache/GrailsCache.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/cli.rocker.raw
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/config/ApplicationConfiguration.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/DatabaseDriverFeature.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate5.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/GrailsDataHibernate7.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/H2.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/MongoDBTestingSupport.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/MongoSync.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/MySQL.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/Neo4jGorm.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/PostgreSQL.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/SQLServer.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/database/TestContainers.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/github/workflows/plain/PlainGithubWorkflowFeature.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grails/GrailsBase.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grails/GrailsDefaultPlugins.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grails/GrailsGradlePlugin.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grails/GrailsUrlMappings.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grails/GrailsWebConsole.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grailsProfiles/GrailsProfiles.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/grailsWrapper/GrailsWrapper.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/lang/groovy/GrailsApplication.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/micronaut/GrailsMicronaut.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/micronaut/MicronautHttpClient.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/migration/DatabaseMigrationPlugin.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/AppName.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/GrailsQuartz.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/GrailsStartupProgress.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/HibernateValidator.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/Readme.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/ShadePlugin.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/other/template/readme.rocker.raw
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/reloading/Jrebel.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/reloading/SpringBootDevTools.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/security/GrailsSpringSecurity.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/security/GrailsSpringSecurityUi.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/security/SecurityFeature.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/security/SpringBootStarterSecurity.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/spring/SpringBootAutoconfigure.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/spring/SpringBootJettyFeature.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/spring/SpringBootStarterFeature.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/spring/SpringResources.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/GebWithLocalBrowsers.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/GebWithTestcontainers.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/GormTestingSupport.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/GrailsWebTestingSupport.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/Mockito.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/Spock.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/test/ViewsJsonTestingSupport.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/GrailsGsp.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/GrailsViews.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/Scaffolding.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/json/ViewJson.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/markup/ViewMarkup.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/io/FileSystemOutputHandler.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/io/ZipOutputHandler.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/BuildTool.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/FeatureFilter.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/GormImplTypeConverter.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/Language.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/options/Options.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/template/RockerWritable.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/template/TemplateModel.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/template/YamlTemplate.java
delete mode 100644 grails-forge/grails-forge-core/src/main/java/org/grails/forge/util/VersionInfo.java
delete mode 100644 grails-forge/grails-forge-core/src/main/resources/META-INF/native-image/org.grails.forge/grails-forge-core/resource-config.json
create mode 100644 grails-forge/grails-forge-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
copy grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/{ApplicationContextSpec.groovy => ForgeContexts.groovy} (54%)
rename grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/{BeanContextSpec.groovy => ForgeCoreConfigurationSpec.groovy} (63%)
create mode 100644 grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/ForgeGrailsPluginSpec.groovy
create mode 100644 grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/ai/GrailsSpringAiSpec.groovy
rename grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/options/{TestRockerModelProviderSpec.groovy => TestViewProviderSpec.groovy} (83%)
copy grails-forge/grails-forge-core/src/{main/java/org/grails/forge/feature/github/workflows/Secret.java => test/groovy/org/grails/forge/plugintest/ForgePluginTestApplication.groovy} (54%)
delete mode 100644 grails-forge/grails-forge-web-netty/build.gradle
delete mode 100644 grails-forge/grails-forge-web-netty/src/main/java/org/grails/forge/netty/Application.java
delete mode 100644 grails-forge/grails-forge-web-netty/src/main/java/org/grails/forge/netty/analytics/AnalyticsClient.java
delete mode 100644 grails-forge/grails-forge-web-netty/src/main/resources/META-INF/native-image/org.grails.forge/grails-forge-web-netty/native-image.properties
delete mode 100644 grails-forge/grails-forge-web-netty/src/main/resources/META-INF/native-image/org.grails.forge/grails-forge-web-netty/resource-config.json
delete mode 100644 grails-forge/grails-forge-web-netty/src/main/resources/application-dev.yml
delete mode 100644 grails-forge/grails-forge-web-netty/src/main/resources/application.yml
delete mode 100644 grails-forge/grails-forge-web-netty/src/main/resources/logback.xml
copy grails-forge/{grails-forge-web-netty => grails-forge-web}/aws/.platform/nginx/conf.d/proxy.conf (100%)
rename grails-forge/{grails-forge-web-netty => grails-forge-web}/aws/Procfile (100%)
copy grails-forge/{grails-forge-web-netty => grails-forge-web}/aws/start.sh (93%)
create mode 100644 grails-forge/grails-forge-web/build.gradle
create mode 100644 grails-forge/grails-forge-web/grails-app/conf/application.yml
rename grails-forge/{config/checkstyle/checkstyle-suppressions.xml => grails-forge-web/grails-app/conf/logback.xml} (60%)
create mode 100644 grails-forge/grails-forge-web/grails-app/conf/openapi-base.yml
create mode 100644 grails-forge/grails-forge-web/grails-app/controllers/org/grails/forge/web/DiffController.groovy
create mode 100644 grails-forge/grails-forge-web/grails-app/controllers/org/grails/forge/web/ForgeApplicationController.groovy
create mode 100644 grails-forge/grails-forge-web/grails-app/controllers/org/grails/forge/web/PreviewController.groovy
create mode 100644 grails-forge/grails-forge-web/grails-app/controllers/org/grails/forge/web/SelectOptionsController.groovy
create mode 100644 grails-forge/grails-forge-web/grails-app/controllers/org/grails/forge/web/UrlMappings.groovy
create mode 100644 grails-forge/grails-forge-web/grails-app/controllers/org/grails/forge/web/ZipCreateController.groovy
create mode 100644 grails-forge/grails-forge-web/grails-app/i18n/messages.properties
rename grails-forge/{grails-forge-core/src/main/java/org/grails/forge/feature/github/workflows/Secret.java => grails-forge-web/grails-app/init/org/grails/forge/web/Application.groovy} (52%)
create mode 100644 grails-forge/grails-forge-web/src/integration-test/groovy/org/grails/forge/web/ForgeApiIntegrationSpec.groovy
copy grails-forge/{grails-forge-web-netty/aws/.platform/nginx/conf.d/proxy.conf => grails-forge-web/src/integration-test/resources/api-test-messages_fr.properties} (79%)
create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/ApplicationTypeDTO.groovy
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/ApplicationTypeList.java => grails-forge-web/src/main/groovy/org/grails/forge/api/ApplicationTypeList.groovy} (64%)
copy grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/FeatureOperationsSpec.groovy => grails-forge-web/src/main/groovy/org/grails/forge/api/ApplicationTypeOperations.groovy} (61%)
create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/DevelopmentReloadingDTO.groovy
create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/FeatureDTO.groovy
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/FeatureList.java => grails-forge-web/src/main/groovy/org/grails/forge/api/FeatureList.groovy} (65%)
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/FeatureOperations.java => grails-forge-web/src/main/groovy/org/grails/forge/api/FeatureOperations.groovy} (83%)
create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/FeatureService.groovy
create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/ForgeApplicationService.groovy
rename grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/SpanishResourceBundleMessageSource.groovy => grails-forge-web/src/main/groovy/org/grails/forge/api/ForgeMessages.groovy} (69%)
create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/GormImplDTO.groovy
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/GrailsForgeConfiguration.java => grails-forge-web/src/main/groovy/org/grails/forge/api/GrailsForgeConfiguration.groovy} (52%)
create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/JdkVersionDTO.groovy
create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/LanguageDTO.groovy
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/analytics/AnalyticsOperations.java => grails-forge-web/src/main/groovy/org/grails/forge/api/LinkDTO.groovy} (61%)
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/Linkable.java => grails-forge-web/src/main/groovy/org/grails/forge/api/Linkable.groovy} (64%)
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/Relationship.java => grails-forge-web/src/main/groovy/org/grails/forge/api/Relationship.groovy} (62%)
create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/RequestInfo.groovy
rename grails-forge/{grails-forge-api/src/test/groovy/org/grails/forge/api/FeatureOperationsSpec.groovy => grails-forge-web/src/main/groovy/org/grails/forge/api/SelectOptionDTO.groovy} (61%)
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/SelectOptionsDTO.java => grails-forge-web/src/main/groovy/org/grails/forge/api/SelectOptionsDTO.groovy} (51%)
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/Selectable.java => grails-forge-web/src/main/groovy/org/grails/forge/api/Selectable.groovy} (85%)
create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/ServletImplDTO.groovy
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/UserAgentParser.java => grails-forge-web/src/main/groovy/org/grails/forge/api/UserAgentParser.groovy} (50%)
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/VersionDTO.java => grails-forge-web/src/main/groovy/org/grails/forge/api/VersionDTO.groovy} (61%)
create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/api/create/CreateProjectService.groovy
rename grails-forge/{grails-forge-core/src/main/java/org/grails/forge/build/Comment.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/ApplicationTypeSelectOptions.groovy} (60%)
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/options/GormImplSelectOptions.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/DevelopmentReloadingSelectOptions.groovy} (59%)
copy grails-forge/{grails-forge-core/src/main/java/org/grails/forge/feature/build/BuildFeature.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/GormImplSelectOptions.groovy} (63%)
copy grails-forge/{grails-forge-core/src/main/java/org/grails/forge/feature/build/BuildFeature.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/JdkVersionSelectOptions.groovy} (62%)
copy grails-forge/{grails-forge-core/src/main/java/org/grails/forge/feature/build/BuildFeature.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/LanguageSelectOptions.groovy} (63%)
rename grails-forge/{grails-forge-core/src/main/java/org/grails/forge/feature/FeaturePredicate.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/SelectOptionsOperations.groovy} (75%)
rename grails-forge/{grails-forge-core/src/main/java/org/grails/forge/feature/build/BuildFeature.java => grails-forge-web/src/main/groovy/org/grails/forge/api/options/ServletImplSelectOptions.groovy} (62%)
rename grails-forge/{grails-forge-api/src/main/java/org/grails/forge/api/preview/PreviewDTO.java => grails-forge-web/src/main/groovy/org/grails/forge/api/preview/PreviewDTO.groovy} (59%)
create mode 100644 grails-forge/grails-forge-web/src/main/groovy/org/grails/forge/web/ForgeRequestSupport.groovy
rename grails-forge/{grails-forge-analytics-postgres/src/main/java/org/grails/forge/analytics/postgres/TotalDTO.java => grails-forge-web/src/main/groovy/org/grails/forge/web/GroovyObjectJsonMixin.groovy} (66%)
create mode 100644 grails-forge/grails-forge-web/src/test/groovy/org/grails/forge/web/ForgeRequestSupportSpec.groovy
create mode 100644 grails-forge/grails-forge-web/src/test/groovy/org/grails/forge/web/GrailsForgeConfigurationSpec.groovy
delete mode 100644 grails-forge/grailsforgearchitecture.jpeg
delete mode 100644 grails-forge/sam-local.yml
create mode 100644 grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/core/GrailsPluginGradlePluginNative2AsciiSpec.groovy
create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/plugin-native2ascii-off/build.gradle
copy grails-gradle/plugins/src/test/resources/test-projects/{auto-apply-bom-disabled => plugin-native2ascii-off}/gradle.properties (100%)
copy grails-gradle/plugins/src/test/resources/test-projects/{boot-run-pid-web => plugin-native2ascii-off}/grails-app/conf/application.yml (100%)
create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/plugin-native2ascii-off/settings.gradle
create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/plugin-native2ascii-off/src/main/resources/templates/messages_ru.properties
create mode 100644 grails-gsp/core/src/main/groovy/org/grails/gsp/compiler/LogicLineTrimmer.java
create mode 100644 grails-gsp/core/src/test/groovy/org/grails/gsp/GspTrimLogicLinesSpec.groovy
create mode 100644 grails-skills/ai/build.gradle
create mode 100644 grails-skills/ai/skills/grails-ai-developer/SKILL.md
create mode 100644 grails-spring-ai/build.gradle
copy grails-forge/grails-forge-web-netty/aws/start.sh => grails-spring-ai/grails-app/conf/plugin.yml (51%)
create mode 100644 grails-spring-ai/src/main/groovy/org/apache/grails/ai/SpringAiGrailsPlugin.groovy
create mode 100644 grails-spring-ai/src/main/groovy/org/apache/grails/ai/async/ChatResponseStreamItemRenderer.groovy
create mode 100644 grails-spring-ai/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
create mode 100644 grails-spring-ai/src/test/groovy/org/apache/grails/ai/SpringAiAutoConfigurationSpec.groovy
create mode 100644 grails-spring-ai/src/test/groovy/org/apache/grails/ai/SpringAiPluginDefaultsSpec.groovy
create mode 100644 grails-spring-ai/src/test/groovy/org/apache/grails/ai/SpringAiPromptLoggingSpec.groovy
create mode 100644 grails-spring-ai/src/test/groovy/org/apache/grails/ai/async/ChatResponseStreamItemRendererSpec.groovy
create mode 100644 grails-test-examples/ai/build.gradle
rename grails-forge/grails-forge-web-netty/aws/start.sh => grails-test-examples/ai/grails-app/conf/application.yml (57%)
copy grails-test-examples/{latency => ai}/grails-app/conf/logback.xml (100%)
rename grails-forge/grails-forge-core/src/main/java/org/grails/forge/template/BinaryTemplate.java => grails-test-examples/ai/grails-app/controllers/aiapp/ChatController.groovy (69%)
create mode 100644 grails-test-examples/ai/grails-app/controllers/aiapp/StreamController.groovy
rename grails-forge/grails-forge-core/src/main/java/org/grails/forge/build/dependencies/CoordinateResolver.java => grails-test-examples/ai/grails-app/controllers/aiapp/UrlMappings.groovy (83%)
rename grails-forge/grails-forge-core/src/main/java/org/grails/forge/template/Template.java => grails-test-examples/ai/grails-app/init/aiapp/Application.groovy (75%)
rename grails-forge/grails-forge-core/src/main/java/org/grails/forge/application/OperatingSystem.java => grails-test-examples/ai/grails-app/services/aiapp/AnswerService.groovy (51%)
create mode 100644 grails-test-examples/ai/src/integration-test/groovy/aiapp/AiDefaultsSpec.groovy
create mode 100644 grails-test-examples/ai/src/integration-test/groovy/aiapp/ChatFunctionalSpec.groovy
create mode 100644 grails-test-examples/ai/src/integration-test/groovy/aiapp/OwnChatModelFunctionalSpec.groovy
create mode 100644 grails-test-examples/ai/src/integration-test/groovy/aiapp/OwnModelApplication.groovy
create mode 100644 grails-test-examples/ai/src/integration-test/groovy/aiapp/StreamingFunctionalSpec.groovy
rename grails-forge/grails-forge-api/src/test/groovy/org/grails/forge/api/GrailsForgeConfigurationSpec.groovy => grails-test-examples/ai/src/test/groovy/aiapp/AnswerServiceSpec.groovy (55%)
copy {grails-async/plugin => grails-testing-support-ai}/build.gradle (51%)
create mode 100644 grails-testing-support-ai/src/main/groovy/grails/testing/ai/AiUnitTest.groovy
create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/AiStubEnvironmentPostProcessor.groovy
create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/AiStubProperties.groovy
create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/AiTestBeans.groovy
create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/AiTestingAutoConfiguration.groovy
create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/AiTestingVectorStoreAutoConfiguration.groovy
rename grails-forge/grails-forge-api/src/main/java/org/grails/forge/api/event/ApplicationGeneratingEvent.java => grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/ResettableSimpleVectorStore.groovy (55%)
create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/ScriptedChatModel.groovy
create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/SimpleVectorStoreBeans.groovy
create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/StubEmbeddingModel.groovy
create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/spock/AiSetupInterceptor.groovy
create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/spock/AiSetupSpecInterceptor.groovy
create mode 100644 grails-testing-support-ai/src/main/groovy/org/apache/grails/testing/ai/spock/AiTestingSupportExtension.groovy
create mode 100644 grails-testing-support-ai/src/main/resources/META-INF/additional-spring-configuration-metadata.json
create mode 100644 grails-testing-support-ai/src/main/resources/META-INF/services/org.spockframework.runtime.extension.IGlobalExtension
rename grails-forge/grails-forge-web-netty/aws/.platform/nginx/conf.d/proxy.conf => grails-testing-support-ai/src/main/resources/META-INF/spring.factories (67%)
create mode 100644 grails-testing-support-ai/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
create mode 100644 grails-testing-support-ai/src/test/groovy/grails/testing/ai/AiUnitTestConfiguredSpec.groovy
create mode 100644 grails-testing-support-ai/src/test/groovy/grails/testing/ai/AiUnitTestOwnBeansSpec.groovy
create mode 100644 grails-testing-support-ai/src/test/groovy/grails/testing/ai/AiUnitTestSpec.groovy
rename grails-forge/buildSrc/src/main/java/org/grails/forge/rocker/plugin/RockerGradleException.java => grails-testing-support-ai/src/test/groovy/grails/testing/ai/AnswerService.groovy (71%)
create mode 100644 grails-testing-support-ai/src/test/groovy/org/apache/grails/testing/ai/AiStubEnvironmentPostProcessorSpec.groovy
create mode 100644 grails-testing-support-ai/src/test/groovy/org/apache/grails/testing/ai/AiTestingAutoConfigurationSpec.groovy
create mode 100644 grails-testing-support-ai/src/test/groovy/org/apache/grails/testing/ai/ScriptedChatModelSpec.groovy
create mode 100644 grails-testing-support-ai/src/test/groovy/org/apache/grails/testing/ai/StubEmbeddingModelSpec.groovy
(grails-core) 01/01: Merge branch '9.0.x' into 9.1.x
Posted by jd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
jdaugherty pushed a commit to branch 9.1.x
in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 5f5e961628be767e3727370c77351b4967e5b26f
Merge: 829de6092e 386e881473
Author: James Daugherty <jd...@jdresources.net>
AuthorDate: Wed Oct 14 14:52:28 2026 +0100
Merge branch '9.0.x' into 9.1.x
Spring Boot 4.2.0-M2 manages Selenium 4.49.0, OpenTelemetry 1.65.0 and
Byte Buddy 1.18.14, so the 8.0.x pins that carried Selenium 4.49.0 above
Boot 4.1 are dropped here: Selenium and OpenTelemetry would repeat Boot's
versions, and Byte Buddy's 1.18.13 would downgrade Boot's. SLF4J stays
inherited, as 9.1.x already had it. AGENTS.md takes the dynamic-version
rule from 9.0.x and keeps 9.1.x's version-free BOM inheritance rule.
.agents/skills/README.md | 1 +
.agents/skills/gradle-developer/SKILL.md | 9 +-
.agents/skills/grails-ai-developer | 1 +
.github/dependency-graph/external-references.yml | 1 +
.github/workflows/forge-deploy-aws.yml | 4 +-
.gitignore | 4 +
AGENTS.md | 5 +-
RELEASE.md | 4 +-
THREAT_MODEL.md | 6 +-
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
build-logic/plugins/build.gradle | 13 +
.../grails/buildsrc/BomDependencyGraph.groovy | 187 +++++++
.../grails/buildsrc/GrailsCodeStylePlugin.groovy | 2 +-
.../GrailsDependencyValidatorPlugin.groovy | 103 ++--
.../org/apache/grails/buildsrc/SbomPlugin.groovy | 4 +
.../buildsrc/ValidateDependencyVersionsTask.groovy | 89 ++-
.../buildsrc/WriteGrailsVersionInfoTask.groovy | 12 +-
.../GrailsGroovyExtensionTransformer.groovy | 26 +-
.../shadowjar/GrailsShadowLicenseTransform.groovy | 0
.../shadowjar/GrailsShadowNoticeTransform.groovy | 0
.../internal/tasks/GenerateManpageAsciidoc.java | 0
.../internal/tasks/PicocliBuildCompletionTask.java | 0
.../grails/buildsrc/BomDependencyGraphSpec.groovy | 41 +-
.../ValidateDependencyVersionsTaskSpec.groovy | 178 +++++-
.../buildsrc/WriteGrailsVersionInfoTaskSpec.groovy | 122 ++++
.../GrailsGroovyExtensionTransformerSpec.groovy | 125 +++++
build.gradle | 13 +-
dependencies.gradle | 4 +
end-to-end/agent-skills-plain-build/build.gradle | 1 +
end-to-end/agent-skills/build.gradle | 1 +
.../grails/e2e/skills/AgentSkillsSpec.groovy | 1 +
gradle.properties | 4 +-
gradle/docs-dependencies.gradle | 6 +
gradle/publish-root-config.gradle | 2 +
gradle/rat-root-config.gradle | 2 +-
gradle/wrapper/gradle-wrapper.properties | 2 +-
grails-async/plugin/build.gradle | 6 +
.../grails/async/web/StreamItemRenderer.groovy | 41 ++
.../web/async/ControllersAsyncGrailsPlugin.groovy | 53 +-
.../web/async/mvc/DefaultStreamItemRenderer.groovy | 52 +-
.../web/async/mvc/JacksonStreamItemRenderer.groovy | 67 +++
.../mvc/PublisherActionResultTransformer.groovy | 177 ++++++
.../web/async/mvc/ServerSentEventFormatter.groovy | 126 +++++
.../web/async/mvc/ServerSentEventSubscriber.groovy | 209 +++++++
.../web/async/mvc/SingleValueSubscriber.groovy | 86 +++
.../additional-spring-configuration-metadata.json | 21 +
.../async/ControllersAsyncGrailsPluginSpec.groovy | 94 ++++
.../PublisherActionResultTransformerSpec.groovy | 388 +++++++++++++
.../async/mvc/ServerSentEventFormatterSpec.groovy | 133 +++++
.../orm/hibernate/query/HqlQueryContext.java | 97 +++-
.../hibernate/HibernateGormStaticApiSpec.groovy | 71 +++
.../orm/hibernate/query/HqlQueryContextSpec.groovy | 94 ++++
grails-doc/build.gradle | 14 +-
grails-doc/src/en/guide/async/asyncStreaming.adoc | 110 ++++
.../guide/async/rxjava/asyncServerSentEvents.adoc | 2 +
.../src/en/guide/commandLine/creatingProject.adoc | 2 +-
.../src/en/guide/commandLine/interactiveMode.adoc | 10 +-
.../src/en/guide/gettingStarted/agentSkills.adoc | 3 +
grails-doc/src/en/guide/introduction/whatsNew.adoc | 14 +
.../src/en/guide/testing/functionalTesting.adoc | 40 +-
.../theWebLayer/gsp/GSPBasics/pageDirectives.adoc | 40 ++
grails-doc/src/en/guide/toc.yml | 10 +
.../src/en/guide/upgrading/upgrading81x.adoc | 53 ++
grails-doc/src/en/guide/usingAi.adoc | 32 ++
grails-doc/src/en/guide/usingAi/aiChatClient.adoc | 87 +++
.../src/en/guide/usingAi/aiConfiguration.adoc | 74 +++
.../src/en/guide/usingAi/aiInstallation.adoc | 43 ++
grails-doc/src/en/guide/usingAi/aiProviders.adoc | 213 +++++++
grails-doc/src/en/guide/usingAi/aiStreaming.adoc | 64 +++
grails-doc/src/en/guide/usingAi/aiTesting.adoc | 77 +++
.../src/en/ref/Command Line/create-plugin.adoc | 2 +-
.../src/en/ref/Command Line/create-restapi.adoc | 2 +-
.../src/en/ref/Command Line/create-web-plugin.adoc | 2 +-
grails-doc/src/en/ref/Command Line/help.adoc | 4 +-
.../src/en/ref/Command Line/list-features.adoc | 6 +
grails-forge/.gitattributes | 5 -
grails-forge/.gitignore | 20 -
grails-forge/README.md | 61 +-
grails-forge/build.gradle | 18 +-
grails-forge/buildSrc/build.gradle | 62 ---
grails-forge/buildSrc/settings.gradle | 35 --
.../forge/rocker/plugin/JavaGeneratorRunnable.java | 166 ------
.../forge/rocker/plugin/RockerConfiguration.java | 99 ----
.../grails/forge/rocker/plugin/RockerPlugin.java | 92 ---
.../rocker/plugin/RockerSourceSetProperty.java | 80 ---
.../org/grails/forge/rocker/plugin/RockerTask.java | 185 -------
.../forge/rocker/plugin/TemplateDirectorySet.java | 124 -----
.../forge/rocker/plugin/WhitespaceProcessor.java | 52 --
grails-forge/config/checkstyle/checkstyle.xml | 227 --------
grails-forge/config/spotless.license.java | 18 -
grails-forge/docs/aws-elastic-beanstalk.md | 18 +-
grails-forge/docs/choose-postgresql.png | Bin 108993 -> 0 bytes
grails-forge/docs/cloud_sql_create_intance.png | Bin 100207 -> 0 bytes
grails-forge/docs/create-database.png | Bin 150843 -> 0 bytes
grails-forge/docs/create-two-databases.png | Bin 175471 -> 0 bytes
grails-forge/docs/dbinstance-options.png | Bin 100921 -> 0 bytes
grails-forge/docs/enable-cloud-sql-admin-api.png | Bin 151032 -> 0 bytes
grails-forge/docs/enable-compute-engine-api.png | Bin 79831 -> 0 bytes
.../etc/bin/generate-build-artifact-hashes.groovy | 79 ---
grails-forge/etc/bin/test-reproducible-builds.sh | 64 ---
grails-forge/gradle.properties | 33 +-
grails-forge/gradle/code-style-config.gradle | 96 ----
grails-forge/gradle/doc-config.gradle | 15 +-
grails-forge/gradle/groovy-version-pin.gradle | 29 -
.../gradle/micronaut-openapi-config.gradle | 53 --
grails-forge/gradle/test-config.gradle | 26 +-
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
grails-forge/grails-cli-shadow/build.gradle | 11 +
grails-forge/grails-cli/build.gradle | 16 +-
.../grails/cli/DelegatingShellApplication.groovy | 2 +-
.../grails-forge-analytics-postgres/build.gradle | 120 ----
.../analytics/postgres/AnalyticsController.java | 98 ----
.../forge/analytics/postgres/Application.java | 140 -----
.../analytics/postgres/ApplicationRepository.java | 53 --
.../grails/forge/analytics/postgres/Feature.java | 79 ---
.../analytics/postgres/FeatureRepository.java | 121 ----
.../org/grails/forge/analytics/postgres/Main.java | 49 --
.../postgres/gcp/GoogleCloudSqlSetup.java | 58 --
.../native-image.properties | 24 -
.../src/main/resources/application-dev.yml | 9 -
.../src/main/resources/application.yml | 14 -
.../resources/databasemigrations/V1__schema.sql | 21 -
.../src/main/resources/logback.xml | 15 -
.../postgres/StoreGeneratedProjectStatsSpec.groovy | 125 -----
grails-forge/grails-forge-api/build.gradle | 83 ---
.../grails/forge/api/ApplicationController.java | 240 --------
.../org/grails/forge/api/ApplicationTypeDTO.java | 129 -----
.../forge/api/ApplicationTypeOperations.java | 75 ---
.../org/grails/forge/api/DevelopmentReloading.java | 50 --
.../grails/forge/api/DevelopmentReloadingDTO.java | 103 ----
.../main/java/org/grails/forge/api/FeatureDTO.java | 153 -----
.../java/org/grails/forge/api/FeatureService.java | 104 ----
.../java/org/grails/forge/api/GormImplDTO.java | 111 ----
.../java/org/grails/forge/api/JdkVersionDTO.java | 110 ----
.../java/org/grails/forge/api/LanguageDTO.java | 124 -----
.../main/java/org/grails/forge/api/LinkDTO.java | 63 ---
.../java/org/grails/forge/api/RequestInfo.java | 139 -----
.../java/org/grails/forge/api/SelectOptionDTO.java | 62 ---
.../java/org/grails/forge/api/ServletImplDTO.java | 100 ----
.../forge/api/analytics/GenerationListener.java | 68 ---
.../forge/api/bind/RequestInfoArgumentBinder.java | 93 ----
.../forge/api/create/AbstractCreateController.java | 117 ----
.../forge/api/create/zip/ZipCreateController.java | 196 -------
.../forge/api/create/zip/ZipCreateOperation.java | 69 ---
.../org/grails/forge/api/diff/DiffController.java | 228 --------
.../org/grails/forge/api/diff/DiffOperations.java | 92 ---
.../api/options/ApplicationTypeSelectOptions.java | 42 --
.../options/DevelopmentReloadingSelectOptions.java | 42 --
.../forge/api/options/JdkVersionSelectOptions.java | 42 --
.../forge/api/options/LanguageSelectOptions.java | 42 --
.../forge/api/options/SelectOptionsController.java | 60 --
.../forge/api/options/SelectOptionsOperations.java | 27 -
.../api/options/ServletImplSelectOptions.java | 42 --
.../forge/api/preview/PreviewController.java | 120 ----
.../forge/api/preview/PreviewOperations.java | 61 --
.../grails-forge-api/reflect-config.json | 52 --
.../grails-forge-api/resource-config.json | 11 -
.../src/main/resources/application.yml | 5 -
.../src/main/resources/select_options.properties | 1 -
.../forge/api/ApplicationControllerSpec.groovy | 111 ----
.../grails/forge/api/ApplicationTypeClient.groovy | 42 --
.../org/grails/forge/api/CreateClient.groovy | 57 --
.../groovy/org/grails/forge/api/DiffClient.groovy | 56 --
.../org/grails/forge/api/DiffControllerSpec.groovy | 85 ---
.../grails/forge/api/FeatureControllerSpec.groovy | 211 -------
.../org/grails/forge/api/PreviewClient.groovy | 42 --
.../grails/forge/api/PreviewControllerSpec.groovy | 62 ---
.../forge/api/ZipCreateControllerSpec.groovy | 145 -----
.../src/test/resources/features_es.properties | 4 -
.../src/test/resources/logback.xml | 17 -
grails-forge/grails-forge-cli/build.gradle | 109 ++--
.../grails-app/conf/application.yml | 28 +
.../init/org/grails/forge/cli/Application.groovy | 84 +++
.../forge/cli/command/templates/controller.gsp} | 23 +-
.../cli/command/templates/controllerSpec.gsp} | 25 +-
.../views/forge/cli/command/templates/domain.gsp} | 25 +-
.../forge/cli/command/templates/domainSpec.gsp} | 27 +-
.../forge/cli/command/templates/interceptor.gsp} | 25 +-
.../cli/command/templates/interceptorSpec.gsp} | 27 +-
.../views/forge/cli/command/templates/job.gsp} | 23 +-
.../views/forge/cli/command/templates/service.gsp} | 27 +-
.../forge/cli/command/templates/serviceSpec.gsp} | 25 +-
.../views/forge/cli/command/templates/taglib.gsp} | 23 +-
.../forge/cli/command/templates/taglibSpec.gsp} | 25 +-
.../org/grails/forge/cli/CodeGenConfig.groovy | 189 +++++++
.../grails/forge/cli/CommonOptionsMixin.groovy} | 28 +-
.../groovy/org/grails/forge/cli/ForgeCli.groovy | 133 +++++
.../org/grails/forge/cli/ForgeCommand.groovy | 67 +++
.../grails/forge/cli/GrailsPicocliFactory.groovy | 59 ++
.../org/grails/forge/cli/InteractiveShell.groovy} | 107 ++--
.../forge/cli/command/AddPropertyCommand.groovy | 169 ++++++
.../grails/forge/cli/command/BaseCommand.groovy | 88 +++
.../grails/forge/cli/command/CodeGenCommand.groovy | 118 ++++
.../forge/cli/command/CreateAppCommand.groovy} | 45 +-
.../grails/forge/cli/command/CreateCommand.groovy | 126 +++++
.../cli/command/CreateControllerCommand.groovy | 84 +++
.../cli/command/CreateDomainClassCommand.groovy | 84 +++
.../cli/command/CreateInterceptorCommand.groovy | 84 +++
.../forge/cli/command/CreateJobCommand.groovy | 85 +++
.../forge/cli/command/CreatePluginCommand.groovy} | 45 +-
.../forge/cli/command/CreateRestApiCommand.groovy} | 45 +-
.../forge/cli/command/CreateServiceCommand.groovy | 84 +++
.../forge/cli/command/CreateTagLibCommand.groovy | 84 +++
.../cli/command/CreateWebPluginCommand.groovy} | 45 +-
.../forge/cli/command/CreateWebappCommand.groovy} | 45 +-
.../command/DevelopmentReloadingCandidates.groovy} | 18 +-
.../command/DevelopmentReloadingConverter.groovy} | 20 +-
.../forge/cli/command/GormImplCandidates.groovy} | 17 +-
.../forge/cli/command/GormImplConverter.groovy} | 22 +-
.../forge/cli/command/LanguageCandidates.groovy} | 17 +-
.../forge/cli/command/LanguageConverter.groovy} | 18 +-
.../grails/forge/cli/command/ListFeatures.groovy | 106 ++++
.../cli/command/ServletImplCandidates.groovy} | 17 +-
.../forge/cli/command/ServletImplConverter.groovy} | 20 +-
.../forge/cli/util/GrailsVersionProvider.groovy} | 28 +-
.../java/org/grails/forge/cli/Application.java | 128 -----
.../java/org/grails/forge/cli/CodeGenConfig.java | 180 ------
.../org/grails/forge/cli/GrailsPicocliFactory.java | 57 --
.../forge/cli/command/AddPropertyCommand.java | 181 ------
.../org/grails/forge/cli/command/BaseCommand.java | 92 ---
.../grails/forge/cli/command/CodeGenCommand.java | 123 -----
.../grails/forge/cli/command/CreateCommand.java | 137 -----
.../forge/cli/command/CreateControllerCommand.java | 88 ---
.../cli/command/CreateDomainClassCommand.java | 88 ---
.../cli/command/CreateInterceptorCommand.java | 88 ---
.../grails/forge/cli/command/CreateJobCommand.java | 87 ---
.../forge/cli/command/CreateServiceCommand.java | 88 ---
.../forge/cli/command/CreateTagLibCommand.java | 88 ---
.../org/grails/forge/cli/command/ListFeatures.java | 111 ----
.../grails-forge-cli/native-image.properties | 2 -
.../grails-forge-cli/resource-config.json | 7 -
.../src/main/resources/simplelogger.properties | 23 +
.../org/grails/forge/cli/ApplicationSpec.groovy | 110 ++++
.../CodeGenConfigDevelopmentReloadingSpec.groovy | 24 +-
.../org/grails/forge/cli/CommandFixture.groovy | 6 +-
.../groovy/org/grails/forge/cli/CommandSpec.groovy | 8 +
.../org/grails/forge/cli/ForgeCliSpec.groovy} | 41 +-
.../cli/command/ApplicationCommandSpec.groovy | 18 +-
.../forge/cli/command/CodeGenCommandSpec.groovy | 21 +-
.../forge/cli/command/CreateAppCommandSpec.groovy | 34 +-
.../cli/command/CreateControllerCommandSpec.groovy | 8 -
.../command/CreateDomainClassCommandSpec.groovy | 7 -
.../command/CreateInterceptorCommandSpec.groovy | 9 -
.../forge/cli/command/CreateJobCommandSpec.groovy | 8 -
.../cli/command/CreateServiceCommandSpec.groovy | 8 -
.../cli/command/CreateTagLibCommandSpec.groovy | 12 -
.../groovy/org/grails/forge/cli/CliRunner.groovy} | 21 +-
grails-forge/grails-forge-core/build.gradle | 80 +--
.../asciidoctor/template/asciidocGradle.gsp} | 17 +-
.../feature/asciidoctor/template/indexAdoc.gsp} | 8 +-
.../views/forge/feature/build/gitignore.gsp} | 6 +-
.../feature/build/gradle/templates/buildGradle.gsp | 140 +++++
.../gradle/templates/buildSrcBuildGradle.gsp} | 56 +-
.../build/gradle/templates/dependencies.gsp} | 34 +-
.../build/gradle/templates/gradleProperties.gsp} | 38 +-
.../gradle/templates/gradleWrapperProperties.gsp} | 33 +-
.../build/gradle/templates/settingsGradle.gsp | 45 +-
.../grails-app/views/forge/feature/cli.gsp | 43 ++
.../plain/templates/plainGithubWorkflow.gsp} | 27 +-
.../github/workflows/templates/javaSetup.gsp} | 24 +-
.../grails/templates/applicationController.gsp} | 14 +-
.../forge/feature/grails/templates/plugin.gsp} | 41 +-
.../feature/grails/templates/urlMappings.gsp} | 29 +-
.../feature/lang/groovy/templates/application.gsp} | 58 +-
.../feature/lang/groovy/templates/bootStrap.gsp} | 37 +-
.../forge/feature/logging/template/logback.gsp} | 12 +-
.../migration/templates/dbMigrationGradle.gsp} | 11 +-
.../forge/feature/other/template/maindocs.gsp} | 23 +-
.../forge/feature/other/template/markdownLink.gsp} | 11 +-
.../views/forge/feature/other/template/readme.gsp} | 45 +-
.../forge/feature/security/template/role.gsp} | 18 +-
.../template/securityApplicationGroovy.gsp} | 31 +-
.../forge/feature/security/template/user.gsp} | 26 +-
.../feature/security/template/userClassic.gsp} | 28 +-
.../security/template/userClassicService.gsp} | 16 +-
.../feature/security/template/userClassicSpec.gsp} | 14 +-
.../feature/security/template/userController.gsp} | 16 +-
.../forge/feature/security/template/userRole.gsp} | 20 +-
.../feature/security/template/userService.gsp} | 20 +-
.../forge/feature/security/template/userSpec.gsp} | 14 +-
.../feature/spring/template/springResources.gsp} | 6 +-
.../feature/test/template/containerGebSpec.gsp} | 25 +-
.../forge/feature/test/template/gebConfig.gsp} | 14 +-
.../views/forge/feature/test/template/gebSpec.gsp} | 25 +-
.../forge/feature/view/json/templates/_errors.gsp} | 6 +-
.../forge/feature/view/json/templates/_object.gsp} | 8 +-
.../forge/feature/view/json/templates/error.gsp} | 6 +-
.../forge/feature/view/json/templates/index.gsp} | 6 +-
.../feature/view/json/templates/notFound.gsp} | 6 +-
.../feature/view/markup/templates/_errors.gsp} | 6 +-
.../feature/view/markup/templates/_object.gsp} | 8 +-
.../forge/feature/view/markup/templates/error.gsp} | 6 +-
.../forge/feature/view/markup/templates/index.gsp} | 6 +-
.../feature/view/markup/templates/notFound.gsp} | 6 +-
.../views/forge/template/api/grailsForgeApi.gsp} | 37 +-
.../org/grails/forge/ForgeCoreConfiguration.groovy | 50 ++
.../org/grails/forge/ForgeGrailsPlugin.groovy | 49 ++
.../forge/application/ApplicationType.groovy} | 44 +-
.../forge/application/ContextFactory.groovy} | 131 +++--
.../forge/application/OperatingSystem.groovy} | 27 +-
.../application/PluginAvailableFeatures.groovy} | 20 +-
.../org/grails/forge/application/Project.groovy | 93 ++++
.../forge/application/ProjectIdentifier.groovy} | 26 +-
.../application/RestApiAvailableFeatures.groovy} | 20 +-
.../forge/application/WebAvailableFeatures.groovy} | 23 +-
.../application/WebPluginAvailableFeatures.groovy} | 20 +-
.../generator/DefaultProjectGenerator.groovy} | 103 ++--
.../application/generator/GeneratorContext.groovy | 397 +++++++++++++
.../application/generator/ProjectGenerator.groovy} | 30 +-
.../org/grails/forge/build/BuildPlugin.groovy} | 28 +-
.../org/grails/forge/build/BuildProperties.groovy} | 36 +-
.../org/grails/forge/build/Comment.groovy} | 15 +-
.../org/grails/forge/build/Property.groovy} | 15 +-
.../forge/build/dependencies/Coordinate.groovy} | 45 +-
.../build/dependencies/CoordinateResolver.groovy} | 10 +-
.../dependencies/DefaultCoordinateResolver.groovy} | 32 +-
.../forge/build/dependencies/Dependency.groovy | 393 +++++++++++++
.../build/dependencies/DependencyContext.groovy} | 41 +-
.../build/dependencies/DependencyCoordinate.groovy | 120 ++++
.../dependencies/LookupFailedException.groovy} | 12 +-
.../grails/forge/build/dependencies/Phase.groovy} | 8 +-
.../PomDependencyVersionResolver.groovy | 150 +++++
.../grails/forge/build/dependencies/Scope.groovy} | 97 ++--
.../grails/forge/build/dependencies/Source.groovy} | 8 +-
.../build/gradle/DefaultGradleRepository.groovy | 141 +++++
.../grails/forge/build/gradle/GradleBuild.groovy | 162 ++++++
.../forge/build/gradle/GradleBuildCreator.groovy} | 58 +-
.../forge/build/gradle/GradleConfiguration.groovy} | 134 ++---
.../forge/build/gradle/GradleDependency.groovy | 123 +++++
.../grails/forge/build/gradle/GradleDsl.groovy} | 8 +-
.../grails/forge/build/gradle/GradlePlugin.groovy | 256 +++++++++
.../forge/build/gradle/GradleRepository.groovy} | 97 ++--
.../build/gradle/MavenCentralRepository.groovy} | 25 +-
.../build/gradle/MavenLocalRepository.groovy} | 25 +-
.../build/gradle/VersionRegexRepoFilter.groovy | 56 ++
.../grails/forge/build/gradle/VersionType.groovy} | 8 +-
.../grails/forge/defaults/HasDefaultBuild.groovy} | 11 +-
.../HasDefaultDevelopmentReloading.groovy} | 12 +-
.../grails/forge/defaults/IncludesDefaults.groovy} | 10 +-
.../grails/forge/defaults/LanguageDefaults.groovy} | 32 +-
.../org/grails/forge/diff/FeatureDiffer.groovy} | 114 ++--
.../forge/feature/ApplicationFeature.groovy} | 14 +-
.../grails/forge/feature/AvailableFeatures.groovy} | 20 +-
.../forge/feature/BaseAvailableFeatures.groovy | 88 +++
.../org/grails/forge/feature/Category.groovy | 65 +++
.../grails/forge/feature/DefaultFeature.groovy} | 14 +-
.../org/grails/forge/feature/Feature.groovy} | 50 +-
.../org/grails/forge/feature/FeatureContext.groovy | 133 +++++
.../org/grails/forge/feature/FeaturePhase.groovy} | 17 +-
.../grails/forge/feature/FeaturePredicate.groovy} | 11 +-
.../grails/forge/feature/FeatureRegistry.groovy | 94 ++++
.../org/grails/forge/feature/Features.groovy | 134 +++++
.../org/grails/forge/feature/OneOfFeature.groovy} | 10 +-
.../grails/forge/feature/ai/GrailsSpringAi.groovy | 87 +++
.../forge/feature/ai/SpringAiAnthropic.groovy | 62 +++
.../grails/forge/feature/ai/SpringAiOllama.groovy | 68 +++
.../grails/forge/feature/ai/SpringAiOpenAi.groovy | 62 +++
.../feature/ai/SpringAiProviderFeature.groovy | 90 +++
.../org/grails/forge/feature/api/OpenApi.groovy | 87 +++
.../forge/feature/asciidoctor/Asciidoctor.groovy | 83 +++
.../feature/assetPipeline/AssetPipeline.groovy | 159 ++++++
.../forge/feature/build/BuildFeature.groovy} | 18 +-
.../forge/feature/build/gradle/Dockerfile.groovy | 85 +++
.../forge/feature/build/gradle/Gradle.groovy | 100 ++++
.../feature/build/gradle/GradleBuildSrc.groovy | 77 +++
.../build/gradle/GradleBuildSrcFeature.groovy} | 22 +-
.../feature/build/gradle/GradleSettingsFile.groovy | 81 +++
.../build/gradle/GradleSettingsFileFeature.groovy} | 22 +-
.../forge/feature/cache/CacheFeature.groovy} | 18 +-
.../org/grails/forge/feature/cache/EHCache.groovy | 67 +++
.../grails/forge/feature/cache/GrailsCache.groovy | 76 +++
.../config/ApplicationConfiguration.groovy} | 38 +-
.../feature/config/BootstrapConfiguration.groovy} | 24 +-
.../forge/feature/config/Configuration.groovy} | 157 +++---
.../feature/config/ConfigurationFeature.groovy} | 39 +-
.../grails/forge/feature/config/Properties.groovy} | 47 +-
.../org/grails/forge/feature/config/Yaml.groovy} | 54 +-
.../forge/feature/database/AsyncGorm.groovy} | 68 +--
.../DatabaseDriverConfigurationFeature.groovy} | 57 +-
.../feature/database/DatabaseDriverFeature.groovy | 88 +++
.../forge/feature/database/GormFeature.groovy} | 26 +-
.../feature/database/GormOneOfFeature.groovy} | 12 +-
.../feature/database/GrailsDataHibernate5.groovy | 128 +++++
.../feature/database/GrailsDataHibernate7.groovy | 124 +++++
.../database/GrailsDataHibernateValidator.groovy} | 35 +-
.../feature/database/GrailsDataMongoDB.groovy} | 91 ++-
.../forge/feature/database/GraphqlGorm.groovy} | 68 +--
.../org/grails/forge/feature/database/H2.groovy | 106 ++++
.../forge/feature/database/JpaFeature.groovy} | 8 +-
.../feature/database/MongoDBTestingSupport.groovy | 78 +++
.../MongoDBTestingSupportValidator.groovy} | 28 +-
.../forge/feature/database/MongoFeature.groovy} | 30 +-
.../grails/forge/feature/database/MongoSync.groovy | 87 +++
.../org/grails/forge/feature/database/MySQL.groovy | 98 ++++
.../grails/forge/feature/database/Neo4jGorm.groovy | 77 +++
.../forge/feature/database/PostgreSQL.groovy | 99 ++++
.../grails/forge/feature/database/SQLServer.groovy | 98 ++++
.../forge/feature/database/TestContainers.groovy | 134 +++++
.../github/workflows/GitHubWorkflowFeature.groovy} | 33 +-
.../forge/feature/github/workflows/Secret.groovy} | 37 +-
.../plain/PlainGithubWorkflowFeature.groovy | 59 ++
.../grails/forge/feature/grails/GrailsBase.groovy | 117 ++++
.../feature/grails/GrailsCompileStatic.groovy} | 38 +-
.../feature/grails/GrailsDefaultPlugins.groovy | 91 +++
.../forge/feature/grails/GrailsGradlePlugin.groovy | 82 +++
.../forge/feature/grails/GrailsUrlMappings.groovy | 63 +++
.../forge/feature/grails/GrailsWebConsole.groovy | 74 +++
.../feature/grailsProfiles/GrailsProfiles.groovy | 79 +++
.../feature/grailsWrapper/GrailsWrapper.groovy | 81 +++
.../forge/feature/lang/LanguageFeature.groovy} | 22 +-
.../feature/lang/groovy/GrailsApplication.groovy | 88 +++
.../lang/groovy/GrailsApplicationFeature.groovy} | 10 +-
.../grails/forge/feature/logging/Logback.groovy} | 56 +-
.../forge/feature/logging/LogbackConfig.groovy} | 56 +-
.../forge/feature/logging/LoggingFeature.groovy} | 18 +-
.../forge/feature/micronaut/GrailsMicronaut.groovy | 103 ++++
.../micronaut/GrailsMicronautValidator.groovy} | 29 +-
.../feature/micronaut/MicronautHttpClient.groovy | 117 ++++
.../migration/DatabaseMigrationPlugin.groovy | 80 +++
.../feature/migration/MigrationFeature.groovy} | 18 +-
.../org/grails/forge/feature/other/AppName.groovy | 66 +++
.../grails/forge/feature/other/GrailsQuartz.groovy | 74 +++
.../feature/other/GrailsStartupProgress.groovy | 79 +++
.../forge/feature/other/HibernateValidator.groovy | 70 +++
.../org/grails/forge/feature/other/Readme.groovy | 94 ++++
.../grails/forge/feature/other/ShadePlugin.groovy | 77 +++
.../grails/forge/feature/reloading/Jrebel.groovy | 74 +++
.../feature/reloading/ReloadingFeature.groovy} | 26 +-
.../feature/reloading/SpringBootDevTools.groovy | 93 ++++
.../feature/security/GrailsSpringSecurity.groovy | 90 +++
.../feature/security/GrailsSpringSecurityUi.groovy | 97 ++++
.../security/PrimarySecurityFeature.groovy} | 10 +-
.../forge/feature/security/SecurityFeature.groovy | 87 +++
.../security/SpringBootStarterSecurity.groovy | 86 +++
.../forge/feature/sitemesh3/Sitemesh3.groovy} | 54 +-
.../feature/spring/SpringBootAutoconfigure.groovy | 67 +++
.../spring/SpringBootEmbeddedServlet.groovy} | 22 +-
.../feature/spring/SpringBootJettyFeature.groovy | 63 +++
.../feature/spring/SpringBootStarterFeature.groovy | 76 +++
.../feature/spring/SpringBootTomcatFeature.groovy} | 60 +-
.../spring/SpringBootUndertowFeature.groovy} | 54 +-
.../spring/SpringBootVirtualThreads.groovy} | 46 +-
.../forge/feature/spring/SpringResources.groovy | 65 +++
.../feature/spring/SpringThreadingFeature.groovy} | 18 +-
.../grails/forge/feature/test/GebFeature.groovy} | 22 +-
.../forge/feature/test/GebWithLocalBrowsers.groovy | 124 +++++
.../feature/test/GebWithTestcontainers.groovy | 106 ++++
.../forge/feature/test/GormTestingSupport.groovy | 67 +++
.../feature/test/GrailsWebTestingSupport.groovy | 67 +++
.../org/grails/forge/feature/test/Mockito.groovy | 77 +++
.../forge/feature/test/MockitoValidator.groovy} | 25 +-
.../org/grails/forge/feature/test/Spock.groovy | 73 +++
.../feature/test/ViewsJsonTestingSupport.groovy | 67 +++
.../validation/CompositeFeatureValidator.groovy} | 35 +-
.../feature/validation/FeatureValidator.groovy} | 18 +-
.../validation/OneOfFeatureValidator.groovy} | 39 +-
.../org/grails/forge/feature/view/GrailsGsp.groovy | 106 ++++
.../grails/forge/feature/view/GrailsLayout.groovy} | 34 +-
.../grails/forge/feature/view/GrailsViews.groovy | 72 +++
.../grails/forge/feature/view/GspLayout.groovy} | 24 +-
.../grails/forge/feature/view/Scaffolding.groovy | 88 +++
.../grails/forge/feature/view/json/ViewJson.groovy | 93 ++++
.../forge/feature/view/markup/ViewMarkup.groovy | 77 +++
.../org/grails/forge/feature/web/GrailsWeb.groovy} | 36 +-
.../org/grails/forge/io/ConsoleOutput.groovy} | 37 +-
.../grails/forge/io/FileSystemOutputHandler.groovy | 144 +++++
.../org/grails/forge/io/MapOutputHandler.groovy} | 45 +-
.../org/grails/forge/io/OutputHandler.groovy} | 17 +-
.../org/grails/forge/io/OutputUtils.groovy} | 43 +-
.../org/grails/forge/io/ZipOutputHandler.groovy | 146 +++++
.../org/grails/forge/options/BuildTool.groovy | 78 +++
.../forge/options/DefaultTestViewProvider.groovy} | 19 +-
.../forge/options/DevelopmentReloading.groovy} | 48 +-
.../org/grails/forge/options/FeatureFilter.groovy} | 59 +-
.../org/grails/forge/options/GormImpl.groovy} | 52 +-
.../org/grails/forge/options/JdkVersion.groovy} | 29 +-
.../org/grails/forge/options/Language.groovy | 99 ++++
.../groovy/org/grails/forge/options/Options.groovy | 128 +++++
.../org/grails/forge/options/ServletImpl.groovy} | 38 +-
.../org/grails/forge/options/TestFramework.groovy} | 53 +-
.../grails/forge/options/TestViewProvider.groovy} | 22 +-
.../grails/forge/template/BinaryTemplate.groovy} | 19 +-
.../grails/forge/template/Config4kTemplate.groovy} | 43 +-
.../forge/template/DefaultTemplateRenderer.groovy} | 63 ++-
.../org/grails/forge/template/ForgePages.groovy | 109 ++++
.../org/grails/forge/template/GspTemplate.groovy} | 46 +-
.../org/grails/forge/template/GspView.groovy | 69 +++
.../forge/template/PropertiesTemplate.groovy} | 65 +--
.../org/grails/forge/template/RenderResult.groovy} | 69 +--
.../grails/forge/template/StringTemplate.groovy} | 28 +-
.../org/grails/forge/template/Template.groovy} | 13 +-
.../grails/forge/template/TemplateModel.groovy} | 8 +-
.../grails/forge/template/TemplateRenderer.groovy} | 22 +-
.../org/grails/forge/template/URLTemplate.groovy} | 45 +-
.../org/grails/forge/template/Writable.groovy} | 9 +-
.../org/grails/forge/template/YamlTemplate.groovy | 89 +++
.../org/grails/forge/util/IOFeatureUtil.groovy} | 42 +-
.../org/grails/forge/util/NameUtils.groovy} | 471 ++++++++--------
.../org/grails/forge/util/ThrowingSupplier.groovy} | 10 +-
.../org/grails/forge/util/VersionInfo.groovy | 188 +++++++
.../org/grails/forge/util/ZipUtil.groovy} | 72 ++-
.../java/org/grails/forge/analytics/Generated.java | 112 ----
.../grails/forge/analytics/SelectedFeature.java | 38 --
.../forge/application/PluginAvailableFeatures.java | 35 --
.../java/org/grails/forge/application/Project.java | 94 ----
.../application/RestApiAvailableFeatures.java | 34 --
.../forge/application/WebAvailableFeatures.java | 35 --
.../application/WebPluginAvailableFeatures.java | 34 --
.../application/generator/GeneratorContext.java | 387 -------------
.../forge/build/dependencies/Dependency.java | 393 -------------
.../build/dependencies/DependencyCoordinate.java | 121 ----
.../build/dependencies/LookupFailedException.java | 26 -
.../dependencies/PomDependencyVersionResolver.java | 136 -----
.../build/gradle/DefaultGradleRepository.java | 142 -----
.../org/grails/forge/build/gradle/GradleBuild.java | 167 ------
.../forge/build/gradle/GradleDependency.java | 125 -----
.../grails/forge/build/gradle/GradlePlugin.java | 256 ---------
.../forge/build/gradle/VersionRegexRepoFilter.java | 22 -
.../grails/forge/defaults/IncludesDefaults.java | 23 -
.../forge/feature/BaseAvailableFeatures.java | 86 ---
.../java/org/grails/forge/feature/Category.java | 60 --
.../org/grails/forge/feature/FeatureContext.java | 133 -----
.../java/org/grails/forge/feature/Features.java | 137 -----
.../java/org/grails/forge/feature/api/OpenApi.java | 87 ---
.../forge/feature/asciidoctor/Asciidoctor.java | 82 ---
.../forge/feature/assetPipeline/AssetPipeline.java | 160 ------
.../forge/feature/build/gradle/Dockerfile.java | 85 ---
.../grails/forge/feature/build/gradle/Gradle.java | 109 ----
.../forge/feature/build/gradle/GradleBuildSrc.java | 81 ---
.../feature/build/gradle/GradleSettingsFile.java | 80 ---
.../build/gradle/templates/buildGradle.rocker.raw | 156 ------
.../gradle/templates/gradleProperties.rocker.raw | 33 --
.../gradle/templates/settingsGradle.rocker.raw | 35 --
.../org/grails/forge/feature/cache/EHCache.java | 67 ---
.../grails/forge/feature/cache/GrailsCache.java | 76 ---
.../java/org/grails/forge/feature/cli.rocker.raw | 48 --
.../feature/config/ApplicationConfiguration.java | 40 --
.../feature/database/DatabaseDriverFeature.java | 89 ---
.../feature/database/GrailsDataHibernate5.java | 129 -----
.../feature/database/GrailsDataHibernate7.java | 125 -----
.../java/org/grails/forge/feature/database/H2.java | 106 ----
.../feature/database/MongoDBTestingSupport.java | 76 ---
.../grails/forge/feature/database/MongoSync.java | 85 ---
.../org/grails/forge/feature/database/MySQL.java | 96 ----
.../grails/forge/feature/database/Neo4jGorm.java | 78 ---
.../grails/forge/feature/database/PostgreSQL.java | 97 ----
.../grails/forge/feature/database/SQLServer.java | 96 ----
.../forge/feature/database/TestContainers.java | 134 -----
.../plain/PlainGithubWorkflowFeature.java | 57 --
.../grails/forge/feature/grails/GrailsBase.java | 117 ----
.../forge/feature/grails/GrailsDefaultPlugins.java | 91 ---
.../forge/feature/grails/GrailsGradlePlugin.java | 82 ---
.../forge/feature/grails/GrailsUrlMappings.java | 63 ---
.../forge/feature/grails/GrailsWebConsole.java | 74 ---
.../feature/grailsProfiles/GrailsProfiles.java | 80 ---
.../forge/feature/grailsWrapper/GrailsWrapper.java | 81 ---
.../feature/lang/groovy/GrailsApplication.java | 89 ---
.../forge/feature/micronaut/GrailsMicronaut.java | 103 ----
.../feature/micronaut/MicronautHttpClient.java | 117 ----
.../feature/migration/DatabaseMigrationPlugin.java | 79 ---
.../org/grails/forge/feature/other/AppName.java | 67 ---
.../grails/forge/feature/other/GrailsQuartz.java | 72 ---
.../forge/feature/other/GrailsStartupProgress.java | 78 ---
.../forge/feature/other/HibernateValidator.java | 68 ---
.../org/grails/forge/feature/other/Readme.java | 99 ----
.../grails/forge/feature/other/ShadePlugin.java | 75 ---
.../forge/feature/other/template/readme.rocker.raw | 41 --
.../org/grails/forge/feature/reloading/Jrebel.java | 74 ---
.../feature/reloading/SpringBootDevTools.java | 94 ----
.../feature/security/GrailsSpringSecurity.java | 91 ---
.../feature/security/GrailsSpringSecurityUi.java | 98 ----
.../forge/feature/security/SecurityFeature.java | 88 ---
.../security/SpringBootStarterSecurity.java | 88 ---
.../feature/spring/SpringBootAutoconfigure.java | 66 ---
.../feature/spring/SpringBootJettyFeature.java | 63 ---
.../feature/spring/SpringBootStarterFeature.java | 76 ---
.../forge/feature/spring/SpringResources.java | 64 ---
.../forge/feature/test/GebWithLocalBrowsers.java | 124 -----
.../forge/feature/test/GebWithTestcontainers.java | 106 ----
.../forge/feature/test/GormTestingSupport.java | 66 ---
.../feature/test/GrailsWebTestingSupport.java | 66 ---
.../org/grails/forge/feature/test/Mockito.java | 77 ---
.../java/org/grails/forge/feature/test/Spock.java | 73 ---
.../feature/test/ViewsJsonTestingSupport.java | 66 ---
.../org/grails/forge/feature/view/GrailsGsp.java | 107 ----
.../org/grails/forge/feature/view/GrailsViews.java | 70 ---
.../org/grails/forge/feature/view/Scaffolding.java | 88 ---
.../grails/forge/feature/view/json/ViewJson.java | 93 ----
.../forge/feature/view/markup/ViewMarkup.java | 75 ---
.../grails/forge/io/FileSystemOutputHandler.java | 149 -----
.../java/org/grails/forge/io/ZipOutputHandler.java | 133 -----
.../java/org/grails/forge/options/BuildTool.java | 79 ---
.../org/grails/forge/options/FeatureFilter.java | 66 ---
.../forge/options/GormImplTypeConverter.java | 47 --
.../java/org/grails/forge/options/Language.java | 100 ----
.../java/org/grails/forge/options/Options.java | 158 ------
.../org/grails/forge/template/RockerWritable.java | 39 --
.../org/grails/forge/template/TemplateModel.java | 22 -
.../org/grails/forge/template/YamlTemplate.java | 93 ----
.../java/org/grails/forge/util/VersionInfo.java | 196 -------
.../grails-forge-core/resource-config.json | 14 -
...rk.boot.autoconfigure.AutoConfiguration.imports | 1 +
.../org/grails/forge/ApplicationContextSpec.groovy | 8 +-
.../groovy/org/grails/forge/BuildBuilder.groovy | 12 +-
...tionContextSpec.groovy => ForgeContexts.groovy} | 30 +-
...ec.groovy => ForgeCoreConfigurationSpec.groovy} | 18 +-
.../org/grails/forge/ForgeGrailsPluginSpec.groovy | 134 +++++
.../PomDependencyVersionResolverSpec.groovy | 10 +-
.../forge/build/gradle/GradleRepositorySpec.groovy | 16 +
.../grails/forge/build/gradle/GradleSpec.groovy | 5 +-
.../forge/feature/BaseAvailableFeaturesSpec.groovy | 6 +-
.../forge/feature/ai/GrailsSpringAiSpec.groovy | 147 +++++
.../grails/forge/feature/cache/CacheSpec.groovy | 4 +-
.../forge/feature/config/PropertiesSpec.groovy | 4 +-
.../grails/forge/feature/config/YamlSpec.groovy | 4 +-
.../feature/database/GrailsDataMongoDBSpec.groovy | 2 +-
.../forge/feature/database/MongoSyncSpec.groovy | 16 +
.../grails/forge/feature/database/MySQLSpec.groovy | 2 +-
.../forge/feature/database/Neo4JGormSpec.groovy | 2 +-
.../forge/feature/database/PostgresSpec.groovy | 2 +-
.../forge/feature/database/SQLServerSpec.groovy | 2 +-
.../feature/database/TestContainersSpec.groovy | 6 +-
.../workflows/PlainGithubWorkflowSpec.groovy | 4 +-
.../forge/feature/grails/GrailsBaseSpec.groovy | 4 +-
.../feature/grails/GrailsGradlePluginSpec.groovy | 4 +-
.../feature/grails/GrailsWebConsoleSpec.groovy | 4 +-
.../feature/lang/GrailsApplicationSpec.groovy | 4 +-
.../feature/micronaut/GrailsMicronautSpec.groovy | 4 +-
.../micronaut/MicronautHttpClientSpec.groovy | 4 +-
.../forge/feature/spring/SpringBootSpec.groovy | 4 +-
.../spring/SpringBootVirtualThreadsSpec.groovy | 4 +-
.../forge/fixture/CommandOutputFixture.groovy | 4 +-
.../org/grails/forge/fixture/ContextFixture.groovy | 9 +-
.../org/grails/forge/options/GormImplSpec.groovy | 1 +
...iderSpec.groovy => TestViewProviderSpec.groovy} | 10 +-
.../plugintest/ForgePluginTestApplication.groovy} | 46 +-
.../org/grails/forge/util/VersionInfoSpec.groovy | 6 +-
grails-forge/grails-forge-web-netty/build.gradle | 156 ------
.../java/org/grails/forge/netty/Application.java | 41 --
.../forge/netty/analytics/AnalyticsClient.java | 43 --
.../grails-forge-web-netty/native-image.properties | 18 -
.../grails-forge-web-netty/resource-config.json | 8 -
.../src/main/resources/application-dev.yml | 5 -
.../src/main/resources/application.yml | 37 --
.../src/main/resources/logback.xml | 15 -
.../aws/.platform/nginx/conf.d/proxy.conf | 0
.../aws/Procfile | 0
.../aws/start.sh | 4 +-
grails-forge/grails-forge-web/build.gradle | 124 +++++
.../grails-app/conf/application.yml | 45 ++
.../grails-app/conf/logback.xml} | 24 +-
.../grails-app/conf/openapi-base.yml | 22 +
.../org/grails/forge/web/DiffController.groovy | 142 +++++
.../forge/web/ForgeApplicationController.groovy | 146 +++++
.../org/grails/forge/web/PreviewController.groovy | 102 ++++
.../forge/web/SelectOptionsController.groovy | 52 ++
.../org/grails/forge/web/UrlMappings.groovy | 37 ++
.../grails/forge/web/ZipCreateController.groovy | 132 +++++
.../grails-app/i18n/messages.properties | 19 +
.../init/org/grails/forge/web/Application.groovy} | 44 +-
.../forge/web/ForgeApiIntegrationSpec.groovy | 615 +++++++++++++++++++++
.../resources/api-test-messages_fr.properties} | 9 +-
.../org/grails/forge/api/ApplicationTypeDTO.groovy | 112 ++++
.../grails/forge/api/ApplicationTypeList.groovy} | 30 +-
.../forge/api/ApplicationTypeOperations.groovy} | 24 +-
.../forge/api/DevelopmentReloadingDTO.groovy | 90 +++
.../groovy/org/grails/forge/api/FeatureDTO.groovy | 136 +++++
.../org/grails/forge/api/FeatureList.groovy} | 30 +-
.../org/grails/forge/api/FeatureOperations.groovy} | 22 +-
.../org/grails/forge/api/FeatureService.groovy | 81 +++
.../forge/api/ForgeApplicationService.groovy | 114 ++++
.../org/grails/forge/api/ForgeMessages.groovy} | 16 +-
.../groovy/org/grails/forge/api/GormImplDTO.groovy | 98 ++++
.../forge/api/GrailsForgeConfiguration.groovy} | 78 ++-
.../org/grails/forge/api/JdkVersionDTO.groovy | 97 ++++
.../groovy/org/grails/forge/api/LanguageDTO.groovy | 109 ++++
.../groovy/org/grails/forge/api/LinkDTO.groovy} | 40 +-
.../groovy/org/grails/forge/api/Linkable.groovy} | 34 +-
.../org/grails/forge/api/Relationship.groovy} | 35 +-
.../groovy/org/grails/forge/api/RequestInfo.groovy | 78 +++
.../org/grails/forge/api/SelectOptionDTO.groovy} | 39 +-
.../org/grails/forge/api/SelectOptionsDTO.groovy} | 150 +++--
.../groovy/org/grails/forge/api/Selectable.groovy} | 14 +-
.../org/grails/forge/api/ServletImplDTO.groovy | 86 +++
.../org/grails/forge/api/UserAgentParser.groovy} | 39 +-
.../groovy/org/grails/forge/api/VersionDTO.groovy} | 34 +-
.../forge/api/create/CreateProjectService.groovy | 88 +++
.../options/ApplicationTypeSelectOptions.groovy} | 25 +-
.../DevelopmentReloadingSelectOptions.groovy} | 25 +-
.../api/options/GormImplSelectOptions.groovy} | 25 +-
.../api/options/JdkVersionSelectOptions.groovy} | 25 +-
.../api/options/LanguageSelectOptions.groovy} | 25 +-
.../api/options/SelectOptionsOperations.groovy} | 14 +-
.../api/options/ServletImplSelectOptions.groovy} | 25 +-
.../grails/forge/api/preview/PreviewDTO.groovy} | 33 +-
.../grails/forge/web/ForgeRequestSupport.groovy | 187 +++++++
.../grails/forge/web/GroovyObjectJsonMixin.groovy} | 30 +-
.../forge/web/ForgeRequestSupportSpec.groovy | 162 ++++++
.../forge/web/GrailsForgeConfigurationSpec.groovy | 72 +++
grails-forge/grailsforgearchitecture.jpeg | Bin 218395 -> 0 bytes
grails-forge/infrastructure/README.md | 2 +-
grails-forge/infrastructure/environment.yaml | 9 -
grails-forge/infrastructure/shared.yaml | 2 +-
grails-forge/sam-local.yml | 43 --
grails-forge/settings.gradle | 8 +-
grails-forge/test-core/build.gradle | 39 +-
.../forge/cli/command/CreateControllerSpec.groovy | 6 +-
.../forge/cli/command/CreateInterceptorSpec.groovy | 6 +-
.../forge/cli/command/CreateServiceSpec.groovy | 6 +-
.../forge/cli/command/CreateTagLibSpec.groovy | 6 +-
.../org/grails/forge/utils/CommandSpec.groovy | 13 +-
grails-geb/README.md | 18 +
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
.../plugin/core/GrailsPluginGradlePlugin.groovy | 11 +-
...GrailsPluginGradlePluginNative2AsciiSpec.groovy | 43 ++
.../plugin-native2ascii-off/build.gradle | 8 +
.../plugin-native2ascii-off/gradle.properties | 1 +
.../grails-app/conf/application.yml | 0
.../plugin-native2ascii-off/settings.gradle | 1 +
.../resources/templates/messages_ru.properties | 19 +
.../org/grails/gsp/compiler/GroovyPageParser.java | 18 +-
.../org/grails/gsp/compiler/LogicLineTrimmer.java | 234 ++++++++
.../org/grails/gsp/GspTrimLogicLinesSpec.groovy | 299 ++++++++++
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
grails-skills/ai/build.gradle | 34 ++
.../ai/skills/grails-ai-developer/SKILL.md | 270 +++++++++
.../developer/skills/grails-developer/SKILL.md | 3 +
grails-spring-ai/build.gradle | 96 ++++
.../grails-app/conf/plugin.yml | 36 +-
.../apache/grails/ai/SpringAiGrailsPlugin.groovy | 57 ++
.../ai/async/ChatResponseStreamItemRenderer.groovy | 68 +++
...rk.boot.autoconfigure.AutoConfiguration.imports | 1 +
.../grails/ai/SpringAiAutoConfigurationSpec.groovy | 74 +++
.../grails/ai/SpringAiPluginDefaultsSpec.groovy | 57 ++
.../grails/ai/SpringAiPromptLoggingSpec.groovy | 89 +++
.../ChatResponseStreamItemRendererSpec.groovy | 75 +++
grails-spring-security/acl/plugin/build.gradle | 8 +-
grails-spring-security/plugin/build.gradle | 159 +++---
grails-test-examples/ai/build.gradle | 54 ++
.../ai/grails-app/conf/application.yml | 39 +-
.../ai/grails-app/conf/logback.xml | 22 +-
.../controllers/aiapp/ChatController.groovy | 23 +-
.../controllers/aiapp/StreamController.groovy | 71 +++
.../controllers/aiapp/UrlMappings.groovy | 12 +-
.../ai/grails-app/init/aiapp/Application.groovy | 16 +-
.../grails-app/services/aiapp/AnswerService.groovy | 42 +-
.../groovy/aiapp/AiDefaultsSpec.groovy | 80 +++
.../groovy/aiapp/ChatFunctionalSpec.groovy | 79 +++
.../groovy/aiapp/OwnChatModelFunctionalSpec.groovy | 60 ++
.../groovy/aiapp/OwnModelApplication.groovy | 56 ++
.../groovy/aiapp/StreamingFunctionalSpec.groovy | 84 +++
.../src/test/groovy/aiapp/AnswerServiceSpec.groovy | 35 +-
.../build.gradle | 42 +-
.../groovy/grails/testing/ai/AiUnitTest.groovy | 112 ++++
.../ai/AiStubEnvironmentPostProcessor.groovy | 115 ++++
.../grails/testing/ai/AiStubProperties.groovy | 49 ++
.../apache/grails/testing/ai/AiTestBeans.groovy | 96 ++++
.../testing/ai/AiTestingAutoConfiguration.groovy | 70 +++
.../AiTestingVectorStoreAutoConfiguration.groovy | 67 +++
.../testing/ai/ResettableSimpleVectorStore.groovy | 34 +-
.../grails/testing/ai/ScriptedChatModel.groovy | 165 ++++++
.../testing/ai/SimpleVectorStoreBeans.groovy | 59 ++
.../grails/testing/ai/StubEmbeddingModel.groovy | 129 +++++
.../testing/ai/spock/AiSetupInterceptor.groovy | 55 ++
.../testing/ai/spock/AiSetupSpecInterceptor.groovy | 46 ++
.../ai/spock/AiTestingSupportExtension.groovy | 47 ++
.../additional-spring-configuration-metadata.json | 21 +
...ockframework.runtime.extension.IGlobalExtension | 1 +
.../src/main/resources/META-INF/spring.factories | 13 +-
...rk.boot.autoconfigure.AutoConfiguration.imports | 2 +
.../testing/ai/AiUnitTestConfiguredSpec.groovy | 85 +++
.../testing/ai/AiUnitTestOwnBeansSpec.groovy | 97 ++++
.../groovy/grails/testing/ai/AiUnitTestSpec.groovy | 113 ++++
.../groovy/grails/testing/ai/AnswerService.groovy | 18 +-
.../ai/AiStubEnvironmentPostProcessorSpec.groovy | 162 ++++++
.../ai/AiTestingAutoConfigurationSpec.groovy | 222 ++++++++
.../grails/testing/ai/ScriptedChatModelSpec.groovy | 216 ++++++++
.../testing/ai/StubEmbeddingModelSpec.groovy | 154 ++++++
settings.gradle | 8 +
threat-model.yaml | 4 +-
781 files changed, 26202 insertions(+), 22103 deletions(-)
diff --cc AGENTS.md
index c2eb749110,64639c8a44..6fb7d0d018
--- a/AGENTS.md
+++ b/AGENTS.md
@@@ -144,7 -146,8 +146,8 @@@ All managed dependency versions live i
- **Do not suppress validation to work around a bump.** `allowedBomOverrides` (per-project ext) and dependency exclusions are reserved for an explicit, documented conflict or an agreed-upon workaround — never as a shortcut to silence a version the BOM should simply manage. Comment the reason when you must use one.
- **A dependency managed in more than one BOM must use the *same* version everywhere.** Versions appear in `gradleBomDependencyVersions` (build tooling / `grails-gradle-bom`), `bomDependencyVersions` (`grails-bom`), and per-BOM `customBomVersions` blocks (e.g. `grails-hibernate7-bom`). `grails-bom` re-declares the gradle-BOM constraints, and the Hibernate BOMs are consumed via `enforcedPlatform`. Declaring one coordinate (e.g. `org.ow2.asm:asm`) at two different versions across these ma [...]
- **Only libraries the Grails project also works on may use a snapshot version.** Between releases, `dependencies.gradle` often points at a `-SNAPSHOT` or release-candidate version of one of our own libraries, such as the Asset Pipeline (`cloud.wondrify`), SiteMesh 3 (`org.sitemesh`), or the Grails Publish plugin (`org.apache.grails.gradle:grails-publish`). These are switched to their published version before a Grails release (see `RELEASE.md`). Do not suggest replacing them with a rele [...]
+ - **No dynamic versions in any BOM-bearing configuration.** The same task fails when any dependency of a BOM-bearing configuration is requested with a version range, a `+` prefix, or a `latest.*` selector, even when a BOM constraint overrides it (Gradle's own `failOnDynamicVersions()` misses that case). A dynamic version makes every resolution list the module's versions in the repository once the listing cache expires, which is every CI build, so the build depends on the repository answ [...]
-- **Prefer inheriting from the Spring Boot BOM.** Do not re-pin a coordinate that `spring-boot-dependencies` (4.1.x) already manages unless you are intentionally overriding it to a newer version (e.g. a security fix); note the reason inline.
+- **Prefer inheriting from the Spring Boot BOM.** Do not re-pin a coordinate that `spring-boot-dependencies` already manages unless you are intentionally overriding it to a newer version (e.g. a security fix); note the reason inline.
- **An override of a Spring Boot managed version must use Spring Boot's property name, and must change the version.** `validateBomProperties` (plugin `org.apache.grails.buildsrc.bom-property-validator`, run in its own CI job) checks the POM each Grails BOM publishes against `spring-boot-dependencies` (`parentBoms` in `dependencies.gradle`). It fails when a pin is declared under a different property than the one Boot controls it with - for a module Boot manages through an imported BOM, t [...]
- **Every version key must be used.** The same task (opt out with `-PskipBomPropertyValidation`, not `skipDependencyValidation`) fails when a version property a BOM owns (`bomVersionProperties` in each BOM's build script) is used by no entry of its published POM - a key no dependency references, or one whose dependency keys do not reduce to it. Delete the key or add the dependency that should use it. The few deliberate exceptions to these rules live, each with its reason, in `bomUnusedV [...]
- **No two dependencies may provide the same class.** The `buildHealth` task (the `com.autonomousapps.build-health` settings plugin, configured in `gradle/dependency-analysis.settings.gradle`, which applies it to a build only when one of its tasks is requested by full name, so a plain build never pays for it) fails when two dependencies on a classpath provide the same fully qualified class name that the module's own code references, because compile and runtime behavior then depend on cl [...]
diff --cc dependencies.gradle
index 4e3cf527bc,bedcb00566..2eaccfba3b
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@@ -118,7 -129,19 +118,10 @@@ ext
'rxjava2.version' : '2.2.21',
'sitemesh.version' : '2.6.0',
'scribejava.version' : '8.3.3',
- // Overrides the 4.43.0 Spring Boot 4.1 manages. selenium/standalone-chrome, the image
- // ContainerGebSpec starts, is only published for linux/arm64 from 4.47.0, so the default
- // Geb functional test runs natively on Apple silicon. The image tag must match the
- // Selenium version on the test classpath, so stay on a version with a published image.
- // Boot's selenium-htmlunit.version (htmlunit3-driver) stays at 4.43.0: the newest
- // htmlunit3-driver needs a HtmlUnit newer than Boot manages, and nothing here uses it.
- 'selenium.version' : '4.49.0',
- // Logback 1.6.5 requires 2.0.19; align the SLF4J family above Boot's managed 2.0.18.
- 'slf4j.version' : '2.0.19',
'spock.version' : '2.5-groovy-6.0',
+ // Not managed by spring-boot-dependencies. Spring AI 2.0.x is the Spring Boot 4.0 / 4.1
+ // line; grails-bom imports its BOM so applications and grails-spring-ai share one Spring AI version.
+ 'spring-ai-bom.version' : '2.0.1',
// Not managed by spring-boot-dependencies. springdoc 3.x is the Spring Boot 4 /
// Spring Framework 7 line; the grails-openapi module compiles against its
// OpenApiCustomizer SPI and apps add the webmvc-ui starter for Swagger UI.
@@@ -146,7 -172,11 +149,8 @@@
'asset-pipeline-bom': "cloud.wondrify:asset-pipeline-bom:${bomDependencyVersions['asset-pipeline-bom.version']}",
'groovy-bom' : "org.apache.groovy:groovy-bom:${bomDependencyVersions['groovy.version']}",
'jackson-bom' : "tools.jackson:jackson-bom:${bomDependencyVersions['jackson-bom.version']}",
- 'opentelemetry-bom' : "io.opentelemetry:opentelemetry-bom:${bomDependencyVersions['opentelemetry.version']}",
- 'selenium-bom' : "org.seleniumhq.selenium:selenium-bom:${bomDependencyVersions['selenium.version']}",
- 'slf4j-bom' : "org.slf4j:slf4j-bom:${bomDependencyVersions['slf4j.version']}",
'spock-bom' : "org.spockframework:spock-bom:${bomDependencyVersions['spock.version']}",
+ 'spring-ai-bom' : "org.springframework.ai:spring-ai-bom:${bomDependencyVersions['spring-ai-bom.version']}",
]
// Note: the name of the dependency must be the prefix of the property name so properties in the pom are resolved correctly