Skip to content

Commit 03417b1

Browse files
authored
Merge branch 'spring-projects:main' into fix_alias_x509_extended_key_manager
2 parents c9710e4 + 8f8a052 commit 03417b1

File tree

611 files changed

+11973
-4448
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

611 files changed

+11973
-4448
lines changed

Diff for: .github/actions/create-github-release/action.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ runs:
1818
using: composite
1919
steps:
2020
- name: Generate Changelog
21-
uses: spring-io/github-changelog-generator@185319ad7eaa75b0e8e72e4b6db19c8b2cb8c4c1 #v0.0.11
21+
uses: spring-io/github-changelog-generator@86958813a62af8fb223b3fd3b5152035504bcb83 #v0.0.12
2222
with:
2323
config-file: ${{ inputs.commercial && '.github/actions/create-github-release/changelog-generator-commercial.yml' || '.github/actions/create-github-release/changelog-generator-oss.yml' }}
2424
milestone: ${{ inputs.milestone }}

Diff for: .github/actions/prepare-gradle-build/action.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ runs:
4242
${{ inputs.java-toolchain == 'true' && '17' || '' }}
4343
- name: Set Up Gradle With Read/Write Cache
4444
if: ${{ inputs.cache-read-only == 'false' }}
45-
uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0
45+
uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
4646
with:
4747
cache-read-only: false
4848
develocity-access-key: ${{ inputs.develocity-access-key }}
4949
- name: Set Up Gradle
50-
uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0
50+
uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
5151
with:
5252
develocity-access-key: ${{ inputs.develocity-access-key }}
5353
develocity-token-expiry: 4

Diff for: .github/workflows/verify.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ jobs:
5555
if: ${{ !vars.COMMERCIAL }}
5656
uses: Homebrew/actions/setup-homebrew@7657c9512f50e1c35b640971116425935bab3eea
5757
- name: Set Up Gradle
58-
uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0
58+
uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244 # v4.3.1
5959
with:
6060
cache-read-only: false
6161
- name: Configure Gradle Properties

Diff for: .idea/scopes/java.xml

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: antora/package-lock.json

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: antora/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"@springio/antora-xref-extension": "1.0.0-alpha.4",
1212
"@springio/antora-zip-contents-collector-extension": "1.0.0-alpha.8",
1313
"@asciidoctor/tabs": "1.0.0-beta.6",
14-
"@springio/asciidoctor-extensions": "1.0.0-alpha.16",
14+
"@springio/asciidoctor-extensions": "1.0.0-alpha.17",
1515
"patch-package": "^8.0.0"
1616
},
1717
"config": {

Diff for: buildSrc/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ dependencies {
3939
implementation("io.spring.javaformat:spring-javaformat-gradle-plugin:${javaFormatVersion}")
4040
implementation("io.spring.nohttp:nohttp-gradle:0.0.11")
4141
implementation("org.apache.httpcomponents.client5:httpclient5:5.3.1")
42-
implementation("org.apache.maven:maven-embedder:${mavenVersion}")
42+
implementation("org.apache.maven:maven-artifact:${mavenVersion}")
4343
implementation("org.antora:gradle-antora-plugin:1.0.0")
4444
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}")
4545
implementation("org.jetbrains.kotlin:kotlin-compiler-embeddable:${kotlinVersion}")

Diff for: buildSrc/src/main/java/org/springframework/boot/build/AntoraConventions.java

+16-17
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@
3535
import org.antora.gradle.AntoraTask;
3636
import org.gradle.StartParameter;
3737
import org.gradle.api.Project;
38+
import org.gradle.api.artifacts.Configuration;
3839
import org.gradle.api.file.Directory;
40+
import org.gradle.api.file.FileCollection;
3941
import org.gradle.api.logging.LogLevel;
4042
import org.gradle.api.plugins.JavaBasePlugin;
4143
import org.gradle.api.provider.Provider;
@@ -46,7 +48,7 @@
4648
import org.springframework.boot.build.antora.AntoraAsciidocAttributes;
4749
import org.springframework.boot.build.antora.GenerateAntoraPlaybook;
4850
import org.springframework.boot.build.bom.BomExtension;
49-
import org.springframework.boot.build.constraints.ExtractVersionConstraints;
51+
import org.springframework.boot.build.bom.ResolvedBom;
5052
import org.springframework.util.Assert;
5153
import org.springframework.util.StringUtils;
5254

@@ -76,7 +78,10 @@ void apply(Project project) {
7678
}
7779

7880
private void apply(Project project, AntoraPlugin antoraPlugin) {
79-
TaskProvider<ExtractVersionConstraints> dependencyVersionsTask = addDependencyVersionsTask(project);
81+
Configuration resolvedBom = project.getConfigurations().create("resolveBom");
82+
project.getDependencies()
83+
.add(resolvedBom.getName(), project.getDependencies()
84+
.project(Map.of("path", DEPENDENCIES_PATH, "configuration", "resolvedBom")));
8085
project.getPlugins().apply(GenerateAntoraYmlPlugin.class);
8186
TaskContainer tasks = project.getTasks();
8287
TaskProvider<GenerateAntoraPlaybook> generateAntoraPlaybookTask = tasks.register(
@@ -86,8 +91,8 @@ private void apply(Project project, AntoraPlugin antoraPlugin) {
8691
(task) -> configureCopyAntoraPackageJsonTask(project, task));
8792
TaskProvider<NpmInstallTask> npmInstallTask = tasks.register("antoraNpmInstall", NpmInstallTask.class,
8893
(task) -> configureNpmInstallTask(project, task, copyAntoraPackageJsonTask));
89-
tasks.withType(GenerateAntoraYmlTask.class, (generateAntoraYmlTask) -> configureGenerateAntoraYmlTask(project,
90-
generateAntoraYmlTask, dependencyVersionsTask));
94+
tasks.withType(GenerateAntoraYmlTask.class,
95+
(generateAntoraYmlTask) -> configureGenerateAntoraYmlTask(project, generateAntoraYmlTask, resolvedBom));
9196
tasks.withType(AntoraTask.class,
9297
(antoraTask) -> configureAntoraTask(project, antoraTask, npmInstallTask, generateAntoraPlaybookTask));
9398
project.getExtensions()
@@ -118,21 +123,15 @@ private void configureNpmInstallTask(Project project, NpmInstallTask npmInstallT
118123
npmInstallTask.getNpmCommand().set(List.of("ci", "--silent", "--no-progress"));
119124
}
120125

121-
private TaskProvider<ExtractVersionConstraints> addDependencyVersionsTask(Project project) {
122-
return project.getTasks()
123-
.register("dependencyVersions", ExtractVersionConstraints.class,
124-
(task) -> task.enforcedPlatform(DEPENDENCIES_PATH));
125-
}
126-
127126
private void configureGenerateAntoraYmlTask(Project project, GenerateAntoraYmlTask generateAntoraYmlTask,
128-
TaskProvider<ExtractVersionConstraints> dependencyVersionsTask) {
127+
Configuration resolvedBom) {
129128
generateAntoraYmlTask.getOutputs().doNotCacheIf("getAsciidocAttributes() changes output", (task) -> true);
130-
generateAntoraYmlTask.dependsOn(dependencyVersionsTask);
129+
generateAntoraYmlTask.dependsOn(resolvedBom);
131130
generateAntoraYmlTask.setProperty("componentName", "boot");
132131
generateAntoraYmlTask.setProperty("outputFile",
133132
project.getLayout().getBuildDirectory().file("generated/docs/antora-yml/antora.yml"));
134133
generateAntoraYmlTask.setProperty("yml", getDefaultYml(project));
135-
generateAntoraYmlTask.getAsciidocAttributes().putAll(getAsciidocAttributes(project, dependencyVersionsTask));
134+
generateAntoraYmlTask.getAsciidocAttributes().putAll(getAsciidocAttributes(project, resolvedBom));
136135
}
137136

138137
private Map<String, ?> getDefaultYml(Project project) {
@@ -151,11 +150,11 @@ private void configureGenerateAntoraYmlTask(Project project, GenerateAntoraYmlTa
151150
return defaultYml;
152151
}
153152

154-
private Provider<Map<String, String>> getAsciidocAttributes(Project project,
155-
TaskProvider<ExtractVersionConstraints> dependencyVersionsTask) {
156-
return dependencyVersionsTask.map((task) -> task.getVersionConstraints()).map((constraints) -> {
153+
private Provider<Map<String, String>> getAsciidocAttributes(Project project, FileCollection resolvedBoms) {
154+
return project.provider(() -> {
157155
BomExtension bom = (BomExtension) project.project(DEPENDENCIES_PATH).getExtensions().getByName("bom");
158-
return new AntoraAsciidocAttributes(project, bom, constraints).get();
156+
ResolvedBom resolvedBom = ResolvedBom.readFrom(resolvedBoms.getSingleFile());
157+
return new AntoraAsciidocAttributes(project, bom, resolvedBom).get();
159158
});
160159
}
161160

Diff for: buildSrc/src/main/java/org/springframework/boot/build/MavenPublishingConventions.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2024 the original author or authors.
2+
* Copyright 2012-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,8 +16,8 @@
1616

1717
package org.springframework.boot.build;
1818

19-
import org.apache.maven.artifact.repository.MavenArtifactRepository;
2019
import org.gradle.api.Project;
20+
import org.gradle.api.artifacts.repositories.MavenArtifactRepository;
2121
import org.gradle.api.attributes.Usage;
2222
import org.gradle.api.plugins.JavaPlugin;
2323
import org.gradle.api.plugins.JavaPluginExtension;

Diff for: buildSrc/src/main/java/org/springframework/boot/build/antora/AntoraAsciidocAttributes.java

+41-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2024 the original author or authors.
2+
* Copyright 2012-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -20,7 +20,9 @@
2020
import java.io.InputStream;
2121
import java.io.UncheckedIOException;
2222
import java.util.Arrays;
23+
import java.util.Collection;
2324
import java.util.Collections;
25+
import java.util.HashMap;
2426
import java.util.LinkedHashMap;
2527
import java.util.List;
2628
import java.util.Map;
@@ -32,6 +34,10 @@
3234
import org.springframework.boot.build.artifacts.ArtifactRelease;
3335
import org.springframework.boot.build.bom.BomExtension;
3436
import org.springframework.boot.build.bom.Library;
37+
import org.springframework.boot.build.bom.ResolvedBom;
38+
import org.springframework.boot.build.bom.ResolvedBom.Bom;
39+
import org.springframework.boot.build.bom.ResolvedBom.Id;
40+
import org.springframework.boot.build.bom.ResolvedBom.ResolvedLibrary;
3541
import org.springframework.boot.build.properties.BuildProperties;
3642
import org.springframework.boot.build.properties.BuildType;
3743
import org.springframework.util.Assert;
@@ -59,17 +65,48 @@ public class AntoraAsciidocAttributes {
5965

6066
private final Map<String, ?> projectProperties;
6167

62-
public AntoraAsciidocAttributes(Project project, BomExtension dependencyBom,
63-
Map<String, String> dependencyVersions) {
68+
public AntoraAsciidocAttributes(Project project, BomExtension dependencyBom, ResolvedBom resolvedBom) {
6469
this.version = String.valueOf(project.getVersion());
6570
this.latestVersion = Boolean.parseBoolean(String.valueOf(project.findProperty("latestVersion")));
6671
this.buildType = BuildProperties.get(project).buildType();
6772
this.artifactRelease = ArtifactRelease.forProject(project);
6873
this.libraries = dependencyBom.getLibraries();
69-
this.dependencyVersions = dependencyVersions;
74+
this.dependencyVersions = dependencyVersionsOf(resolvedBom);
7075
this.projectProperties = project.getProperties();
7176
}
7277

78+
private static Map<String, String> dependencyVersionsOf(ResolvedBom resolvedBom) {
79+
Map<String, String> dependencyVersions = new HashMap<>();
80+
for (ResolvedLibrary library : resolvedBom.libraries()) {
81+
dependencyVersions.putAll(dependencyVersionsOf(library.managedDependencies()));
82+
for (Bom importedBom : library.importedBoms()) {
83+
dependencyVersions.putAll(dependencyVersionsOf(importedBom));
84+
}
85+
}
86+
return dependencyVersions;
87+
}
88+
89+
private static Map<String, String> dependencyVersionsOf(Bom bom) {
90+
Map<String, String> dependencyVersions = new HashMap<>();
91+
if (bom != null) {
92+
dependencyVersions.putAll(dependencyVersionsOf(bom.managedDependencies()));
93+
dependencyVersions.putAll(dependencyVersionsOf(bom.parent()));
94+
for (Bom importedBom : bom.importedBoms()) {
95+
dependencyVersions.putAll(dependencyVersionsOf(importedBom));
96+
}
97+
}
98+
return dependencyVersions;
99+
}
100+
101+
private static Map<String, String> dependencyVersionsOf(Collection<Id> managedDependencies) {
102+
Map<String, String> dependencyVersions = new HashMap<>();
103+
for (Id managedDependency : managedDependencies) {
104+
dependencyVersions.put(managedDependency.groupId() + ":" + managedDependency.artifactId(),
105+
managedDependency.version());
106+
}
107+
return dependencyVersions;
108+
}
109+
73110
AntoraAsciidocAttributes(String version, boolean latestVersion, BuildType buildType, List<Library> libraries,
74111
Map<String, String> dependencyVersions, Map<String, ?> projectProperties) {
75112
this.version = version;

Diff for: buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureCheck.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import com.tngtech.archunit.lang.ArchRule;
3232
import com.tngtech.archunit.lang.EvaluationResult;
3333
import org.gradle.api.DefaultTask;
34-
import org.gradle.api.GradleException;
3534
import org.gradle.api.Task;
3635
import org.gradle.api.Transformer;
3736
import org.gradle.api.file.DirectoryProperty;
@@ -49,6 +48,7 @@
4948
import org.gradle.api.tasks.PathSensitivity;
5049
import org.gradle.api.tasks.SkipWhenEmpty;
5150
import org.gradle.api.tasks.TaskAction;
51+
import org.gradle.api.tasks.VerificationException;
5252

5353
/**
5454
* {@link Task} that checks for architecture problems.
@@ -86,7 +86,7 @@ void checkArchitecture() throws IOException {
8686
File outputFile = getOutputDirectory().file("failure-report.txt").get().getAsFile();
8787
writeViolationReport(violations, outputFile);
8888
if (!violations.isEmpty()) {
89-
throw new GradleException("Architecture check failed. See '" + outputFile + "' for details.");
89+
throw new VerificationException("Architecture check failed. See '" + outputFile + "' for details.");
9090
}
9191
}
9292

Diff for: buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureRules.java

+16
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.tngtech.archunit.core.domain.JavaClass;
3535
import com.tngtech.archunit.core.domain.JavaClass.Predicates;
3636
import com.tngtech.archunit.core.domain.JavaMethod;
37+
import com.tngtech.archunit.core.domain.JavaModifier;
3738
import com.tngtech.archunit.core.domain.JavaParameter;
3839
import com.tngtech.archunit.core.domain.JavaType;
3940
import com.tngtech.archunit.core.domain.properties.CanBeAnnotated;
@@ -94,6 +95,7 @@ static List<ArchRule> standard() {
9495
rules.add(enumSourceShouldNotSpecifyOnlyATypeThatIsTheSameAsMethodParameterType());
9596
rules.add(classLevelConfigurationPropertiesShouldNotSpecifyOnlyPrefixAttribute());
9697
rules.add(methodLevelConfigurationPropertiesShouldNotSpecifyOnlyPrefixAttribute());
98+
rules.add(conditionsShouldNotBePublic());
9799
return List.copyOf(rules);
98100
}
99101

@@ -290,6 +292,20 @@ private static void notSpecifyOnlyPrefixAttributeOfConfigurationProperties(HasAn
290292
}
291293
}
292294

295+
private static ArchRule conditionsShouldNotBePublic() {
296+
String springBootCondition = "org.springframework.boot.autoconfigure.condition.SpringBootCondition";
297+
return ArchRuleDefinition.noClasses()
298+
.that()
299+
.areAssignableTo(springBootCondition)
300+
.and()
301+
.doNotHaveModifier(JavaModifier.ABSTRACT)
302+
.and()
303+
.areNotAnnotatedWith(Deprecated.class)
304+
.should()
305+
.bePublic()
306+
.allowEmptyShould(true);
307+
}
308+
293309
private static boolean containsOnlySingleType(JavaType[] types, JavaType type) {
294310
return types.length == 1 && type.equals(types[0]);
295311
}

0 commit comments

Comments
 (0)