refactor: move Grails Micronaut to apache/grails-micronaut - #16320
refactor: move Grails Micronaut to apache/grails-micronaut#16320jamesfredley wants to merge 1 commit into
Conversation
Grails Micronaut now lives in apache/grails-micronaut and consumes published Grails Core artifacts. Remove the in-tree plugin, Micronaut BOMs, island toggle, and related tests/docs from grails-core. Grails Forge is unchanged. Assisted-by: opencode:gpt-5.6-sol
There was a problem hiding this comment.
🟡 Changes recommended
The Grails Gradle plugin still contains explicit logic for Micronaut BOM variants, but this PR removes the functional tests that validated those consumer-facing paths, reducing confidence in the stated “preserved support” guarantee.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR completes the extraction of Grails Micronaut from the grails-core monorepo into the dedicated apache/grails-micronaut repository, removing the in-tree Micronaut projects and the associated build/release/verification wiring while updating documentation and CI to match the new ownership boundary.
Changes:
- Removed the in-repo Grails Micronaut plugin/BOM projects and Micronaut-tied test example applications/plugins.
- Simplified release verification/reproducibility tooling and CI by removing the former “Micronaut island” dual-JDK (JDK 25) path.
- Updated Grails and Hibernate documentation to remove in-tree Micronaut BOM references and point users to the external Grails Micronaut repository.
File summaries
| File | Description |
|---|---|
| RELEASE.md | Removes Micronaut “dual-JDK island” release/repro guidance. |
| grails-test-examples/plugins/micronaut-singleton/src/main/java/com/example/grails/plugins/micronaut/PluginSingletonService.java | Removes Micronaut singleton plugin example code. |
| grails-test-examples/plugins/micronaut-singleton/src/main/java/com/example/grails/plugins/micronaut/PluginMessageProvider.java | Removes Micronaut singleton plugin example API. |
| grails-test-examples/plugins/micronaut-singleton/src/main/groovy/micronaut/singleton/MicronautSingletonGrailsPlugin.groovy | Removes Micronaut singleton plugin descriptor. |
| grails-test-examples/plugins/micronaut-singleton/build.gradle | Removes Micronaut singleton plugin build. |
| grails-test-examples/plugins/issue-11767/src/main/java/issue11767/plugin/PluginJavaMicronautBean.java | Removes issue-11767 Micronaut bean (plugin) example. |
| grails-test-examples/plugins/issue-11767/src/main/groovy/issue11767/plugin/PluginGroovySpringBean.groovy | Removes issue-11767 Spring config bean (plugin) example. |
| grails-test-examples/plugins/issue-11767/src/main/groovy/issue11767/plugin/PluginGroovyMicronautBean.groovy | Removes issue-11767 Micronaut config bean (plugin) example. |
| grails-test-examples/plugins/issue-11767/src/main/groovy/issue11767/plugin/MyPluginGrailsPlugin.groovy | Removes issue-11767 plugin descriptor/example wiring. |
| grails-test-examples/plugins/issue-11767/grails-app/init/issue11767/plugin/Application.groovy | Removes issue-11767 plugin test app bootstrap. |
| grails-test-examples/plugins/issue-11767/grails-app/conf/plugin.yml | Removes issue-11767 plugin config fixture. |
| grails-test-examples/micronaut/src/main/java/micronaut/filter/AuthTokenClientFilter.java | Removes Micronaut test app filter example. |
| grails-test-examples/micronaut/src/main/java/micronaut/client/MicronautRetryableClient.java | Removes Micronaut retryable client example. |
| grails-test-examples/micronaut/src/main/java/bean/injection/JavaSingletonService.java | Removes Micronaut test app Java singleton bean. |
| grails-test-examples/micronaut/src/main/java/bean/injection/JavaMessageProvider.java | Removes Micronaut test app Java provider interface. |
| grails-test-examples/micronaut/src/main/groovy/micronaut/client/MicronautTestClient.groovy | Removes Micronaut declarative client examples. |
| grails-test-examples/micronaut/src/main/groovy/micronaut/client/MicronautReactiveClient.groovy | Removes Micronaut reactive client examples. |
| grails-test-examples/micronaut/src/main/groovy/micronaut/client/MicronautPathClient.groovy | Removes Micronaut client path-base example. |
| grails-test-examples/micronaut/src/main/groovy/micronaut/client/MicronautHeaderClient.groovy | Removes Micronaut client header example. |
| grails-test-examples/micronaut/src/main/groovy/micronaut/client/MicronautFilteredClient.groovy | Removes Micronaut filtered client example. |
| grails-test-examples/micronaut/src/main/groovy/micronaut/client/MicronautAdvancedClient.groovy | Removes Micronaut advanced client example. |
| grails-test-examples/micronaut/src/main/groovy/bean/injection/SpecialNamedService.groovy | Removes Micronaut bean-qualifier fixtures. |
| grails-test-examples/micronaut/src/main/groovy/bean/injection/ServiceFactory.groovy | Removes Micronaut @Factory/@bean fixture. |
| grails-test-examples/micronaut/src/main/groovy/bean/injection/RegularNamedService.groovy | Removes Micronaut bean-qualifier fixtures. |
| grails-test-examples/micronaut/src/main/groovy/bean/injection/QualifiedNamedService.groovy | Removes Micronaut bean-qualifier fixtures. |
| grails-test-examples/micronaut/src/main/groovy/bean/injection/Qualified.groovy | Removes custom qualifier fixture. |
| grails-test-examples/micronaut/src/main/groovy/bean/injection/PrimaryNamedService.groovy | Removes Micronaut @Primary fixture. |
| grails-test-examples/micronaut/src/main/groovy/bean/injection/NamedService.java | Removes Micronaut bean interface fixture. |
| grails-test-examples/micronaut/src/main/groovy/bean/injection/FactoryCreatedService.groovy | Removes factory-created bean fixture. |
| grails-test-examples/micronaut/src/main/groovy/bean/injection/AppConfig.groovy | Removes @ConfigurationProperties fixture. |
| grails-test-examples/micronaut/src/integration-test/groovy/micronaut/MicronautQualifierSpec.groovy | Removes Micronaut qualifier integration tests. |
| grails-test-examples/micronaut/src/integration-test/groovy/micronaut/MicronautPluginBeanSpec.groovy | Removes Micronaut plugin-bean bridge tests. |
| grails-test-examples/micronaut/src/integration-test/groovy/micronaut/MicronautContextSpec.groovy | Removes Micronaut/Spring context coexistence tests. |
| grails-test-examples/micronaut/src/integration-test/groovy/micronaut/MicronautBeanTypesSpec.groovy | Removes Micronaut bean registration mechanism tests. |
| grails-test-examples/micronaut/src/integration-test/groovy/micronaut/MicronautBeanDuplicationSpec.groovy | Removes Micronaut bean duplication checks. |
| grails-test-examples/micronaut/src/integration-test/groovy/micronaut/BeanInjectionServiceSpec.groovy | Removes Micronaut bean injection integration tests. |
| grails-test-examples/micronaut/grails-app/views/notFound.gsp | Removes Micronaut test app GSP view. |
| grails-test-examples/micronaut/grails-app/views/layouts/main.gsp | Removes Micronaut test app GSP layout. |
| grails-test-examples/micronaut/grails-app/views/error.gsp | Removes Micronaut test app error view. |
| grails-test-examples/micronaut/grails-app/services/micronaut/TestService.groovy | Removes Micronaut test app Grails service fixture. |
| grails-test-examples/micronaut/grails-app/services/micronaut/ExternalApiService.groovy | Removes Micronaut client-usage service example. |
| grails-test-examples/micronaut/grails-app/services/micronaut/BeanInjectionService.groovy | Removes Micronaut injection service example. |
| grails-test-examples/micronaut/grails-app/init/micronaut/BootStrap.groovy | Removes Micronaut test app bootstrap. |
| grails-test-examples/micronaut/grails-app/init/micronaut/Application.groovy | Removes Micronaut test app entrypoint. |
| grails-test-examples/micronaut/grails-app/i18n/messages.properties | Removes Micronaut test app i18n bundle. |
| grails-test-examples/micronaut/grails-app/i18n/messages_ru.properties | Removes Micronaut test app i18n bundle. |
| grails-test-examples/micronaut/grails-app/i18n/messages_pt_PT.properties | Removes Micronaut test app i18n bundle. |
| grails-test-examples/micronaut/grails-app/i18n/messages_fr.properties | Removes Micronaut test app i18n bundle. |
| grails-test-examples/micronaut/grails-app/i18n/messages_es.properties | Removes Micronaut test app i18n bundle. |
| grails-test-examples/micronaut/grails-app/controllers/micronaut/UrlMappings.groovy | Removes Micronaut test app URL mappings. |
| grails-test-examples/micronaut/grails-app/controllers/micronaut/MicronautTestController.groovy | Removes Micronaut test controller. |
| grails-test-examples/micronaut/grails-app/controllers/micronaut/ExternalApiController.groovy | Removes Micronaut external API controller example. |
| grails-test-examples/micronaut/grails-app/conf/spring/resources.groovy | Removes Micronaut test app Spring resources DSL. |
| grails-test-examples/micronaut/grails-app/conf/logback.xml | Removes Micronaut test app logging config. |
| grails-test-examples/micronaut/grails-app/conf/application.yml | Removes Micronaut test app configuration. |
| grails-test-examples/micronaut/grails-app/assets/stylesheets/mobile.css | Removes Micronaut test app CSS assets. |
| grails-test-examples/micronaut/grails-app/assets/stylesheets/errors.css | Removes Micronaut test app CSS assets. |
| grails-test-examples/micronaut/grails-app/assets/stylesheets/application.css | Removes Micronaut test app asset manifest. |
| grails-test-examples/micronaut/grails-app/assets/javascripts/application.js | Removes Micronaut test app JS manifest. |
| grails-test-examples/micronaut/grails-app/assets/images/documentation.svg | Removes Micronaut test app image asset. |
| grails-test-examples/micronaut/build.gradle | Removes Micronaut test app Gradle build. |
| grails-test-examples/micronaut/.gitignore | Removes Micronaut test app gitignore. |
| grails-test-examples/micronaut-hibernate7/src/integration-test/groovy/micronaut/hibernate7/ApplicationStartupSpec.groovy | Removes Micronaut+Hibernate7 test app smoke test. |
| grails-test-examples/micronaut-hibernate7/grails-app/views/index.gsp | Removes Micronaut+Hibernate7 test app view. |
| grails-test-examples/micronaut-hibernate7/grails-app/init/micronaut/hibernate7/Application.groovy | Removes Micronaut+Hibernate7 test app entrypoint. |
| grails-test-examples/micronaut-hibernate7/grails-app/controllers/micronaut/hibernate7/UrlMappings.groovy | Removes Micronaut+Hibernate7 test app URL mappings. |
| grails-test-examples/micronaut-hibernate7/grails-app/conf/logback.xml | Removes Micronaut+Hibernate7 logging config. |
| grails-test-examples/micronaut-hibernate7/grails-app/conf/application.yml | Removes Micronaut+Hibernate7 app config. |
| grails-test-examples/micronaut-hibernate7/build.gradle | Removes Micronaut+Hibernate7 test app build. |
| grails-test-examples/micronaut-hibernate5/src/integration-test/groovy/micronaut/hibernate5/ApplicationStartupSpec.groovy | Removes Micronaut+Hibernate5 test app smoke test. |
| grails-test-examples/micronaut-hibernate5/grails-app/views/index.gsp | Removes Micronaut+Hibernate5 test app view. |
| grails-test-examples/micronaut-hibernate5/grails-app/init/micronaut/hibernate5/Application.groovy | Removes Micronaut+Hibernate5 test app entrypoint. |
| grails-test-examples/micronaut-hibernate5/grails-app/controllers/micronaut/hibernate5/UrlMappings.groovy | Removes Micronaut+Hibernate5 test app URL mappings. |
| grails-test-examples/micronaut-hibernate5/grails-app/conf/logback.xml | Removes Micronaut+Hibernate5 logging config. |
| grails-test-examples/micronaut-hibernate5/grails-app/conf/application.yml | Removes Micronaut+Hibernate5 app config. |
| grails-test-examples/micronaut-hibernate5/build.gradle | Removes Micronaut+Hibernate5 test app build. |
| grails-test-examples/micronaut-groovy-only/src/main/groovy/bean/injection/SpecialNamedService.groovy | Removes Groovy-only Micronaut fixture classes. |
| grails-test-examples/micronaut-groovy-only/src/main/groovy/bean/injection/ServiceFactory.groovy | Removes Groovy-only Micronaut fixture classes. |
| grails-test-examples/micronaut-groovy-only/src/main/groovy/bean/injection/RegularNamedService.groovy | Removes Groovy-only Micronaut fixture classes. |
| grails-test-examples/micronaut-groovy-only/src/main/groovy/bean/injection/QualifiedNamedService.groovy | Removes Groovy-only Micronaut fixture classes. |
| grails-test-examples/micronaut-groovy-only/src/main/groovy/bean/injection/Qualified.groovy | Removes Groovy-only custom qualifier fixture. |
| grails-test-examples/micronaut-groovy-only/src/main/groovy/bean/injection/PrimaryNamedService.groovy | Removes Groovy-only Micronaut fixture classes. |
| grails-test-examples/micronaut-groovy-only/src/main/groovy/bean/injection/NamedService.groovy | Removes Groovy-only bean interface fixture. |
| grails-test-examples/micronaut-groovy-only/src/main/groovy/bean/injection/FactoryCreatedService.groovy | Removes Groovy-only factory-created bean fixture. |
| grails-test-examples/micronaut-groovy-only/src/main/groovy/bean/injection/AppConfig.groovy | Removes Groovy-only @ConfigurationProperties fixture. |
| grails-test-examples/micronaut-groovy-only/src/integration-test/groovy/micronautgroovyonly/MicronautQualifierSpec.groovy | Removes Groovy-only Micronaut integration tests. |
| grails-test-examples/micronaut-groovy-only/src/integration-test/groovy/micronautgroovyonly/MicronautContextSpec.groovy | Removes Groovy-only Micronaut context tests. |
| grails-test-examples/micronaut-groovy-only/src/integration-test/groovy/micronautgroovyonly/BeanInjectionServiceSpec.groovy | Removes Groovy-only Micronaut injection tests. |
| grails-test-examples/micronaut-groovy-only/grails-app/services/micronautgroovyonly/TestService.groovy | Removes Groovy-only test app service. |
| grails-test-examples/micronaut-groovy-only/grails-app/services/micronautgroovyonly/BeanInjectionService.groovy | Removes Groovy-only test app injection service. |
| grails-test-examples/micronaut-groovy-only/grails-app/init/micronautgroovyonly/Application.groovy | Removes Groovy-only test app entrypoint. |
| grails-test-examples/micronaut-groovy-only/grails-app/controllers/micronautgroovyonly/UrlMappings.groovy | Removes Groovy-only test app URL mappings. |
| grails-test-examples/micronaut-groovy-only/grails-app/conf/application.yml | Removes Groovy-only test app config. |
| grails-test-examples/micronaut-groovy-only/build.gradle | Removes Groovy-only Micronaut test app build. |
| grails-test-examples/issue-11767/src/main/groovy/issue11767/app/AppGroovyMicronautBean.groovy | Removes issue-11767 app Micronaut bean fixture. |
| grails-test-examples/issue-11767/src/integration-test/groovy/issue11767/app/ConfigLoadingSpec.groovy | Removes issue-11767 integration test. |
| grails-test-examples/issue-11767/grails-app/init/issue11767/app/Application.groovy | Removes issue-11767 test app entrypoint. |
| grails-test-examples/issue-11767/grails-app/controllers/issue11767/app/UrlMappings.groovy | Removes issue-11767 URL mappings. |
| grails-test-examples/issue-11767/grails-app/controllers/issue11767/app/AppController.groovy | Removes issue-11767 controller example. |
| grails-test-examples/issue-11767/grails-app/conf/logback.xml | Removes issue-11767 logging config. |
| grails-test-examples/issue-11767/grails-app/conf/application.yml | Removes issue-11767 app config. |
| grails-test-examples/issue-11767/build.gradle | Removes issue-11767 test app build. |
| grails-micronaut/src/main/groovy/org/apache/grails/micronaut/GrailsMicronautGrailsPlugin.groovy | Removes in-tree Grails Micronaut plugin implementation. |
| grails-micronaut/build.gradle | Removes in-tree Grails Micronaut project build. |
| grails-gradle/plugins/src/test/resources/test-projects/bom-platform-hibernate7-micronaut-manual/settings.gradle | Removes functional test fixture project (Hibernate7 Micronaut BOM). |
| grails-gradle/plugins/src/test/resources/test-projects/bom-platform-hibernate7-micronaut-manual/gradle.properties | Removes functional test fixture project properties. |
| grails-gradle/plugins/src/test/resources/test-projects/bom-platform-hibernate7-micronaut-manual/build.gradle | Removes functional test fixture project build. |
| grails-gradle/plugins/src/test/resources/test-projects/bom-platform-hibernate7-micronaut-auto/settings.gradle | Removes functional test fixture project (auto BOM selection). |
| grails-gradle/plugins/src/test/resources/test-projects/bom-platform-hibernate7-micronaut-auto/gradle.properties | Removes functional test fixture project properties. |
| grails-gradle/plugins/src/test/resources/test-projects/bom-platform-hibernate7-micronaut-auto/build.gradle | Removes functional test fixture project build. |
| grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/core/BomPlatformFunctionalSpec.groovy | Updates functional tests to drop removed Micronaut BOM variant fixtures. |
| grails-doc/src/en/guide/introduction/whatsNew/dependencyUpgrades.adoc | Updates wording to remove Micronaut BOM table reference. |
| grails-doc/src/en/guide/introduction/whatsNew.adoc | Adds pointer to external Grails Micronaut repo; removes JDK25/Micronaut BOM notes. |
| grails-data-hibernate7/docs/src/docs/asciidoc/gettingStarted/hibernateVersions.adoc | Removes Micronaut integration example for Hibernate7 docs. |
| gradle/rat-root-config.gradle | Removes RAT exclusions for deleted Micronaut-generated docs. |
| gradle/publish-root-config.gradle | Removes publication list wiring for Micronaut projects. |
| gradle.properties | Removes Micronaut platform version and “Micronaut island” build gating notes. |
| etc/bin/verify.sh | Removes JDK 25 preflight checks for reproducibility verification. |
| etc/bin/test-reproducible-builds.sh | Removes dual-JDK build path and Micronaut-island build steps. |
| etc/bin/Dockerfile | Removes secondary JDK 25 installation from verification container. |
| build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/GrailsDependencyValidatorPluginSpec.groovy | Adjusts BOM detection tests to remove Micronaut BOM variant dependency. |
| build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/GrailsDependencyValidatorPlugin.groovy | Removes Micronaut BOM project names from BOM detection allowlist. |
| AGENTS.md | Updates dependency-management guidance examples away from Micronaut BOMs. |
| .github/workflows/release-verify.yml | Removes Micronaut-island JDK 25 setup from release verification workflow. |
| .github/workflows/release-publish-docs.yml | Cleans up docs workflow commentary after Micronaut island removal. |
| .github/workflows/groovy-snapshot-canary.yml | Drops -PskipMicronautProjects since Micronaut island is removed. |
| .github/dependency-graph/external-references.yml | Removes external reference for the extracted grails-micronaut artifact. |
Review details
- Files reviewed: 154/178 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
|
||
| and: 'a sibling configuration that did not declare a BOM still receives the Micronaut BOM (and not grails-bom)' | ||
| result.output.contains('SIBLING_HAS_MICRONAUT_BOM=true') | ||
| result.output.contains('SIBLING_HAS_GRAILS_BOM=false') | ||
|
|
||
| and: 'property-based version overrides are still enabled for the declared BOM' | ||
| result.output.contains('HAS_BOM_PROPERTY_OVERRIDES=true') | ||
| } |
|
The request to reintroduce functional coverage for Micronaut Hibernate BOM variants is noted. As the current PR changes primarily involve cleanup of CI/CD configuration and dependency graph metadata, I will prepare a plan to add a test scenario in |
✅ All tests passed ✅Test SummaryGroovy Snapshot Canary Build / Build Grails (shard 2) > :grails-test-examples-scaffolding:integrationTest
🏷️ Commit: 86600e6 Test FailuresUserControllerSpec > User list (:grails-test-examples-scaffolding:integrationTest in Groovy Snapshot Canary Build / Build Grails (shard 2) | Attempt 1/2)Learn more about TestLens at testlens.app/docs. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## 8.0.x #16320 +/- ##
==================================================
+ Coverage 54.7094% 54.7242% +0.0148%
- Complexity 20528 20532 +4
==================================================
Files 2104 2104
Lines 101149 101149
Branches 17966 17966
==================================================
+ Hits 55338 55353 +15
+ Misses 37792 37775 -17
- Partials 8019 8021 +2 🚀 New features to boost your workflow:
|
|
Infrastructure has reached out on the associated ticket for the secrets, and it seems the split repository doesn't have release documentation. Separately, I've also sent https://lists.apache.org/thread/6g7zq9sfsoskfbv1qmv6soxx3vbh6n8z to the mailing list because Gradle 9.7.1 isn't resolving correctly with sdkman / the original issue I raised on the Gradle 9.7 PR has not been addressed. I do not think we can merge this until we have the grails-micronaut repository correctly building. |
|
@jdaugherty Gradle 9.7.1 seems to resolve now: mattias@mr-p920:~/Projects/tmp/grails-core$ sdk install gradle 9.7.1
Downloading: gradle 9.7.1
In progress...
######################################################################################################################################################################################################################################################### 100.0%-#O=- # # ######################################################################################################################################################################################################################################################### 100.0%
Installing: gradle 9.7.1
Done installing!
Do you want gradle 9.7.1 to be set as default? (Y/n): Y
Setting gradle 9.7.1 as default. |
|
@matrei Thank you. Yes it appears fixed now. This still doesn't address the RELEASE.md missing nor the fix of the introduced gradle version though. Also, it appears this is against 8.0.x and not 7.x. I'm guessing that's ok but it does mean we'll have to do releases in both repos. We should have the micronaut repo publishing before we merge this. |
@jdaugherty I added #16325 to try to verify if there is still an issue with #16114 |
Summary
apache/grails-micronautwhile preserving Grails Gradle plugin support for consumers of the separately published Micronaut BOMs.This PR implements the PMC-approved move of Grails Micronaut to its own repository. Grails Micronaut now lives in
apache/grails-micronautand consumes published Grails Core artifacts.PMC vote: https://lists.apache.org/thread/p5bgy38cl3glpvs51ddmh3njtchbc2dc
Verification
./gradlew projects --offline --max-workers=13cd grails-gradle && ./gradlew :grails-gradle-plugins:test --tests org.grails.gradle.plugin.core.BomPlatformFunctionalSpec --offline --max-workers=7./gradlew :build-logic-root:build-logic:test --tests org.apache.grails.buildsrc.GrailsDependencyValidatorPluginSpec --offline --max-workers=7git diff origin/8.0.x...HEAD -- grails-forgeis empty.