jdaugherty opened a new pull request, #16552:
URL: https://github.com/apache/grails-core/pull/16552

   ## Description
   
   Fixes #16550.
   
   Expose non-empty scalar configuration lists through indexed properties so 
Spring Boot resolves each element's placeholders when binding 
`@ConfigurationProperties`. Previously the binder received the whole list and 
copied string elements without resolving their placeholders.
   
   - Extend the existing indexed object-list handling to scalar and nested 
scalar lists, while preserving empty-list binding and whole-list access through 
Grails `Config`.
   - Use Spring Boot's binder for external configuration locations, banner 
version options, and bridged Spring Security user roles so these consumers 
continue to work with indexed lists.
   - Cover YAML and Groovy configuration, placeholder defaults and environment 
overrides, typed and nested lists, empty values, list precedence, banner 
output, external configuration loading, and user-role binding.
   - Document the behavior and the migration from whole-list 
`Environment.getProperty` lookups in the configuration guide and Grails 8 
upgrade notes.
   
   ### Validation
   
   - Full affected-module tests passed for `grails-core`, 
`grails-spring-security`, and the external-configuration example, including its 
integration tests.
   - Repository-wide pre-commit validation passed: `./gradlew clean 
aggregateViolations :grails-test-report:check --continue --max-workers=4 
-PmaxTestParallel=2 --console=plain`.
     - 23,468 tests reported: zero failures or errors, 420 skipped.
     - Checkstyle, CodeNarc, repository conventions, and enabled PMD checks are 
clean. SpotBugs is disabled.
   - `git diff --check`.
   - Additional non-test validation is still running locally: `buildHealth`, 
followed by `:grails-doc:publishGuide -x aggregateGroovydoc` and 
`validateRepositoryConventions`. These results are pending; they are not 
included in the passed checks above.
   
   ## Contributor Checklist
   
   ### Issue and Scope
   
   - [x] This PR is linked to an existing issue that has been **acknowledged or 
approved** by the project team. If no approved issue exists, please give 
background on why this change is necessary. Tickets are preferred for release 
change log history.
   - [x] This PR addresses the **complete scope** of the linked issue. Partial 
implementations or unfinished work should not be submitted for review.
   - [x] This PR contains a **single, focused change**. Unrelated changes 
should be submitted as separate pull requests.
   - [x] This PR targets the **correct branch** for the type of change:
       - **Patch release branches** (e.g., `7.0.x`): Bug fixes only. No new 
features or API changes.
       - **Minor release branches** (e.g., `7.1.x`): New features are welcome, 
but breaking existing APIs must be avoided.
       - **Major release branches** (e.g., `8.0.x`): Reserved for major 
changes. Breaking API changes are permitted.
   
   ### Code Quality
   
   - [x] I have **added or updated tests** that cover the changes introduced in 
this PR. All code contributions are expected to include appropriate test 
coverage.
   - [ ] I have verified that all existing tests pass by running `./gradlew 
build --rerun-tasks`.
     - The full test suite passed via `./gradlew clean aggregateViolations 
:grails-test-report:check --continue` with the worker limits shown above. CI 
will perform the build checks.
   - [x] My code follows the project's **code style** guidelines. The affected 
modules' `codeStyle` tasks and repository-wide `aggregateViolations` checks 
passed.
   - [x] This PR does **not** include mass reformatting, style-only changes, or 
large-scale refactoring unless it was **explicitly approved** in the linked 
issue. Unsolicited reformatting will not be accepted.
   
   ### Licensing and Attribution
   
   - [x] All contributed code is provided under the [Apache License 
2.0](https://www.apache.org/licenses/LICENSE-2.0), and new source files include 
the appropriate **Apache license header**.
   - [x] I have the necessary rights to submit this contribution and confirm it 
is my own original work (see [Legal 
Notice](https://github.com/apache/grails-core/blob/8.0.x/CONTRIBUTING.md#i-want-to-contribute)).
   
   ### Documentation
   
   - [x] If this PR introduces user-facing changes, I have included or updated 
the relevant documentation.
   - [x] If this PR adds a new feature, I have updated the **What's New** 
section of the Grails Guide. — Not applicable: bug fix.
   - [x] If this PR introduces breaking changes or changes that require user 
action during an upgrade, I have updated the **Upgrade Notes** for the 
corresponding version in the Grails Guide.
   - [x] The PR description clearly explains **what** was changed and **why**.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to