Extract shared BOM build conventions#15827
Conversation
Centralize duplicated BOM publication, constraint extraction, and POM customization logic in a build-logic convention plugin. Apply it across the BOM modules while keeping generated POM and constraints output byte-identical to the current 8.0.x baseline. Assisted-by: Hephaestus:openai/gpt-5.5 codex-review
There was a problem hiding this comment.
Pull request overview
This pull request extracts repeated Grails BOM build logic into a shared build-logic Gradle plugin, then applies it across the various BOM subprojects to reduce duplication and centralize publication / POM / constraints behavior.
Changes:
- Add
org.apache.grails.buildsrc.bom-conventionsplugin to encapsulate common BOM conventions (publication hooks, constraints extraction wiring, snapshot validation, POM customization). - Update Grails BOM subprojects (default/base/hibernate*/micronaut*) to use the shared plugin and remove duplicated build script logic.
- Refactor
dependencies.gradleto generate Groovy module dependency maps via a shared helper and remove now-unreachable override branches.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| grails-bom/micronaut/build.gradle | Switch Micronaut BOM to shared bom-conventions plugin; remove duplicated publication/constraints logic. |
| grails-bom/hibernate7/build.gradle | Switch Hibernate 7 BOM to shared bom-conventions plugin; remove duplicated publication/constraints logic. |
| grails-bom/hibernate7-micronaut/build.gradle | Switch Hibernate 7 + Micronaut BOM to shared bom-conventions plugin; remove duplicated publication/constraints logic. |
| grails-bom/hibernate5/build.gradle | Switch Hibernate 5 BOM to shared bom-conventions plugin; remove duplicated publication/constraints logic. |
| grails-bom/hibernate5-micronaut/build.gradle | Switch Hibernate 5 + Micronaut BOM to shared bom-conventions plugin; remove duplicated publication/constraints logic. |
| grails-bom/default/build.gradle | Switch default BOM to shared bom-conventions plugin; remove duplicated publication/constraints logic. |
| grails-bom/base/build.gradle | Switch base BOM to shared bom-conventions plugin; remove duplicated publication/constraints logic. |
| dependencies.gradle | Extract Groovy module dependency map generation into a helper and simplify override branching. |
| build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/BomConventionsPlugin.groovy | New shared BOM conventions plugin implementing extracted common logic. |
| build-logic/plugins/build.gradle | Register the new plugin and add required module dependency for BOM task classes. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## 8.0.x #15827 +/- ##
==================================================
- Coverage 49.5680% 49.5622% -0.0059%
+ Complexity 16689 16688 -1
==================================================
Files 1947 1947
Lines 92598 92611 +13
Branches 16179 16182 +3
==================================================
+ Hits 45899 45900 +1
- Misses 39598 39610 +12
Partials 7101 7101 🚀 New features to boost your workflow:
|
Use the configured Gradle-build project group mappings when registering POM property replacements, and add focused TestKit coverage for the shared BOM conventions plugin. Assisted-by: Hephaestus:openai/gpt-5.5 codex-review
🚨 TestLens detected 5 failed tests 🚨Here is what you can do:
Test SummaryCI - Groovy Joint Validation Build / build_grails > :grails-test-examples-gorm:integrationTest
CI / Build Grails-Core (windows-latest, 25) > :grails-shell-cli:test
CI / Functional Tests (Java 21, indy=false) > :grails-test-examples-gorm:integrationTest
CI / Functional Tests (Java 21, indy=true) > :grails-test-examples-gorm:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-gorm:integrationTest
🏷️ Commit: 206a4b6 Test FailuresRunningApplicationProcessSpec > stop terminates a running process and removes the PID file (:grails-shell-cli:test in CI / Build Grails-Core (windows-latest, 25))DirtyCheckBindingSpec > an explicit bindable:true id constraint declared on a @DirtyCheck base is inherited and binds over HTTP (:grails-test-examples-gorm:integrationTest in CI / Functional Tests (Java 21, indy=false))DirtyCheckBindingSpec > an explicit bindable:true id constraint declared on a @DirtyCheck base is inherited and binds over HTTP (:grails-test-examples-gorm:integrationTest in CI / Functional Tests (Java 21, indy=true))DirtyCheckBindingSpec > an explicit bindable:true id constraint declared on a @DirtyCheck base is inherited and binds over HTTP (:grails-test-examples-gorm:integrationTest in CI / Functional Tests (Java 25, indy=false))DirtyCheckBindingSpec > an explicit bindable:true id constraint declared on a @DirtyCheck base is inherited and binds over HTTP (:grails-test-examples-gorm:integrationTest in CI - Groovy Joint Validation Build / build_grails)Muted TestsSelect tests to mute in this pull request:
Reuse successful test results:
Click the checkbox to trigger a rerun:
Learn more about TestLens at testlens.app. |
Summary
This PR reduces duplicated Gradle BOM build logic by moving the shared publication, POM customization, constraint extraction, and release snapshot validation conventions into
org.apache.grails.buildsrc.bom-conventions.The BOM build scripts now keep only BOM-specific inputs such as descriptions, dependency declarations, and variant-specific dependency sets. The shared plugin owns the common task wiring and POM mutation behavior used by the seven Grails BOM projects.
Changes
BomConventionsPlugininbuild-logic/pluginsand register it asorg.apache.grails.buildsrc.bom-conventions.dependencies.gradlewhile leaving one literal coordinate list for Dependabot visibility.gradleBuildProjectsgroup mapping when registering Gradle-build artifacts for POM property replacement.Verification
JAVA_HOME=/tmp/opencode/jdk21 ./gradlew :build-logic-root:build-logic:compileGroovy :build-logic-root:build-logic:testJAVA_HOME=/tmp/opencode/jdk21 ./gradlew :build-logic-root:build-logic:test --tests org.apache.grails.buildsrc.BomConventionsPluginSpec-PincludeMicronautProjects.extractConstraintsfor all seven BOMs with-PincludeMicronautProjects.origin/8.0.xbaseline: no differences.8.0.0-SNAPSHOTversions.Notes
.groovy/.gradlebecause no Groovy/Gradle LSP is configured.origin/8.0.x(GraphQL static compile errors and MongoDB timeout flakes), reproduced in a clean baseline worktree.