From 989e6dd1504ca1e15ed7b28d3bbe542f5d775c8a Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 20 Nov 2019 14:13:42 +0100 Subject: [PATCH] #133 - Upgrade to Spring Boot 2.2. --- lombok.config | 1 + pom.xml | 58 ++++--------- readme.md | 2 +- .../data/release/TimedCommand.java | 10 +-- .../data/release/build/BuildExecutor.java | 86 ++++++++++++++++++- .../data/release/build/BuildOperations.java | 4 +- .../SpringDataReleaseCliBannerProvider.java | 11 +-- .../data/release/io/Workspace.java | 7 +- .../issues/IssueTrackerConfiguration.java | 16 +--- .../data/release/issues/github/GitHub.java | 24 +++--- .../data/release/issues/jira/Jira.java | 29 ++++--- .../data/release/model/Project.java | 8 +- .../data/release/model/Train.java | 6 +- .../release/sagan/SaganConfiguration.java | 39 +-------- src/main/resources/application.properties | 6 +- .../DeploymentOperationsUnitTests.java | 5 +- .../GitHubIssueTrackerIntegrationTests.java | 2 +- 17 files changed, 161 insertions(+), 153 deletions(-) diff --git a/lombok.config b/lombok.config index 71bb610..255addb 100644 --- a/lombok.config +++ b/lombok.config @@ -1 +1,2 @@ lombok.nonNull.exceptionType = IllegalArgumentException +lombok.anyConstructor.addConstructorProperties = true diff --git a/pom.xml b/pom.xml index 4955fe4..4ee03d6 100644 --- a/pom.xml +++ b/pom.xml @@ -1,4 +1,5 @@ - 4.0.0 org.springframework.data.build @@ -8,13 +9,11 @@ org.springframework.boot spring-boot-starter-parent - 1.5.4.RELEASE + 2.2.1.RELEASE - 1.8 - org.springframework.data.release.Application - 2.0.0.BUILD-SNAPSHOT + 2.0.0.RELEASE @@ -52,7 +51,7 @@ org.springframework.shell spring-shell - 1.2.0.RC1 + 1.2.0.RELEASE @@ -75,13 +74,13 @@ org.projectlombok lombok - 1.16.6 provided org.springframework.plugin spring-plugin-core + ${spring-plugin.version} @@ -120,57 +119,32 @@ test + + com.google.guava + guava + 28.1-jre + test + + javax.servlet javax.servlet-api test - - com.google.guava - guava - 19.0 - - + ${project.name} - - - org.codehaus.mojo - appassembler-maven-plugin - 1.7 - - - - ${jar.mainclass} - spring-data-release-shell - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - ${java.version} - ${java.version} - -parameters - + org.springframework.boot + spring-boot-maven-plugin - - - spring-libs-snapshot - https://repo.spring.io/libs-snapshot - - diff --git a/readme.md b/readme.md index 969945d..f12270b 100644 --- a/readme.md +++ b/readme.md @@ -21,7 +21,7 @@ See `application-local.template` for details. ### Build and execute the release shell -Run `mvn package appassembler:assemble && sh target/appassembler/bin/spring-data-release-shell` +Run `mvn package && java -jar target/spring-data-release-cli.jar` ## The release process diff --git a/src/main/java/org/springframework/data/release/TimedCommand.java b/src/main/java/org/springframework/data/release/TimedCommand.java index a3f61cf..e778676 100644 --- a/src/main/java/org/springframework/data/release/TimedCommand.java +++ b/src/main/java/org/springframework/data/release/TimedCommand.java @@ -22,14 +22,14 @@ import org.springframework.util.StopWatch; /** * Base class for command implementations who want to get their execution time logged. - * + * * @author Oliver Gierke */ public abstract class TimedCommand implements ExecutionProcessor, CommandMarker { private StopWatch watch; - /* + /* * (non-Javadoc) * @see org.springframework.shell.core.ExecutionProcessor#beforeInvocation(org.springframework.shell.event.ParseResult) */ @@ -42,7 +42,7 @@ public abstract class TimedCommand implements ExecutionProcessor, CommandMarker return invocationContext; } - /* + /* * (non-Javadoc) * @see org.springframework.shell.core.ExecutionProcessor#afterReturningInvocation(org.springframework.shell.event.ParseResult, java.lang.Object) */ @@ -51,7 +51,7 @@ public abstract class TimedCommand implements ExecutionProcessor, CommandMarker stopAndLog(); } - /* + /* * (non-Javadoc) * @see org.springframework.shell.core.ExecutionProcessor#afterThrowingInvocation(org.springframework.shell.event.ParseResult, java.lang.Throwable) */ @@ -63,6 +63,6 @@ public abstract class TimedCommand implements ExecutionProcessor, CommandMarker private void stopAndLog() { watch.stop(); - System.out.println(String.format("Took: %s sec.", watch.getTotalTimeSeconds())); + System.out.println(String.format("Took: %.2f sec.", watch.getTotalTimeSeconds())); } } diff --git a/src/main/java/org/springframework/data/release/build/BuildExecutor.java b/src/main/java/org/springframework/data/release/build/BuildExecutor.java index 733e79b..d89841e 100644 --- a/src/main/java/org/springframework/data/release/build/BuildExecutor.java +++ b/src/main/java/org/springframework/data/release/build/BuildExecutor.java @@ -18,15 +18,19 @@ package org.springframework.data.release.build; import lombok.NonNull; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.Callable; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.function.BiFunction; @@ -45,8 +49,6 @@ import org.springframework.stereotype.Component; import org.springframework.util.Assert; import org.springframework.util.StringUtils; -import com.google.common.util.concurrent.MoreExecutors; - /** * Build executor service. * @@ -72,7 +74,7 @@ class BuildExecutor { int parallelity = Math.max(2, (processors / 2)); executor = new ThreadPoolExecutor(parallelity, parallelity, 10, TimeUnit.MINUTES, new ArrayBlockingQueue<>(256)); } else { - executor = MoreExecutors.newDirectExecutorService(); + executor = ImmediateExecutorService.INSTANCE; } } @@ -266,4 +268,82 @@ class BuildExecutor { } } + enum ImmediateExecutorService implements ExecutorService { + INSTANCE; + + @Override + public void shutdown() { + + } + + @Override + public List shutdownNow() { + return Collections.emptyList(); + } + + @Override + public boolean isShutdown() { + return false; + } + + @Override + public boolean isTerminated() { + return false; + } + + @Override + public boolean awaitTermination(long timeout, TimeUnit unit) { + return false; + } + + @Override + public Future submit(Callable task) { + try { + return CompletableFuture.completedFuture(task.call()); + } catch (Exception e) { + CompletableFuture f = new CompletableFuture<>(); + f.completeExceptionally(e); + return f; + } + } + + @Override + public Future submit(Runnable task, T result) { + return submit(() -> { + task.run(); + return result; + }); + } + + @Override + public Future submit(Runnable task) { + return submit(task, null); + } + + @Override + public List> invokeAll(Collection> tasks) { + throw new UnsupportedOperationException(); + } + + @Override + public List> invokeAll(Collection> tasks, long timeout, TimeUnit unit) { + throw new UnsupportedOperationException(); + } + + @Override + public T invokeAny(Collection> tasks) { + throw new UnsupportedOperationException(); + } + + @Override + public T invokeAny(Collection> tasks, long timeout, TimeUnit unit) { + throw new UnsupportedOperationException(); + } + + @Override + public void execute(Runnable command) { + submit(command); + } + } + } diff --git a/src/main/java/org/springframework/data/release/build/BuildOperations.java b/src/main/java/org/springframework/data/release/build/BuildOperations.java index 254705a..c8a814c 100644 --- a/src/main/java/org/springframework/data/release/build/BuildOperations.java +++ b/src/main/java/org/springframework/data/release/build/BuildOperations.java @@ -24,6 +24,8 @@ import java.util.function.BiFunction; import java.util.function.Supplier; import java.util.stream.Collectors; +import org.assertj.core.util.VisibleForTesting; + import org.springframework.data.release.deployment.DeploymentInformation; import org.springframework.data.release.model.Module; import org.springframework.data.release.model.ModuleIteration; @@ -36,8 +38,6 @@ import org.springframework.plugin.core.PluginRegistry; import org.springframework.stereotype.Component; import org.springframework.util.Assert; -import com.google.common.annotations.VisibleForTesting; - /** * @author Oliver Gierke * @author Mark Paluch diff --git a/src/main/java/org/springframework/data/release/cli/SpringDataReleaseCliBannerProvider.java b/src/main/java/org/springframework/data/release/cli/SpringDataReleaseCliBannerProvider.java index 5c185f3..e73c6ea 100644 --- a/src/main/java/org/springframework/data/release/cli/SpringDataReleaseCliBannerProvider.java +++ b/src/main/java/org/springframework/data/release/cli/SpringDataReleaseCliBannerProvider.java @@ -15,6 +15,7 @@ */ package org.springframework.data.release.cli; +import org.springframework.boot.SpringBootVersion; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.shell.plugin.BannerProvider; @@ -26,7 +27,7 @@ import org.springframework.stereotype.Component; @Component class SpringDataReleaseCliBannerProvider implements BannerProvider { - /* + /* * (non-Javadoc) * @see org.springframework.shell.plugin.NamedProvider#getProviderName() */ @@ -35,7 +36,7 @@ class SpringDataReleaseCliBannerProvider implements BannerProvider { return "Spring Data Release Shell"; } - /* + /* * (non-Javadoc) * @see org.springframework.shell.plugin.BannerProvider#getBanner() */ @@ -51,16 +52,16 @@ class SpringDataReleaseCliBannerProvider implements BannerProvider { return builder.toString(); } - /* + /* * (non-Javadoc) * @see org.springframework.shell.plugin.BannerProvider#getVersion() */ @Override public String getVersion() { - return "1.0"; + return "1.0 on Spring Boot " + SpringBootVersion.getVersion(); } - /* + /* * (non-Javadoc) * @see org.springframework.shell.plugin.BannerProvider#getWelcomeMessage() */ diff --git a/src/main/java/org/springframework/data/release/io/Workspace.java b/src/main/java/org/springframework/data/release/io/Workspace.java index d4a35ea..4b5254d 100644 --- a/src/main/java/org/springframework/data/release/io/Workspace.java +++ b/src/main/java/org/springframework/data/release/io/Workspace.java @@ -32,6 +32,7 @@ import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.Arrays; +import java.util.Collections; import java.util.Optional; import java.util.Scanner; import java.util.function.Predicate; @@ -192,10 +193,6 @@ public class Workspace { } } - public boolean processFiles(String pattern, Project project, LineCallback callback) { - return false; - } - public boolean processFile(String filename, Project project, LineCallback callback) { File file = getFile(filename, project); @@ -226,7 +223,7 @@ public class Workspace { private void writeContentToFile(String name, Project project, String content) throws IOException { File file = getFile(name, project); - com.google.common.io.Files.write(content, file, UTF_8); + Files.write(file.toPath(), Collections.singleton(content), UTF_8); } /** diff --git a/src/main/java/org/springframework/data/release/issues/IssueTrackerConfiguration.java b/src/main/java/org/springframework/data/release/issues/IssueTrackerConfiguration.java index b9571f8..ca94212 100644 --- a/src/main/java/org/springframework/data/release/issues/IssueTrackerConfiguration.java +++ b/src/main/java/org/springframework/data/release/issues/IssueTrackerConfiguration.java @@ -15,10 +15,10 @@ */ package org.springframework.data.release.issues; -import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.concurrent.ConcurrentMapCacheManager; @@ -26,11 +26,9 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.release.model.Project; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.plugin.core.OrderAwarePluginRegistry; import org.springframework.plugin.core.PluginRegistry; -import org.springframework.web.client.RestTemplate; import com.fasterxml.jackson.annotation.JsonCreator.Mode; import com.fasterxml.jackson.annotation.JsonInclude.Include; @@ -70,19 +68,13 @@ class IssueTrackerConfiguration { @Bean @Qualifier("tracker") - RestTemplate restTemplate() { + RestTemplateBuilder restTemplate() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(jacksonObjectMapper()); - List> converters = new ArrayList<>(); - converters.add(converter); - - RestTemplate template = new RestTemplate(); - template.setRequestFactory(new HttpComponentsClientHttpRequestFactory()); - template.setMessageConverters(converters); - - return template; + return new RestTemplateBuilder().messageConverters(converter) + .requestFactory(HttpComponentsClientHttpRequestFactory.class); } @Bean diff --git a/src/main/java/org/springframework/data/release/issues/github/GitHub.java b/src/main/java/org/springframework/data/release/issues/github/GitHub.java index 7ea69e6..d6d701b 100644 --- a/src/main/java/org/springframework/data/release/issues/github/GitHub.java +++ b/src/main/java/org/springframework/data/release/issues/github/GitHub.java @@ -30,6 +30,7 @@ import java.util.regex.Pattern; import java.util.stream.Stream; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.core.ParameterizedTypeReference; @@ -53,6 +54,7 @@ import org.springframework.stereotype.Component; import org.springframework.util.Assert; import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestOperations; +import org.springframework.web.util.DefaultUriBuilderFactory; import org.springframework.web.util.UriTemplate; /** @@ -62,13 +64,13 @@ import org.springframework.web.util.UriTemplate; @Component class GitHub implements IssueTracker { - private static final String MILESTONE_URI = "{githubBaseUrl}/repos/spring-projects/{repoName}/milestones?state={state}"; - private static final String ISSUES_BY_MILESTONE_AND_ASSIGNEE_URI_TEMPLATE = "{githubBaseUrl}/repos/spring-projects/{repoName}/issues?milestone={id}&state=all&assignee={assignee}"; - private static final String ISSUES_BY_MILESTONE_URI_TEMPLATE = "{githubBaseUrl}/repos/spring-projects/{repoName}/issues?milestone={id}&state=all"; - private static final String MILESTONES_URI_TEMPLATE = "{githubBaseUrl}/repos/spring-projects/{repoName}/milestones"; - private static final String MILESTONE_BY_ID_URI_TEMPLATE = "{githubBaseUrl}/repos/spring-projects/{repoName}/milestones/{id}"; - private static final String ISSUE_BY_ID_URI_TEMPLATE = "{githubBaseUrl}/repos/spring-projects/{repoName}/issues/{id}"; - private static final String ISSUES_URI_TEMPLATE = "{githubBaseUrl}/repos/spring-projects/{repoName}/issues"; + private static final String MILESTONE_URI = "/repos/spring-projects/{repoName}/milestones?state={state}"; + private static final String ISSUES_BY_MILESTONE_AND_ASSIGNEE_URI_TEMPLATE = "/repos/spring-projects/{repoName}/issues?milestone={id}&state=all&assignee={assignee}"; + private static final String ISSUES_BY_MILESTONE_URI_TEMPLATE = "/repos/spring-projects/{repoName}/issues?milestone={id}&state=all"; + private static final String MILESTONES_URI_TEMPLATE = "/repos/spring-projects/{repoName}/milestones"; + private static final String MILESTONE_BY_ID_URI_TEMPLATE = "/repos/spring-projects/{repoName}/milestones/{id}"; + private static final String ISSUE_BY_ID_URI_TEMPLATE = "/repos/spring-projects/{repoName}/issues/{id}"; + private static final String ISSUES_URI_TEMPLATE = "/repos/spring-projects/{repoName}/issues"; private static final ParameterizedTypeReference> MILESTONES_TYPE = new ParameterizedTypeReference>() {}; private static final ParameterizedTypeReference> ISSUES_TYPE = new ParameterizedTypeReference>() {}; @@ -79,13 +81,13 @@ class GitHub implements IssueTracker { private final GitHubProperties properties; /** - * @param operations + * @param templateBuilder * @param logger * @param properties */ - public GitHub(@Qualifier("tracker") RestOperations operations, Logger logger, GitHubProperties properties) { + public GitHub(@Qualifier("tracker") RestTemplateBuilder templateBuilder, Logger logger, GitHubProperties properties) { - this.operations = operations; + this.operations = templateBuilder.uriTemplateHandler(new DefaultUriBuilderFactory(properties.getApiUrl())).build(); this.logger = logger; this.properties = properties; } @@ -353,8 +355,6 @@ class GitHub implements IssueTracker { private Map newUrlTemplateVariables() { Map parameters = new HashMap<>(); - parameters.put("githubBaseUrl", properties.getApiUrl()); - return parameters; } diff --git a/src/main/java/org/springframework/data/release/issues/jira/Jira.java b/src/main/java/org/springframework/data/release/issues/jira/Jira.java index 7bc233a..cef967c 100644 --- a/src/main/java/org/springframework/data/release/issues/jira/Jira.java +++ b/src/main/java/org/springframework/data/release/issues/jira/Jira.java @@ -26,6 +26,7 @@ import java.util.Optional; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.core.ParameterizedTypeReference; @@ -52,6 +53,7 @@ import org.springframework.util.Assert; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestOperations; +import org.springframework.web.util.DefaultUriBuilderFactory; import org.springframework.web.util.UriTemplate; /** @@ -61,15 +63,14 @@ import org.springframework.web.util.UriTemplate; @Component class Jira implements JiraConnector { - private static final String BASE_URI = "{jiraBaseUrl}/rest/api/2"; - private static final String CREATE_ISSUES_TEMPLATE = BASE_URI + "/issue"; - private static final String ISSUE_TEMPLATE = BASE_URI + "/issue/{ticketId}"; - private static final String TRANSITION_TEMPLATE = BASE_URI + "/issue/{ticketId}/transitions"; - private static final String PROJECT_VERSIONS_TEMPLATE = BASE_URI + "/project/{project}/version?startAt={startAt}"; - private static final String PROJECT_COMPONENTS_TEMPLATE = BASE_URI + "/project/{project}/components"; - private static final String VERSIONS_TEMPLATE = BASE_URI + "/version"; - private static final String VERSION_TEMPLATE = BASE_URI + "/version/{id}"; - private static final String SEARCH_TEMPLATE = BASE_URI + "/search?jql={jql}&fields={fields}&startAt={startAt}"; + private static final String CREATE_ISSUES_TEMPLATE = "/issue"; + private static final String ISSUE_TEMPLATE = "/issue/{ticketId}"; + private static final String TRANSITION_TEMPLATE = "/issue/{ticketId}/transitions"; + private static final String PROJECT_VERSIONS_TEMPLATE = "/project/{project}/version?startAt={startAt}"; + private static final String PROJECT_COMPONENTS_TEMPLATE = "/project/{project}/components"; + private static final String VERSIONS_TEMPLATE = "/version"; + private static final String VERSION_TEMPLATE = "/version/{id}"; + private static final String SEARCH_TEMPLATE = "/search?jql={jql}&fields={fields}&startAt={startAt}"; private static final String INFRASTRUCTURE_COMPONENT_NAME = "Infrastructure"; private static final String IN_PROGRESS_STATUS_CATEGORY = "indeterminate"; @@ -87,13 +88,15 @@ class Jira implements JiraConnector { private final JiraProperties jiraProperties; /** - * @param operations + * @param templateBuilder * @param logger * @param jiraProperties */ - public Jira(@Qualifier("tracker") RestOperations operations, Logger logger, JiraProperties jiraProperties) { + public Jira(@Qualifier("tracker") RestTemplateBuilder templateBuilder, Logger logger, JiraProperties jiraProperties) { - this.operations = operations; + String baseUri = String.format("%s/rest/api/2", jiraProperties.getApiUrl()); + + this.operations = templateBuilder.uriTemplateHandler(new DefaultUriBuilderFactory(baseUri)).build(); this.logger = logger; this.jiraProperties = jiraProperties; } @@ -556,7 +559,6 @@ class Jira implements JiraConnector { return project.uses(Tracker.JIRA); } - @Cacheable("jira-components") protected JiraComponents getJiraComponents(ProjectKey projectKey) { HttpHeaders headers = new HttpHeaders(); @@ -706,7 +708,6 @@ class Jira implements JiraConnector { private Map newUrlTemplateVariables() { Map parameters = new HashMap<>(); - parameters.put("jiraBaseUrl", jiraProperties.getApiUrl()); return parameters; } diff --git a/src/main/java/org/springframework/data/release/model/Project.java b/src/main/java/org/springframework/data/release/model/Project.java index 5e8b7ad..019e8cc 100644 --- a/src/main/java/org/springframework/data/release/model/Project.java +++ b/src/main/java/org/springframework/data/release/model/Project.java @@ -20,7 +20,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.ToString; -import lombok.experimental.Wither; +import lombok.With; import java.util.Arrays; import java.util.Collection; @@ -42,11 +42,11 @@ public class Project implements Comparable { private final @Getter ProjectKey key; private final @Getter String name; - private final @Wither String fullName; + private final @With String fullName; private final Collection dependencies; private final @Getter Tracker tracker; - private final @Wither ArtifactCoordinates additionalArtifacts; - private final @Wither boolean skipTests; + private final @With ArtifactCoordinates additionalArtifacts; + private final @With boolean skipTests; Project(String key, String name) { this(key, name, null, Tracker.JIRA); diff --git a/src/main/java/org/springframework/data/release/model/Train.java b/src/main/java/org/springframework/data/release/model/Train.java index dc40775..a9f8514 100644 --- a/src/main/java/org/springframework/data/release/model/Train.java +++ b/src/main/java/org/springframework/data/release/model/Train.java @@ -22,7 +22,7 @@ import lombok.EqualsAndHashCode; import lombok.RequiredArgsConstructor; import lombok.ToString; import lombok.Value; -import lombok.experimental.Wither; +import lombok.With; import java.util.Arrays; import java.util.Collection; @@ -47,8 +47,8 @@ public class Train implements Streamable { private final String name;; private final Modules modules; - private @Wither Iterations iterations; - private @Wither boolean alwaysUseBranch; + private @With Iterations iterations; + private @With boolean alwaysUseBranch; public Train(String name, Module... modules) { this(name, Arrays.asList(modules)); diff --git a/src/main/java/org/springframework/data/release/sagan/SaganConfiguration.java b/src/main/java/org/springframework/data/release/sagan/SaganConfiguration.java index fbc9c93..6ba77dd 100644 --- a/src/main/java/org/springframework/data/release/sagan/SaganConfiguration.java +++ b/src/main/java/org/springframework/data/release/sagan/SaganConfiguration.java @@ -15,27 +15,17 @@ */ package org.springframework.data.release.sagan; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; - -import java.io.IOException; -import java.util.Arrays; - import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.release.git.GitOperations; import org.springframework.data.release.utils.Logger; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpRequest; -import org.springframework.http.client.ClientHttpRequestExecution; -import org.springframework.http.client.ClientHttpRequestInterceptor; -import org.springframework.http.client.ClientHttpResponse; import org.springframework.web.client.RestTemplate; /** * Configuration for the Sagan interaction subsystem. - * + * * @author Oliver Gierke */ @Configuration @@ -58,29 +48,6 @@ class SaganConfiguration { @Bean RestTemplate saganRestTemplate() { - - RestTemplate template = new RestTemplate(); - template.setInterceptors(Arrays.asList(new AuthenticatingClientHttpRequestInterceptor(properties))); - - return template; - } - - @RequiredArgsConstructor - private static class AuthenticatingClientHttpRequestInterceptor implements ClientHttpRequestInterceptor { - - private final @NonNull SaganProperties properties; - - /* - * (non-Javadoc) - * @see org.springframework.http.client.ClientHttpRequestInterceptor#intercept(org.springframework.http.HttpRequest, byte[], org.springframework.http.client.ClientHttpRequestExecution) - */ - @Override - public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) - throws IOException { - - request.getHeaders().add(HttpHeaders.AUTHORIZATION, properties.getCredentials().toString()); - - return execution.execute(request, body); - } + return new RestTemplateBuilder().basicAuthentication(properties.key, "").build(); } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index aab5b88..fa3b02e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,25 +1,21 @@ +spring.main.banner-mode=off io.work-dir=~/temp/spring-data-shell/workspace io.logs=logs - # Maven setup maven.local-repository=~/temp/spring-data-shell/repository maven.plugins.versions=org.codehaus.mojo:versions-maven-plugin:2.2 maven.console-logger=true - deployment.server.uri=https://repo.spring.io deployment.staging-repository=libs-staging-local deployment.distribution-repository=temp-private-local deployment.username=buildmaster #deployment.password <- local - # GPG setup deployment.gpg.executable=/usr/local/bin/gpg2 # deployment.gpg.keyname # deployment.gpg.password - # JIRA jira.api-url=https://jira.spring.io - # GitHub github.api-url=https://api.github.com logging.pattern.console=%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(%-20.20logger{19}){cyan}%clr(:){faint} %m%n%wEx diff --git a/src/test/java/org/springframework/data/release/deployment/DeploymentOperationsUnitTests.java b/src/test/java/org/springframework/data/release/deployment/DeploymentOperationsUnitTests.java index fdf626f..6efc9a1 100644 --- a/src/test/java/org/springframework/data/release/deployment/DeploymentOperationsUnitTests.java +++ b/src/test/java/org/springframework/data/release/deployment/DeploymentOperationsUnitTests.java @@ -15,7 +15,6 @@ */ package org.springframework.data.release.deployment; -import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import org.junit.Test; @@ -45,7 +44,7 @@ public class DeploymentOperationsUnitTests { operations.promote(information); - verify(logger).log(eq(module), any()); - verifyZeroInteractions(client); + verify(logger).log(eq(module), anyString()); + verifyNoInteractions(client); } } diff --git a/src/test/java/org/springframework/data/release/issues/github/GitHubIssueTrackerIntegrationTests.java b/src/test/java/org/springframework/data/release/issues/github/GitHubIssueTrackerIntegrationTests.java index 2953395..b6c4260 100644 --- a/src/test/java/org/springframework/data/release/issues/github/GitHubIssueTrackerIntegrationTests.java +++ b/src/test/java/org/springframework/data/release/issues/github/GitHubIssueTrackerIntegrationTests.java @@ -148,7 +148,7 @@ public class GitHubIssueTrackerIntegrationTests extends AbstractIntegrationTests github.createReleaseVersion(BUILD_HOPPER_RC1); verify(postRequestedFor(urlPathMatching(MILESTONES_URI)).withRequestBody( - equalToJson("{\"title\":\"1.8 RC1 (Hopper)\", \"description\":\"Hopper RC1\",\"open\":false}"))); + equalToJson("{\"title\":\"1.8 RC1 (Hopper)\", \"description\":\"Hopper RC1\"}"))); } /**