Browse Source

Add credentials to ivy settings to support commercial builds

Closes gh-46824
pull/48297/head
Phillip Webb 4 weeks ago
parent
commit
7837583484
  1. 29
      buildSrc/src/main/java/org/springframework/boot/build/RepositoryTransformersExtension.java
  2. 4
      spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/ivysettings.xml
  3. 2
      spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/ivysettings.xml

29
buildSrc/src/main/java/org/springframework/boot/build/RepositoryTransformersExtension.java

@ -20,7 +20,9 @@ import java.net.URI; @@ -20,7 +20,9 @@ import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiFunction;
import java.util.function.Function;
@ -37,6 +39,8 @@ import org.gradle.api.artifacts.repositories.MavenArtifactRepository; @@ -37,6 +39,8 @@ import org.gradle.api.artifacts.repositories.MavenArtifactRepository;
*/
public class RepositoryTransformersExtension {
private static final String CREDENTIALS_MARKER = "{spring.mavenCredentials}";
private static final String REPOSITORIES_MARKER = "{spring.mavenRepositories}";
private static final String PLUGIN_REPOSITORIES_MARKER = "{spring.mavenPluginRepositories}";
@ -60,6 +64,19 @@ public class RepositoryTransformersExtension { @@ -60,6 +64,19 @@ public class RepositoryTransformersExtension {
return "%s<ibiblio name=\"%s\" m2compatible=\"true\" root=\"%s\" />".formatted(indent, name, url);
});
}
if (line.contains(CREDENTIALS_MARKER)) {
Map<String, MavenCredential> hostCredentials = new LinkedHashMap<>();
getSpringRepositories().forEach((repository) -> {
if (repository.getName().startsWith("spring-commercial-")) {
String host = repository.getUrl().getHost();
hostCredentials.put(host,
new MavenCredential("${env.COMMERCIAL_REPO_USERNAME}", "${env.COMMERCIAL_REPO_PASSWORD"));
}
});
return transform(line, hostCredentials.entrySet(), (entry,
indent) -> "%s<credentials host=\"%s\" realm=\"Artifactory Realm\" username=\"%s\" passwd=\"%s\" />%n"
.formatted(indent, entry.getKey(), entry.getValue().username(), entry.getValue().password()));
}
return line;
}
@ -99,10 +116,14 @@ public class RepositoryTransformersExtension { @@ -99,10 +116,14 @@ public class RepositoryTransformersExtension {
}
private String transform(String line, BiFunction<MavenArtifactRepository, String, String> generator) {
return transform(line, getSpringRepositories(), generator);
}
private <T> String transform(String line, Iterable<T> iterable, BiFunction<T, String, String> generator) {
StringBuilder result = new StringBuilder();
String indent = getIndent(line);
getSpringRepositories().forEach((repository) -> {
String fragment = generator.apply(repository, indent);
iterable.forEach((item) -> {
String fragment = generator.apply(item, indent);
if (fragment != null) {
result.append(!result.isEmpty() ? "\n" : "");
result.append(fragment);
@ -136,4 +157,8 @@ public class RepositoryTransformersExtension { @@ -136,4 +157,8 @@ public class RepositoryTransformersExtension {
project.getExtensions().create("springRepositoryTransformers", RepositoryTransformersExtension.class, project);
}
record MavenCredential(String username, String password) {
}
}

4
spring-boot-project/spring-boot-tools/spring-boot-antlib/src/it/sample/ivysettings.xml

@ -2,7 +2,6 @@ @@ -2,7 +2,6 @@
<settings defaultResolver="chain" />
<resolvers>
<chain name="chain">
<!-- NOTE: You should declare only repositories that you need here -->
<filesystem name="local" local="true" m2compatible="true">
<artifact pattern="${user.home}/.m2/[organisation]/[module]/[revision]/[module]-[revision].[ext]" />
<ivy pattern="${user.home}/.m2/[organisation]/[module]/[revision]/[module]-[revision].pom" />
@ -11,6 +10,5 @@ @@ -11,6 +10,5 @@
<!-- {spring.mavenRepositories} -->
</chain>
</resolvers>
<credentials host="${env.COMMERCIAL_RELEASE_REPO_URL}" username="${env.COMMERCIAL_REPO_USERNAME}" passwd="${env.COMMERCIAL_REPO_PASSWORD}"/>
<credentials host="${env.COMMERCIAL_SNAPSHOT_REPO_URL}" username="${env.COMMERCIAL_REPO_USERNAME}" passwd="${env.COMMERCIAL_REPO_PASSWORD}"/>
<!-- {spring.mavenCredentials} -->
</ivysettings>

2
spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-ant/ivysettings.xml

@ -3,7 +3,6 @@ @@ -3,7 +3,6 @@
<caches defaultCacheDir="${projectDir}/build/ivy-cache"/>
<resolvers>
<chain name="chain" returnFirst="true">
<!-- NOTE: You should declare only repositories that you need here -->
<filesystem name="local" local="true" m2compatible="true">
<artifact pattern="${projectDir}/build/test-repository/[organisation]/[module]/[revision]/[module]-[revision].[ext]" />
<ivy pattern="${projectDir}/build/test-repository/[organisation]/[module]/[revision]/[module]-[revision].pom" />
@ -12,4 +11,5 @@ @@ -12,4 +11,5 @@
<!-- {spring.mavenRepositories} -->
</chain>
</resolvers>
<!-- {spring.mavenCredentials} -->
</ivysettings>

Loading…
Cancel
Save