Skip to content

Commit 89acc2c

Browse files
committed
Create aggregator issue in Spring Data Build for all-repositories ticket creation.
Closes #87
1 parent 35439d5 commit 89acc2c

File tree

4 files changed

+59
-22
lines changed

4 files changed

+59
-22
lines changed

src/main/java/org/springframework/data/release/issues/IssueTracker.java

+19-3
Original file line numberDiff line numberDiff line change
@@ -116,15 +116,31 @@ public interface IssueTracker extends Plugin<SupportedProject> {
116116
void createReleaseTicket(ModuleIteration module);
117117

118118
/**
119-
* Creates a ticket for the given {@link ModuleIteration} and summary {@code text}.
119+
* Creates a ticket for the given {@link ModuleIteration} and summary {@code subject}.
120120
*
121121
* @param module must not be {@literal null}.
122-
* @param text the text to use.
122+
* @param subject the subject to use.
123123
* @param ticketType the ticket type.
124124
* @param assignToCurrentUser
125125
* @return the created ticket.
126126
*/
127-
Ticket createTicket(ModuleIteration module, String text, TicketType ticketType, boolean assignToCurrentUser);
127+
default Ticket createTicket(ModuleIteration module, String subject, TicketType ticketType,
128+
boolean assignToCurrentUser) {
129+
return createTicket(module, subject, "", ticketType, assignToCurrentUser);
130+
}
131+
132+
/**
133+
* Creates a ticket for the given {@link ModuleIteration} and summary {@code subject}.
134+
*
135+
* @param module must not be {@literal null}.
136+
* @param subject the subject to use.
137+
* @param description the description to use.
138+
* @param ticketType the ticket type.
139+
* @param assignToCurrentUser
140+
* @return the created ticket.
141+
*/
142+
Ticket createTicket(ModuleIteration module, String subject, String description, TicketType ticketType,
143+
boolean assignToCurrentUser);
128144

129145
/**
130146
* Assigns the ticket to the current user.

src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java

+29-10
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import lombok.RequiredArgsConstructor;
2323
import lombok.experimental.FieldDefaults;
2424

25+
import java.util.ArrayList;
26+
import java.util.List;
2527
import java.util.concurrent.Executor;
2628
import java.util.function.Predicate;
2729
import java.util.stream.Collectors;
@@ -132,12 +134,31 @@ public String createReleaseTickets(@CliOption(key = "", mandatory = true) TrainI
132134

133135
@CliCommand(value = "tracker create tickets")
134136
public String createTickets(@CliOption(key = "iteration", mandatory = true) TrainIteration iteration,
135-
@CliOption(key = "text", mandatory = true) String text) {
137+
@CliOption(key = "subject", mandatory = true) String subject,
138+
@CliOption(key = "description", mandatory = false) String description) {
136139

137-
return iteration.stream().//
138-
map(module -> getTrackerFor(module).createTicket(module, text, IssueTracker.TicketType.Task, false))
139-
.collect(Tickets.toTicketsCollector())
140-
.toString();
140+
Predicate<ModuleIteration> isBuildProject = module -> module.getProject() == Projects.BUILD;
141+
142+
List<Ticket> tickets = iteration.stream() //
143+
.filter(isBuildProject.negate()) //
144+
.map(module -> getTrackerFor(module).createTicket(module, subject, IssueTracker.TicketType.Task, false))
145+
.collect(Collectors.toList());
146+
147+
StringBuilder body = new StringBuilder();
148+
149+
for (Ticket ticket : tickets) {
150+
body.append("- [ ] ").append(ticket.getUrl()).append("\n");
151+
}
152+
153+
ModuleIteration module = iteration.getModule(Projects.BUILD);
154+
Ticket buildTicket = getTrackerFor(module).createTicket(module, subject, body.toString(),
155+
IssueTracker.TicketType.Task, false);
156+
157+
List<Ticket> allTickets = new ArrayList<>();
158+
allTickets.add(buildTicket);
159+
allTickets.addAll(tickets);
160+
161+
return new Tickets(allTickets).toString();
141162
}
142163

143164
@CliCommand("tracker open-tickets")
@@ -169,11 +190,9 @@ private String getTickets(TrainIteration iteration, String moduleName, Predicate
169190
return getTicketsForProject(iteration, Projects.requiredByName(moduleName), ticketPredicate);
170191
}
171192

172-
return ExecutionUtils.runAndReturn(executor, iteration,
173-
moduleIteration -> {
174-
return getTicketsForProject(iteration, moduleIteration.getModule().getProject(), ticketPredicate);
175-
})
176-
.stream() //
193+
return ExecutionUtils.runAndReturn(executor, iteration, moduleIteration -> {
194+
return getTicketsForProject(iteration, moduleIteration.getModule().getProject(), ticketPredicate);
195+
}).stream() //
177196
.filter(StringUtils::hasText) //
178197
.collect(Collectors.joining("\n"));
179198
}

src/main/java/org/springframework/data/release/issues/github/GitHub.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -259,27 +259,29 @@ public void createReleaseTicket(ModuleIteration moduleIteration) {
259259

260260
logger.log(moduleIteration, "Creating release ticket…");
261261

262-
doCreateTicket(moduleIteration, Tracker.releaseTicketSummary(moduleIteration), TicketType.Task, false);
262+
doCreateTicket(moduleIteration, Tracker.releaseTicketSummary(moduleIteration), null, TicketType.Task, false);
263263
}
264264

265265
@Override
266-
public Ticket createTicket(ModuleIteration moduleIteration, String text, TicketType ticketType,
266+
public Ticket createTicket(ModuleIteration moduleIteration, String subject, String description, TicketType ticketType,
267267
boolean assignToCurrentUser) {
268268

269269
logger.log(moduleIteration, "Creating ticket…");
270270

271-
return doCreateTicket(moduleIteration, text, ticketType, assignToCurrentUser);
271+
return doCreateTicket(moduleIteration, subject, description, ticketType, assignToCurrentUser);
272272
}
273273

274-
private Ticket doCreateTicket(ModuleIteration moduleIteration, String text, TicketType ticketType,
274+
private Ticket doCreateTicket(ModuleIteration moduleIteration, String subject, String description,
275+
TicketType ticketType,
275276
boolean assignToCurrentUser) {
276277

277278
String repositoryName = GitProject.of(moduleIteration).getRepositoryName();
278279
Milestone milestone = getMilestone(moduleIteration);
279280

280281
Label label = TICKET_LABELS.get(ticketType);
281282

282-
GitHubWriteIssue gitHubIssue = GitHubWriteIssue.of(text, milestone).withLabel(label.getName());
283+
GitHubWriteIssue gitHubIssue = GitHubWriteIssue.of(subject, milestone).withBody(description)
284+
.withLabel(label.getName());
283285

284286
if (assignToCurrentUser) {
285287
gitHubIssue = gitHubIssue.withAssignees(Collections.singletonList(properties.getUsername()));

src/main/java/org/springframework/data/release/issues/github/GitHubWriteIssue.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
@With
3838
class GitHubWriteIssue implements GitHubIssue {
3939

40-
String number, title, state;
40+
String number, title, body, state;
4141
List<Object> assignees;
4242
Long milestone;
4343
List<String> labels;
@@ -48,17 +48,17 @@ public String getUrl() {
4848
}
4949

5050
public static GitHubWriteIssue of(String title, Milestone milestone) {
51-
return new GitHubWriteIssue(null, title, null, null, milestone.getNumber(), null);
51+
return new GitHubWriteIssue(null, title, null, null, null, milestone.getNumber(), null);
5252
}
5353

5454
public static GitHubWriteIssue assignedTo(String username) {
5555

5656
Assert.hasText(username, "Username must not be null or empty!");
57-
return new GitHubWriteIssue(null, null, null, Collections.singletonList(username), null, null);
57+
return new GitHubWriteIssue(null, null, null, null, Collections.singletonList(username), null, null);
5858
}
5959

6060
public GitHubWriteIssue close() {
61-
return new GitHubWriteIssue(this.number, this.title, "closed", this.assignees, null, null);
61+
return new GitHubWriteIssue(this.number, this.title, "closed", null, this.assignees, null, null);
6262
}
6363

6464
public GitHubWriteIssue withLabel(String labelName) {

0 commit comments

Comments
 (0)