From 30a679872c9eee3ad2072b8db3fcf4f5fdbcc069 Mon Sep 17 00:00:00 2001 From: yybmion Date: Wed, 23 Apr 2025 21:31:41 +0900 Subject: [PATCH] Fix changelog generator missing directly removed properties The changelog generator did not detect properties that were added to a new version with error-level deprecation (indicating immediate removal). This commonly occurs when upgrading dependencies like Flyway 10, where properties are removed without prior deprecation. Modified the computeDifferences method to detect properties that only exist in the new metadata with error-level deprecation and properly mark them as DELETED in the changelog. See gh-45267 Signed-off-by: yybmion --- .../changelog/Changelog.java | 24 ++++++++++++++----- .../changelog/ChangelogTests.java | 11 +++++---- .../src/test/resources/sample-2.0.json | 13 +++++++++- .../src/test/resources/sample.adoc | 4 ++++ 4 files changed, 41 insertions(+), 11 deletions(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata-changelog-generator/src/main/java/org/springframework/boot/configurationmetadata/changelog/Changelog.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata-changelog-generator/src/main/java/org/springframework/boot/configurationmetadata/changelog/Changelog.java index 964298fe567..61217687e4e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata-changelog-generator/src/main/java/org/springframework/boot/configurationmetadata/changelog/Changelog.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata-changelog-generator/src/main/java/org/springframework/boot/configurationmetadata/changelog/Changelog.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import java.util.List; import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty; import org.springframework.boot.configurationmetadata.ConfigurationMetadataRepository; +import org.springframework.boot.configurationmetadata.Deprecation; /** * A changelog containing differences computed from two repositories of configuration @@ -32,6 +33,7 @@ import org.springframework.boot.configurationmetadata.ConfigurationMetadataRepos * @author Stephane Nicoll * @author Andy Wilkinson * @author Phillip Webb + * @author Yoobin Yoon */ record Changelog(String oldVersionNumber, String newVersionNumber, List differences) { @@ -48,14 +50,24 @@ record Changelog(String oldVersionNumber, String newVersionNumber, List added = differences.differences() .stream() .filter((difference) -> difference.type() == DifferenceType.ADDED) @@ -49,10 +50,12 @@ class ChangelogTests { .stream() .filter((difference) -> difference.type() == DifferenceType.DELETED) .toList(); - assertThat(deleted).hasSize(2) + assertThat(deleted).hasSize(3) .anySatisfy((entry) -> assertProperty(entry.oldProperty(), "test.delete", String.class, "delete")) .anySatisfy( - (entry) -> assertProperty(entry.newProperty(), "test.delete.deprecated", String.class, "delete")); + (entry) -> assertProperty(entry.newProperty(), "test.delete.deprecated", String.class, "delete")) + .anySatisfy((entry) -> assertProperty(entry.newProperty(), "test.removed.directly", String.class, + "directlyRemoved")); List deprecated = differences.differences() .stream() .filter((difference) -> difference.type() == DifferenceType.DEPRECATED) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample-2.0.json b/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample-2.0.json index ef959d39c9e..897c7b6dbc3 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample-2.0.json +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample-2.0.json @@ -31,6 +31,17 @@ "replacement": "test.add", "reason": "it was just bad" } + }, + { + "name": "test.removed.directly", + "type": "java.lang.String", + "description": "Test property removed without prior deprecation.", + "defaultValue": "directlyRemoved", + "deprecation": { + "level": "error", + "replacement": "test.new.property", + "reason": "Removed in Upgrade 10" + } } ] -} \ No newline at end of file +} diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample.adoc b/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample.adoc index 26876aa8542..21963bffaa0 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample.adoc +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-metadata-changelog-generator/src/test/resources/sample.adoc @@ -32,4 +32,8 @@ _None_. | `test.delete.deprecated` | `test.add` | it was just bad + +| `test.removed.directly` +| `test.new.property` +| Removed in Upgrade 10 |======================