Skip to content

Commit e892efb

Browse files
committed
Upgrade to Spring Boot 3.1.4
1 parent 364e314 commit e892efb

27 files changed

+245
-330
lines changed

pom.xml

+6-6
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@
1414
<parent>
1515
<groupId>org.springframework.boot</groupId>
1616
<artifactId>spring-boot-starter-parent</artifactId>
17-
<version>2.1.1.RELEASE</version>
17+
<version>3.1.4</version>
1818
<relativePath/>
1919
</parent>
2020

2121
<properties>
2222
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23-
<java.version>1.8</java.version>
23+
<java.version>17</java.version>
2424
</properties>
2525

2626
<dependencies>
@@ -29,8 +29,8 @@
2929
<artifactId>jackson-datatype-jsr310</artifactId>
3030
</dependency>
3131
<dependency>
32-
<groupId>org.apache.httpcomponents</groupId>
33-
<artifactId>httpclient</artifactId>
32+
<groupId>org.apache.httpcomponents.client5</groupId>
33+
<artifactId>httpclient5</artifactId>
3434
</dependency>
3535
<dependency>
3636
<groupId>org.springframework.boot</groupId>
@@ -58,7 +58,7 @@
5858
<plugin>
5959
<groupId>io.spring.javaformat</groupId>
6060
<artifactId>spring-javaformat-maven-plugin</artifactId>
61-
<version>0.0.6</version>
61+
<version>0.0.39</version>
6262
<executions>
6363
<execution>
6464
<phase>validate</phase>
@@ -103,7 +103,7 @@
103103
<plugin>
104104
<groupId>org.jacoco</groupId>
105105
<artifactId>jacoco-maven-plugin</artifactId>
106-
<version>0.7.5.201505241946</version>
106+
<version>0.8.10</version>
107107
<executions>
108108
<execution>
109109
<id>jacoco-initialize</id>

src/main/java/io/spring/issuebot/IssueBotApplication.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,9 @@ GitHubTemplate gitHubTemplate(GitHubProperties gitHubProperties) {
4949
}
5050

5151
@Bean
52-
RepositoryMonitor repositoryMonitor(GitHubOperations gitHub,
53-
MonitoringProperties monitoringProperties,
52+
RepositoryMonitor repositoryMonitor(GitHubOperations gitHub, MonitoringProperties monitoringProperties,
5453
List<MultiRepositoryIssueListener> issueListeners) {
55-
return new RepositoryMonitor(gitHub, monitoringProperties.getRepositories(),
56-
issueListeners);
54+
return new RepositoryMonitor(gitHub, monitoringProperties.getRepositories(), issueListeners);
5755
}
5856

5957
}

src/main/java/io/spring/issuebot/RepositoryMonitor.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -59,29 +59,26 @@ void monitor() {
5959
private void monitor(Repository repository) {
6060
log.info("Monitoring {}/{}", repository.getOrganization(), repository.getName());
6161
try {
62-
Page<Issue> page = this.gitHub.getIssues(repository.getOrganization(),
63-
repository.getName());
62+
Page<Issue> page = this.gitHub.getIssues(repository.getOrganization(), repository.getName());
6463
while (page != null) {
6564
for (Issue issue : page.getContent()) {
6665
for (MultiRepositoryIssueListener issueListener : this.issueListeners) {
6766
try {
6867
issueListener.onOpenIssue(repository, issue);
6968
}
7069
catch (Exception ex) {
71-
log.warn("Listener '{}' failed when handling issue '{}'",
72-
issueListener, issue, ex);
70+
log.warn("Listener '{}' failed when handling issue '{}'", issueListener, issue, ex);
7371
}
7472
}
7573
}
7674
page = page.next();
7775
}
7876
}
7977
catch (Exception ex) {
80-
log.warn("A failure occurred during monitoring of {}/{}",
81-
repository.getOrganization(), repository.getName(), ex);
78+
log.warn("A failure occurred during monitoring of {}/{}", repository.getOrganization(),
79+
repository.getName(), ex);
8280
}
83-
log.info("Monitoring of {}/{} completed", repository.getOrganization(),
84-
repository.getName());
81+
log.info("Monitoring of {}/{} completed", repository.getOrganization(), repository.getName());
8582
}
8683

8784
}

src/main/java/io/spring/issuebot/feedback/FeedbackConfiguration.java

+12-18
Original file line numberDiff line numberDiff line change
@@ -44,29 +44,23 @@
4444
class FeedbackConfiguration {
4545

4646
@Bean
47-
MultiRepositoryIssueListener feedbackIssueListener(
48-
MonitoringProperties monitoringProperties, GitHubOperations gitHub,
49-
GitHubProperties githubProperties, FeedbackProperties feedbackProperties) {
47+
MultiRepositoryIssueListener feedbackIssueListener(MonitoringProperties monitoringProperties,
48+
GitHubOperations gitHub, GitHubProperties githubProperties, FeedbackProperties feedbackProperties) {
5049
Map<Repository, IssueListener> delegates = monitoringProperties.getRepositories()
51-
.stream()
52-
.collect(Collectors.toMap(Function.identity(),
53-
(repository) -> createListener(repository, gitHub,
54-
githubProperties, feedbackProperties)));
50+
.stream()
51+
.collect(Collectors.toMap(Function.identity(),
52+
(repository) -> createListener(repository, gitHub, githubProperties, feedbackProperties)));
5553
return new RoutingMultiRepositoryIssueListener(delegates);
5654
}
5755

58-
private FeedbackIssueListener createListener(Repository repository,
59-
GitHubOperations gitHub, GitHubProperties githubProperties,
60-
FeedbackProperties feedbackProperties) {
61-
return new FeedbackIssueListener(gitHub, feedbackProperties.getRequiredLabel(),
62-
repository.getCollaborators(),
56+
private FeedbackIssueListener createListener(Repository repository, GitHubOperations gitHub,
57+
GitHubProperties githubProperties, FeedbackProperties feedbackProperties) {
58+
return new FeedbackIssueListener(gitHub, feedbackProperties.getRequiredLabel(), repository.getCollaborators(),
6359
githubProperties.getCredentials().getUsername(),
64-
new StandardFeedbackListener(gitHub,
65-
feedbackProperties.getProvidedLabel(),
66-
feedbackProperties.getRequiredLabel(),
67-
feedbackProperties.getReminderLabel(),
68-
feedbackProperties.getReminderComment(),
69-
feedbackProperties.getCloseComment(), Collections.emptyList()));
60+
new StandardFeedbackListener(gitHub, feedbackProperties.getProvidedLabel(),
61+
feedbackProperties.getRequiredLabel(), feedbackProperties.getReminderLabel(),
62+
feedbackProperties.getReminderComment(), feedbackProperties.getCloseComment(),
63+
Collections.emptyList()));
7064
}
7165

7266
}

src/main/java/io/spring/issuebot/feedback/FeedbackIssueListener.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ final class FeedbackIssueListener implements IssueListener {
4343

4444
private final FeedbackListener feedbackListener;
4545

46-
FeedbackIssueListener(GitHubOperations gitHub, String labelName,
47-
List<String> collaborators, String username,
46+
FeedbackIssueListener(GitHubOperations gitHub, String labelName, List<String> collaborators, String username,
4847
FeedbackListener feedbackListener) {
4948
this.gitHub = gitHub;
5049
this.labelName = labelName;
@@ -90,8 +89,7 @@ private OffsetDateTime getWaitingSince(Issue issue) {
9089
Page<Event> page = this.gitHub.getEvents(issue);
9190
while (page != null) {
9291
for (Event event : page.getContent()) {
93-
if (Event.Type.LABELED.equals(event.getType())
94-
&& this.labelName.equals(event.getLabel().getName())) {
92+
if (Event.Type.LABELED.equals(event.getType()) && this.labelName.equals(event.getLabel().getName())) {
9593
createdAt = event.getCreationTime();
9694
}
9795
}

src/main/java/io/spring/issuebot/feedback/StandardFeedbackListener.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,8 @@ final class StandardFeedbackListener implements FeedbackListener {
4545

4646
private final List<IssueListener> issueListeners;
4747

48-
StandardFeedbackListener(GitHubOperations gitHub, String providedLabel,
49-
String requiredLabel, String reminderLabel, String reminderComment,
50-
String closeComment, List<IssueListener> issueListeners) {
48+
StandardFeedbackListener(GitHubOperations gitHub, String providedLabel, String requiredLabel, String reminderLabel,
49+
String reminderComment, String closeComment, List<IssueListener> issueListeners) {
5150
this.gitHub = gitHub;
5251
this.providedLabel = providedLabel;
5352
this.requiredLabel = requiredLabel;

src/main/java/io/spring/issuebot/github/Comment.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ public final class Comment {
3939
* @param creationTime the creation time
4040
*/
4141
@JsonCreator
42-
public Comment(@JsonProperty("user") User user,
43-
@JsonProperty("created_at") OffsetDateTime creationTime) {
42+
public Comment(@JsonProperty("user") User user, @JsonProperty("created_at") OffsetDateTime creationTime) {
4443
this.user = user;
4544
this.creationTime = creationTime;
4645
}

src/main/java/io/spring/issuebot/github/Event.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ public class Event {
4545
* @param label the label associated with the event
4646
*/
4747
@JsonCreator
48-
public Event(@JsonProperty("event") String type,
49-
@JsonProperty("created_at") OffsetDateTime creationTime,
48+
public Event(@JsonProperty("event") String type, @JsonProperty("created_at") OffsetDateTime creationTime,
5049
@JsonProperty("label") Label label) {
5150
this.type = Type.valueFrom(type);
5251
this.creationTime = creationTime;

src/main/java/io/spring/issuebot/github/GitHubTemplate.java

+29-51
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.List;
2929
import java.util.Map;
3030

31+
import org.apache.hc.client5.http.utils.Base64;
3132
import org.slf4j.Logger;
3233
import org.slf4j.LoggerFactory;
3334

@@ -44,7 +45,6 @@
4445
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
4546
import org.springframework.http.converter.HttpMessageNotReadableException;
4647
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
47-
import org.springframework.util.Base64Utils;
4848
import org.springframework.util.StreamUtils;
4949
import org.springframework.util.StringUtils;
5050
import org.springframework.web.client.DefaultResponseErrorHandler;
@@ -86,31 +86,24 @@ static RestTemplate createDefaultRestTemplate(String username, String password)
8686
rest.setErrorHandler(new DefaultResponseErrorHandler() {
8787
@Override
8888
public void handleError(ClientHttpResponse response) throws IOException {
89-
if (response.getStatusCode() == HttpStatus.FORBIDDEN && response
90-
.getHeaders().getFirst("X-RateLimit-Remaining").equals("0")) {
91-
throw new IllegalStateException(
92-
"Rate limit exceeded. Limit will reset at "
93-
+ new Date(Long
94-
.valueOf(response.getHeaders()
95-
.getFirst("X-RateLimit-Reset"))
96-
* 1000));
89+
if (response.getStatusCode() == HttpStatus.FORBIDDEN
90+
&& response.getHeaders().getFirst("X-RateLimit-Remaining").equals("0")) {
91+
throw new IllegalStateException("Rate limit exceeded. Limit will reset at "
92+
+ new Date(Long.valueOf(response.getHeaders().getFirst("X-RateLimit-Reset")) * 1000));
9793
}
9894
}
9995
});
10096
BufferingClientHttpRequestFactory bufferingClient = new BufferingClientHttpRequestFactory(
10197
new HttpComponentsClientHttpRequestFactory());
10298
rest.setRequestFactory(bufferingClient);
103-
rest.setInterceptors(Collections
104-
.singletonList(new BasicAuthorizationInterceptor(username, password)));
105-
rest.setMessageConverters(
106-
Arrays.asList(new ErrorLoggingMappingJackson2HttpMessageConverter()));
99+
rest.setInterceptors(Collections.singletonList(new BasicAuthorizationInterceptor(username, password)));
100+
rest.setMessageConverters(Arrays.asList(new ErrorLoggingMappingJackson2HttpMessageConverter()));
107101
return rest;
108102
}
109103

110104
@Override
111105
public Page<Issue> getIssues(String organization, String repository) {
112-
String url = "https://api.github.com/repos/" + organization + "/" + repository
113-
+ "/issues";
106+
String url = "https://api.github.com/repos/" + organization + "/" + repository + "/issues";
114107
return getPage(url, Issue[].class);
115108
}
116109

@@ -129,8 +122,7 @@ private <T> Page<T> getPage(String url, Class<T[]> type) {
129122
return null;
130123
}
131124
ResponseEntity<T[]> contents = this.rest.getForEntity(url, type);
132-
return new StandardPage<>(Arrays.asList(contents.getBody()),
133-
() -> getPage(getNextUrl(contents), type));
125+
return new StandardPage<>(Arrays.asList(contents.getBody()), () -> getPage(getNextUrl(contents), type));
134126
}
135127

136128
private String getNextUrl(ResponseEntity<?> response) {
@@ -141,16 +133,13 @@ private String getNextUrl(ResponseEntity<?> response) {
141133
public Issue addLabel(Issue issue, String labelName) {
142134
URI uri = URI.create(issue.getLabelsUrl().replace("{/name}", ""));
143135
log.info("Adding label {} to {}", labelName, uri);
144-
ResponseEntity<Label[]> response = this.rest.exchange(
145-
new RequestEntity<>(Arrays.asList(labelName), HttpMethod.POST, uri),
146-
Label[].class);
136+
ResponseEntity<Label[]> response = this.rest
137+
.exchange(new RequestEntity<>(Arrays.asList(labelName), HttpMethod.POST, uri), Label[].class);
147138
if (response.getStatusCode() != HttpStatus.OK) {
148-
log.warn("Failed to add label to issue. Response status: "
149-
+ response.getStatusCode());
139+
log.warn("Failed to add label to issue. Response status: " + response.getStatusCode());
150140
}
151-
return new Issue(issue.getUrl(), issue.getCommentsUrl(), issue.getEventsUrl(),
152-
issue.getLabelsUrl(), issue.getUser(), Arrays.asList(response.getBody()),
153-
issue.getMilestone(), issue.getPullRequest());
141+
return new Issue(issue.getUrl(), issue.getCommentsUrl(), issue.getEventsUrl(), issue.getLabelsUrl(),
142+
issue.getUser(), Arrays.asList(response.getBody()), issue.getMilestone(), issue.getPullRequest());
154143
}
155144

156145
@Override
@@ -162,42 +151,35 @@ public Issue removeLabel(Issue issue, String labelName) {
162151
catch (URISyntaxException ex) {
163152
throw new RuntimeException(ex);
164153
}
165-
ResponseEntity<Label[]> response = this.rest.exchange(
166-
new RequestEntity<Void>(HttpMethod.DELETE, URI.create(
167-
issue.getLabelsUrl().replace("{/name}", "/" + encodedName))),
168-
Label[].class);
154+
ResponseEntity<Label[]> response = this.rest.exchange(new RequestEntity<Void>(HttpMethod.DELETE,
155+
URI.create(issue.getLabelsUrl().replace("{/name}", "/" + encodedName))), Label[].class);
169156
List<Label> labels;
170157
if (response.getStatusCode() != HttpStatus.OK) {
171-
log.warn("Failed to remove label from issue. Response status: "
172-
+ response.getStatusCode());
158+
log.warn("Failed to remove label from issue. Response status: " + response.getStatusCode());
173159
labels = Collections.emptyList();
174160
}
175161
else {
176162
labels = Arrays.asList(response.getBody());
177163
}
178-
return new Issue(issue.getUrl(), issue.getCommentsUrl(), issue.getEventsUrl(),
179-
issue.getLabelsUrl(), issue.getUser(), labels, issue.getMilestone(),
180-
issue.getPullRequest());
164+
return new Issue(issue.getUrl(), issue.getCommentsUrl(), issue.getEventsUrl(), issue.getLabelsUrl(),
165+
issue.getUser(), labels, issue.getMilestone(), issue.getPullRequest());
181166
}
182167

183168
@Override
184169
public Comment addComment(Issue issue, String comment) {
185170
Map<String, String> body = new HashMap<>();
186171
body.put("body", comment);
187-
return this.rest.postForEntity(issue.getCommentsUrl(), body, Comment.class)
188-
.getBody();
172+
return this.rest.postForEntity(issue.getCommentsUrl(), body, Comment.class).getBody();
189173
}
190174

191175
@Override
192176
public Issue close(Issue issue) {
193177
Map<String, String> body = new HashMap<>();
194178
body.put("state", "closed");
195-
ResponseEntity<Issue> response = this.rest.exchange(
196-
new RequestEntity<>(body, HttpMethod.PATCH, URI.create(issue.getUrl())),
197-
Issue.class);
179+
ResponseEntity<Issue> response = this.rest
180+
.exchange(new RequestEntity<>(body, HttpMethod.PATCH, URI.create(issue.getUrl())), Issue.class);
198181
if (response.getStatusCode() != HttpStatus.OK) {
199-
log.warn("Failed to close issue. Response status: "
200-
+ response.getStatusCode());
182+
log.warn("Failed to close issue. Response status: " + response.getStatusCode());
201183
}
202184
return response.getBody();
203185
}
@@ -208,8 +190,7 @@ private static final class ErrorLoggingMappingJackson2HttpMessageConverter
208190
private static final Charset CHARSET_UTF_8 = Charset.forName("UTF-8");
209191

210192
@Override
211-
public Object read(Type type, Class<?> contextClass,
212-
HttpInputMessage inputMessage)
193+
public Object read(Type type, Class<?> contextClass, HttpInputMessage inputMessage)
213194
throws IOException, HttpMessageNotReadableException {
214195
try {
215196
return super.read(type, contextClass, inputMessage);
@@ -226,8 +207,7 @@ public Object read(Type type, Class<?> contextClass,
226207
if (inputMessage instanceof ClientHttpResponse) {
227208
ClientHttpResponse response = (ClientHttpResponse) inputMessage;
228209
if (response.getStatusCode().is2xxSuccessful()) {
229-
log.error("Failed to create {} from {}", type.getTypeName(),
230-
read(inputMessage), ex);
210+
log.error("Failed to create {} from {}", type.getTypeName(), read(inputMessage), ex);
231211
throw ex;
232212
}
233213
}
@@ -241,8 +221,7 @@ private String read(HttpInputMessage inputMessage) throws IOException {
241221

242222
}
243223

244-
private static class BasicAuthorizationInterceptor
245-
implements ClientHttpRequestInterceptor {
224+
private static class BasicAuthorizationInterceptor implements ClientHttpRequestInterceptor {
246225

247226
private static final Charset UTF_8 = Charset.forName("UTF-8");
248227

@@ -256,10 +235,9 @@ private static class BasicAuthorizationInterceptor
256235
}
257236

258237
@Override
259-
public ClientHttpResponse intercept(HttpRequest request, byte[] body,
260-
ClientHttpRequestExecution execution) throws IOException {
261-
String token = Base64Utils.encodeToString(
262-
(this.username + ":" + this.password).getBytes(UTF_8));
238+
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
239+
throws IOException {
240+
String token = Base64.encodeBase64String((this.username + ":" + this.password).getBytes(UTF_8));
263241
request.getHeaders().add("Authorization", "Basic " + token);
264242
return execution.execute(request, body);
265243
}

src/main/java/io/spring/issuebot/github/Issue.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,10 @@ public class Issue {
5656
* @param pullRequest details of the pull request (if this issue is a pull request)
5757
*/
5858
@JsonCreator
59-
public Issue(@JsonProperty("url") String url,
60-
@JsonProperty("comments_url") String commentsUrl,
61-
@JsonProperty("events_url") String eventsUrl,
62-
@JsonProperty("labels_url") String labelsUrl, @JsonProperty("user") User user,
63-
@JsonProperty("labels") List<Label> labels,
64-
@JsonProperty("milestone") Milestone milestone,
65-
@JsonProperty("pull_request") PullRequest pullRequest) {
59+
public Issue(@JsonProperty("url") String url, @JsonProperty("comments_url") String commentsUrl,
60+
@JsonProperty("events_url") String eventsUrl, @JsonProperty("labels_url") String labelsUrl,
61+
@JsonProperty("user") User user, @JsonProperty("labels") List<Label> labels,
62+
@JsonProperty("milestone") Milestone milestone, @JsonProperty("pull_request") PullRequest pullRequest) {
6663
this.url = url;
6764
this.commentsUrl = commentsUrl;
6865
this.eventsUrl = eventsUrl;

0 commit comments

Comments
 (0)