github-issue-tower-defence-management 1.153.5 → 1.154.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +187 -6
- package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
- package/bin/adapter/repositories/issue/RestIssueRepository.js +6 -0
- package/bin/adapter/repositories/issue/RestIssueRepository.js.map +1 -1
- package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js +10 -16
- package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js.map +1 -1
- package/bin/domain/usecases/IssueRejectionEvaluator.js +28 -11
- package/bin/domain/usecases/IssueRejectionEvaluator.js.map +1 -1
- package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js +15 -3
- package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +14 -0
- package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +252 -0
- package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +288 -6
- package/src/adapter/repositories/issue/RestIssueRepository.test.ts +19 -0
- package/src/adapter/repositories/issue/RestIssueRepository.ts +13 -0
- package/src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.test.ts +211 -200
- package/src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.ts +13 -18
- package/src/domain/usecases/IssueRejectionEvaluator.ts +49 -15
- package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.test.ts +154 -0
- package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts +33 -5
- package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +8 -0
- package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +9 -2
- package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
- package/types/adapter/repositories/issue/RestIssueRepository.d.ts +1 -0
- package/types/adapter/repositories/issue/RestIssueRepository.d.ts.map +1 -1
- package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts +2 -2
- package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts.map +1 -1
- package/types/domain/usecases/IssueRejectionEvaluator.d.ts +6 -1
- package/types/domain/usecases/IssueRejectionEvaluator.d.ts.map +1 -1
- package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts +1 -1
- package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts.map +1 -1
- package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts +3 -0
- package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts.map +1 -1
|
@@ -11,9 +11,10 @@ export class ConvertCheckboxToIssueInStoryIssueUseCase {
|
|
|
11
11
|
readonly issueRepository: Pick<
|
|
12
12
|
IssueRepository,
|
|
13
13
|
| 'createNewIssue'
|
|
14
|
-
| '
|
|
14
|
+
| 'updateIssueBody'
|
|
15
15
|
| 'updateStory'
|
|
16
16
|
| 'getIssueByUrl'
|
|
17
|
+
| 'getIssueBodyByUrl'
|
|
17
18
|
| 'addIssueToProject'
|
|
18
19
|
>,
|
|
19
20
|
) {}
|
|
@@ -62,25 +63,22 @@ export class ConvertCheckboxToIssueInStoryIssueUseCase {
|
|
|
62
63
|
if (noCheckboxWorkFollows && storyViewLinkAlreadyOnFirstLine) {
|
|
63
64
|
continue;
|
|
64
65
|
}
|
|
65
|
-
const
|
|
66
|
+
const freshStoryBody = await this.issueRepository.getIssueBodyByUrl(
|
|
66
67
|
storyIssue.url,
|
|
67
68
|
);
|
|
68
|
-
if (
|
|
69
|
+
if (freshStoryBody === null) {
|
|
69
70
|
console.warn(
|
|
70
71
|
`ConvertCheckboxToIssueInStoryIssueUseCase: story issue not found by URL (possibly deleted), skipping story. storyIssueUrl: ${storyIssue.url}`,
|
|
71
72
|
);
|
|
72
73
|
continue;
|
|
73
74
|
}
|
|
74
75
|
let newBody = this.bodyWithStoryViewLinkOnFirstLine(
|
|
75
|
-
|
|
76
|
+
freshStoryBody,
|
|
76
77
|
input.urlOfStoryView,
|
|
77
78
|
storyOption.name,
|
|
78
79
|
);
|
|
79
|
-
if (newBody !==
|
|
80
|
-
await this.issueRepository.
|
|
81
|
-
...freshStoryIssue,
|
|
82
|
-
body: newBody,
|
|
83
|
-
});
|
|
80
|
+
if (newBody !== freshStoryBody) {
|
|
81
|
+
await this.issueRepository.updateIssueBody(storyIssue, newBody);
|
|
84
82
|
}
|
|
85
83
|
if (iced || !input.createTaskFromStoryBodyCheckboxEnabled) {
|
|
86
84
|
continue;
|
|
@@ -93,26 +91,23 @@ export class ConvertCheckboxToIssueInStoryIssueUseCase {
|
|
|
93
91
|
for (const checkboxText of checkboxTextsNotCreatedIssue) {
|
|
94
92
|
const issueTitle = checkboxText.replace(
|
|
95
93
|
'STORYNAME',
|
|
96
|
-
`${storyOption.name} #${
|
|
94
|
+
`${storyOption.name} #${storyIssue.number}`,
|
|
97
95
|
);
|
|
98
|
-
const newIssueBody = `- Parent issue: ${
|
|
96
|
+
const newIssueBody = `- Parent issue: ${storyIssue.url}`;
|
|
99
97
|
const newIssueNumber = await this.issueRepository.createNewIssue(
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
storyIssue.org,
|
|
99
|
+
storyIssue.repo,
|
|
102
100
|
issueTitle,
|
|
103
101
|
newIssueBody,
|
|
104
102
|
[input.manager],
|
|
105
103
|
[],
|
|
106
104
|
);
|
|
107
|
-
const newIssueUrl = `https://github.com/${
|
|
105
|
+
const newIssueUrl = `https://github.com/${storyIssue.org}/${storyIssue.repo}/issues/${newIssueNumber}`;
|
|
108
106
|
newBody = newBody.replace(
|
|
109
107
|
`- [ ] ${checkboxText}`,
|
|
110
108
|
`- [ ] ${newIssueUrl}`,
|
|
111
109
|
);
|
|
112
|
-
await this.issueRepository.
|
|
113
|
-
...freshStoryIssue,
|
|
114
|
-
body: newBody,
|
|
115
|
-
});
|
|
110
|
+
await this.issueRepository.updateIssueBody(storyIssue, newBody);
|
|
116
111
|
await this.issueRepository.addIssueToProject(
|
|
117
112
|
input.project,
|
|
118
113
|
newIssueUrl,
|
|
@@ -27,6 +27,12 @@ export type EvaluateOptions = {
|
|
|
27
27
|
// closingIssueReferenceUrls, eliminating the per-issue timeline fan-out.
|
|
28
28
|
// When null or undefined, behaviour is unchanged: findRelatedOpenPRs runs.
|
|
29
29
|
relatedOpenPrUrls?: string[] | null;
|
|
30
|
+
// Pull request states the caller already resolved in one batched query for
|
|
31
|
+
// the whole cycle. A URL present as a key is taken from here and costs no
|
|
32
|
+
// further request; a URL absent from the map falls back to the per-URL
|
|
33
|
+
// getOpenPullRequest call, which keeps the transient-failure handling that
|
|
34
|
+
// distinguishes an unknown state from an absent pull request.
|
|
35
|
+
resolvedOpenPrByUrl?: ReadonlyMap<string, RelatedPullRequest | null> | null;
|
|
30
36
|
};
|
|
31
37
|
|
|
32
38
|
export class IssueRejectionEvaluator {
|
|
@@ -53,26 +59,16 @@ export class IssueRejectionEvaluator {
|
|
|
53
59
|
const rejections: { type: PrRejectedReasonType; detail: string }[] = [];
|
|
54
60
|
let approvedPrUrl: string | null = null;
|
|
55
61
|
|
|
56
|
-
const categoryLabels = issue.labels.filter((label) =>
|
|
57
|
-
label.startsWith('category:'),
|
|
58
|
-
);
|
|
59
|
-
const hasLlmAgentLabel = issue.labels.some(
|
|
60
|
-
(l) => l === 'llm-agent' || l.startsWith('llm-agent:'),
|
|
61
|
-
);
|
|
62
|
-
const hasLabelNotRequiringPullRequest = issue.labels.some((label) =>
|
|
63
|
-
labelsNotRequiringPullRequest.includes(label),
|
|
64
|
-
);
|
|
65
|
-
|
|
66
62
|
if (
|
|
67
|
-
|
|
68
|
-
!hasLabelNotRequiringPullRequest &&
|
|
69
|
-
this.isPullRequestRequiredByBody(issue.body) &&
|
|
70
|
-
(categoryLabels.length <= 0 || categoryLabels.includes('category:e2e'))
|
|
63
|
+
this.requiresPullRequestEvaluation(issue, labelsNotRequiringPullRequest)
|
|
71
64
|
) {
|
|
72
65
|
let prsToCheck: RelatedPullRequest[];
|
|
73
66
|
let anyPrResolutionFailed = false;
|
|
74
67
|
if (issue.isPr) {
|
|
75
|
-
const resolved = await this.resolveOpenPrsForPrItem(
|
|
68
|
+
const resolved = await this.resolveOpenPrsForPrItem(
|
|
69
|
+
issue.url,
|
|
70
|
+
options.resolvedOpenPrByUrl ?? null,
|
|
71
|
+
);
|
|
76
72
|
if (resolved === null) {
|
|
77
73
|
// getOpenPullRequest failed transiently: the PR's state is unknown
|
|
78
74
|
// for this cycle, so skip it without emitting any rejection.
|
|
@@ -82,6 +78,7 @@ export class IssueRejectionEvaluator {
|
|
|
82
78
|
} else if (options.relatedOpenPrUrls != null) {
|
|
83
79
|
const resolved = await this.resolveOpenPrsFromUrls(
|
|
84
80
|
options.relatedOpenPrUrls,
|
|
81
|
+
options.resolvedOpenPrByUrl ?? null,
|
|
85
82
|
);
|
|
86
83
|
prsToCheck = resolved.prs;
|
|
87
84
|
anyPrResolutionFailed = resolved.anyResolutionFailed;
|
|
@@ -185,12 +182,41 @@ export class IssueRejectionEvaluator {
|
|
|
185
182
|
return { rejections, approvedPrUrl };
|
|
186
183
|
};
|
|
187
184
|
|
|
185
|
+
// Whether this item's pull requests are looked at at all. A caller that
|
|
186
|
+
// resolves pull request state in one batch for a whole cycle asks this first,
|
|
187
|
+
// so the batch covers exactly the items evaluate would have resolved.
|
|
188
|
+
requiresPullRequestEvaluation = (
|
|
189
|
+
issue: { labels: string[]; body?: string | null },
|
|
190
|
+
labelsNotRequiringPullRequest: string[] = [],
|
|
191
|
+
): boolean => {
|
|
192
|
+
const categoryLabels = issue.labels.filter((label) =>
|
|
193
|
+
label.startsWith('category:'),
|
|
194
|
+
);
|
|
195
|
+
const hasLlmAgentLabel = issue.labels.some(
|
|
196
|
+
(l) => l === 'llm-agent' || l.startsWith('llm-agent:'),
|
|
197
|
+
);
|
|
198
|
+
const hasLabelNotRequiringPullRequest = issue.labels.some((label) =>
|
|
199
|
+
labelsNotRequiringPullRequest.includes(label),
|
|
200
|
+
);
|
|
201
|
+
return (
|
|
202
|
+
!hasLlmAgentLabel &&
|
|
203
|
+
!hasLabelNotRequiringPullRequest &&
|
|
204
|
+
this.isPullRequestRequiredByBody(issue.body) &&
|
|
205
|
+
(categoryLabels.length <= 0 || categoryLabels.includes('category:e2e'))
|
|
206
|
+
);
|
|
207
|
+
};
|
|
208
|
+
|
|
188
209
|
// Returns null when getOpenPullRequest throws (e.g. a transient GitHub
|
|
189
210
|
// GraphQL server error): the PR's state is unknown for this cycle and the
|
|
190
211
|
// caller skips it instead of letting the error abort the schedule cycle.
|
|
191
212
|
private resolveOpenPrsForPrItem = async (
|
|
192
213
|
prUrl: string,
|
|
214
|
+
resolvedOpenPrByUrl: ReadonlyMap<string, RelatedPullRequest | null> | null,
|
|
193
215
|
): Promise<RelatedPullRequest[] | null> => {
|
|
216
|
+
if (resolvedOpenPrByUrl?.has(prUrl)) {
|
|
217
|
+
const alreadyResolved = resolvedOpenPrByUrl.get(prUrl) ?? null;
|
|
218
|
+
return alreadyResolved === null ? [] : [alreadyResolved];
|
|
219
|
+
}
|
|
194
220
|
let pr: RelatedPullRequest | null;
|
|
195
221
|
try {
|
|
196
222
|
pr = await this.issueRepository.getOpenPullRequest(prUrl);
|
|
@@ -220,11 +246,19 @@ export class IssueRejectionEvaluator {
|
|
|
220
246
|
// PULL_REQUEST_NOT_FOUND.
|
|
221
247
|
private resolveOpenPrsFromUrls = async (
|
|
222
248
|
prUrls: string[],
|
|
249
|
+
resolvedOpenPrByUrl: ReadonlyMap<string, RelatedPullRequest | null> | null,
|
|
223
250
|
): Promise<{ prs: RelatedPullRequest[]; anyResolutionFailed: boolean }> => {
|
|
224
251
|
const uniquePrUrls = Array.from(new Set(prUrls));
|
|
225
252
|
const resolvedPrs: RelatedPullRequest[] = [];
|
|
226
253
|
let anyResolutionFailed = false;
|
|
227
254
|
for (const prUrl of uniquePrUrls) {
|
|
255
|
+
if (resolvedOpenPrByUrl?.has(prUrl)) {
|
|
256
|
+
const alreadyResolved = resolvedOpenPrByUrl.get(prUrl) ?? null;
|
|
257
|
+
if (alreadyResolved !== null) {
|
|
258
|
+
resolvedPrs.push(alreadyResolved);
|
|
259
|
+
}
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
228
262
|
let pr: RelatedPullRequest | null;
|
|
229
263
|
try {
|
|
230
264
|
pr = await this.issueRepository.getOpenPullRequest(prUrl);
|
|
@@ -160,6 +160,7 @@ describe('RevertNotReadyReviewQueueIssueUseCase', () => {
|
|
|
160
160
|
updateStory: jest.Mock;
|
|
161
161
|
findRelatedOpenPRs: jest.Mock;
|
|
162
162
|
getOpenPullRequest: jest.Mock;
|
|
163
|
+
getOpenPullRequests: jest.Mock;
|
|
163
164
|
getPullRequestChangedFilePaths: jest.Mock;
|
|
164
165
|
approvePullRequest: jest.Mock;
|
|
165
166
|
requestChangesWithInlineComment: jest.Mock;
|
|
@@ -191,6 +192,7 @@ describe('RevertNotReadyReviewQueueIssueUseCase', () => {
|
|
|
191
192
|
updateStory: jest.fn().mockResolvedValue(undefined),
|
|
192
193
|
findRelatedOpenPRs: jest.fn().mockResolvedValue([]),
|
|
193
194
|
getOpenPullRequest: jest.fn().mockResolvedValue(null),
|
|
195
|
+
getOpenPullRequests: jest.fn().mockResolvedValue(new Map()),
|
|
194
196
|
getPullRequestChangedFilePaths: jest.fn().mockResolvedValue([]),
|
|
195
197
|
approvePullRequest: jest.fn().mockResolvedValue(undefined),
|
|
196
198
|
requestChangesWithInlineComment: jest.fn().mockResolvedValue(undefined),
|
|
@@ -2200,4 +2202,156 @@ describe('RevertNotReadyReviewQueueIssueUseCase', () => {
|
|
|
2200
2202
|
);
|
|
2201
2203
|
});
|
|
2202
2204
|
});
|
|
2205
|
+
|
|
2206
|
+
describe('batched pull request state resolution', () => {
|
|
2207
|
+
const projectUrl = 'https://github.com/users/user/projects/1';
|
|
2208
|
+
|
|
2209
|
+
const buildAwaitingQualityCheckBoard = (
|
|
2210
|
+
issueCount: number,
|
|
2211
|
+
): { boardIssues: Issue[]; relatedPrs: RelatedPrLike[] } => {
|
|
2212
|
+
const boardIssues: Issue[] = [];
|
|
2213
|
+
const relatedPrs: RelatedPrLike[] = [];
|
|
2214
|
+
for (let index = 0; index < issueCount; index += 1) {
|
|
2215
|
+
const issueUrl = `https://github.com/user/repo/issues/${200 + index}`;
|
|
2216
|
+
const prUrl = `https://github.com/user/repo/pull/${300 + index}`;
|
|
2217
|
+
boardIssues.push(
|
|
2218
|
+
createMockIssue({
|
|
2219
|
+
url: issueUrl,
|
|
2220
|
+
number: 200 + index,
|
|
2221
|
+
itemId: `item-issue-${index}`,
|
|
2222
|
+
}),
|
|
2223
|
+
);
|
|
2224
|
+
boardIssues.push(
|
|
2225
|
+
createMockPullRequest({
|
|
2226
|
+
url: prUrl,
|
|
2227
|
+
number: 300 + index,
|
|
2228
|
+
itemId: `item-pr-${index}`,
|
|
2229
|
+
status: 'In Progress',
|
|
2230
|
+
closingIssueReferenceUrls: [issueUrl],
|
|
2231
|
+
}),
|
|
2232
|
+
);
|
|
2233
|
+
relatedPrs.push(createReadyPr(prUrl));
|
|
2234
|
+
}
|
|
2235
|
+
return { boardIssues, relatedPrs };
|
|
2236
|
+
};
|
|
2237
|
+
|
|
2238
|
+
const resolveBatchFrom = (relatedPrs: RelatedPrLike[]): void => {
|
|
2239
|
+
const prByUrl = new Map(relatedPrs.map((pr) => [pr.url, pr]));
|
|
2240
|
+
mockIssueRepository.getOpenPullRequests.mockImplementation(
|
|
2241
|
+
(prUrls: string[]) =>
|
|
2242
|
+
Promise.resolve(
|
|
2243
|
+
new Map(prUrls.map((prUrl) => [prUrl, prByUrl.get(prUrl) ?? null])),
|
|
2244
|
+
),
|
|
2245
|
+
);
|
|
2246
|
+
};
|
|
2247
|
+
|
|
2248
|
+
it('resolves every related pull request in one batched call and makes no per-pull-request call', async () => {
|
|
2249
|
+
const { boardIssues, relatedPrs } = buildAwaitingQualityCheckBoard(3);
|
|
2250
|
+
mockIssueRepository.getAllIssues.mockResolvedValue({
|
|
2251
|
+
project: mockProject,
|
|
2252
|
+
issues: boardIssues,
|
|
2253
|
+
cacheUsed: false,
|
|
2254
|
+
});
|
|
2255
|
+
resolveBatchFrom(relatedPrs);
|
|
2256
|
+
|
|
2257
|
+
await useCase.run({
|
|
2258
|
+
projectUrl,
|
|
2259
|
+
manager: 'manager-user',
|
|
2260
|
+
allowedIssueAuthors: ['owner'],
|
|
2261
|
+
});
|
|
2262
|
+
|
|
2263
|
+
expect(mockIssueRepository.getOpenPullRequests).toHaveBeenCalledTimes(1);
|
|
2264
|
+
expect(mockIssueRepository.getOpenPullRequests).toHaveBeenCalledWith(
|
|
2265
|
+
relatedPrs.map((pr) => pr.url),
|
|
2266
|
+
);
|
|
2267
|
+
expect(mockIssueRepository.getOpenPullRequest).not.toHaveBeenCalled();
|
|
2268
|
+
expect(mockIssueRepository.updateStatus).not.toHaveBeenCalled();
|
|
2269
|
+
});
|
|
2270
|
+
|
|
2271
|
+
it('includes the unread pull requests in the same batched call', async () => {
|
|
2272
|
+
const unreadPrUrl = 'https://github.com/user/repo/pull/400';
|
|
2273
|
+
const { boardIssues, relatedPrs } = buildAwaitingQualityCheckBoard(1);
|
|
2274
|
+
mockIssueRepository.getAllIssues.mockResolvedValue({
|
|
2275
|
+
project: mockProject,
|
|
2276
|
+
issues: [
|
|
2277
|
+
...boardIssues,
|
|
2278
|
+
createMockPullRequest({
|
|
2279
|
+
url: unreadPrUrl,
|
|
2280
|
+
number: 400,
|
|
2281
|
+
itemId: 'item-pr-unread',
|
|
2282
|
+
}),
|
|
2283
|
+
],
|
|
2284
|
+
cacheUsed: false,
|
|
2285
|
+
});
|
|
2286
|
+
resolveBatchFrom([...relatedPrs, createReadyPr(unreadPrUrl)]);
|
|
2287
|
+
|
|
2288
|
+
await useCase.run({
|
|
2289
|
+
projectUrl,
|
|
2290
|
+
manager: 'manager-user',
|
|
2291
|
+
allowedIssueAuthors: ['owner'],
|
|
2292
|
+
});
|
|
2293
|
+
|
|
2294
|
+
expect(mockIssueRepository.getOpenPullRequests).toHaveBeenCalledTimes(1);
|
|
2295
|
+
expect(mockIssueRepository.getOpenPullRequests).toHaveBeenCalledWith([
|
|
2296
|
+
relatedPrs[0].url,
|
|
2297
|
+
unreadPrUrl,
|
|
2298
|
+
]);
|
|
2299
|
+
expect(mockIssueRepository.getOpenPullRequest).not.toHaveBeenCalled();
|
|
2300
|
+
});
|
|
2301
|
+
|
|
2302
|
+
it('falls back to the single pull request query only for a url the batch left unresolved', async () => {
|
|
2303
|
+
const { boardIssues, relatedPrs } = buildAwaitingQualityCheckBoard(2);
|
|
2304
|
+
const resolvedPr = relatedPrs[0];
|
|
2305
|
+
const omittedPr = relatedPrs[1];
|
|
2306
|
+
mockIssueRepository.getAllIssues.mockResolvedValue({
|
|
2307
|
+
project: mockProject,
|
|
2308
|
+
issues: boardIssues,
|
|
2309
|
+
cacheUsed: false,
|
|
2310
|
+
});
|
|
2311
|
+
mockIssueRepository.getOpenPullRequests.mockResolvedValue(
|
|
2312
|
+
new Map([[resolvedPr.url, resolvedPr]]),
|
|
2313
|
+
);
|
|
2314
|
+
mockIssueRepository.getOpenPullRequest.mockImplementation(
|
|
2315
|
+
(prUrl: string) =>
|
|
2316
|
+
Promise.resolve(prUrl === omittedPr.url ? omittedPr : null),
|
|
2317
|
+
);
|
|
2318
|
+
|
|
2319
|
+
await useCase.run({
|
|
2320
|
+
projectUrl,
|
|
2321
|
+
manager: 'manager-user',
|
|
2322
|
+
allowedIssueAuthors: ['owner'],
|
|
2323
|
+
});
|
|
2324
|
+
|
|
2325
|
+
expect(mockIssueRepository.getOpenPullRequest).toHaveBeenCalledTimes(1);
|
|
2326
|
+
expect(mockIssueRepository.getOpenPullRequest).toHaveBeenCalledWith(
|
|
2327
|
+
omittedPr.url,
|
|
2328
|
+
);
|
|
2329
|
+
expect(mockIssueRepository.updateStatus).not.toHaveBeenCalled();
|
|
2330
|
+
});
|
|
2331
|
+
|
|
2332
|
+
it('reverts the issue whose pull request the batch resolved as absent', async () => {
|
|
2333
|
+
const { boardIssues, relatedPrs } = buildAwaitingQualityCheckBoard(1);
|
|
2334
|
+
mockIssueRepository.getAllIssues.mockResolvedValue({
|
|
2335
|
+
project: mockProject,
|
|
2336
|
+
issues: boardIssues,
|
|
2337
|
+
cacheUsed: false,
|
|
2338
|
+
});
|
|
2339
|
+
mockIssueRepository.getOpenPullRequests.mockResolvedValue(
|
|
2340
|
+
new Map([[relatedPrs[0].url, null]]),
|
|
2341
|
+
);
|
|
2342
|
+
|
|
2343
|
+
await useCase.run({
|
|
2344
|
+
projectUrl,
|
|
2345
|
+
manager: 'manager-user',
|
|
2346
|
+
allowedIssueAuthors: ['owner'],
|
|
2347
|
+
});
|
|
2348
|
+
|
|
2349
|
+
expect(mockIssueRepository.getOpenPullRequest).not.toHaveBeenCalled();
|
|
2350
|
+
expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
|
|
2351
|
+
mockProject,
|
|
2352
|
+
expect.objectContaining({ url: boardIssues[0].url }),
|
|
2353
|
+
'awaiting-workspace-id',
|
|
2354
|
+
);
|
|
2355
|
+
});
|
|
2356
|
+
});
|
|
2203
2357
|
});
|
|
@@ -42,6 +42,7 @@ export class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
42
42
|
| 'updateStory'
|
|
43
43
|
| 'findRelatedOpenPRs'
|
|
44
44
|
| 'getOpenPullRequest'
|
|
45
|
+
| 'getOpenPullRequests'
|
|
45
46
|
| 'getPullRequestChangedFilePaths'
|
|
46
47
|
| 'approvePullRequest'
|
|
47
48
|
| 'requestChangesWithInlineComment'
|
|
@@ -95,6 +96,34 @@ export class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
95
96
|
const relatedOpenPrUrlsByIssueUrl =
|
|
96
97
|
this.buildRelatedOpenPrUrlsByIssueUrl(issues);
|
|
97
98
|
|
|
99
|
+
const unreadPullRequests = issues.filter(
|
|
100
|
+
(issue) => issue.status === DEFAULT_STATUS_NAME && issue.isPr,
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
const labelsNotRequiringPullRequest =
|
|
104
|
+
resolveLabelsNotRequiringPullRequest(params);
|
|
105
|
+
const willBeEvaluated = (item: Issue): boolean =>
|
|
106
|
+
isAuthorAuthorizedForAutoStatusCheck(item.author, allowedIssueAuthors) &&
|
|
107
|
+
this.issueRejectionEvaluator.requiresPullRequestEvaluation(
|
|
108
|
+
item,
|
|
109
|
+
labelsNotRequiringPullRequest,
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
const resolvedOpenPrByUrl = await this.issueRepository.getOpenPullRequests(
|
|
113
|
+
Array.from(
|
|
114
|
+
new Set([
|
|
115
|
+
...awaitingQualityCheckIssues
|
|
116
|
+
.filter(willBeEvaluated)
|
|
117
|
+
.flatMap(
|
|
118
|
+
(issue) => relatedOpenPrUrlsByIssueUrl.get(issue.url) ?? [],
|
|
119
|
+
),
|
|
120
|
+
...unreadPullRequests
|
|
121
|
+
.filter(willBeEvaluated)
|
|
122
|
+
.map((pullRequest) => pullRequest.url),
|
|
123
|
+
]),
|
|
124
|
+
),
|
|
125
|
+
);
|
|
126
|
+
|
|
98
127
|
for (const issue of awaitingQualityCheckIssues) {
|
|
99
128
|
const hasLlmAgentLabel = issue.labels.some(
|
|
100
129
|
(l) => l === 'llm-agent' || l.startsWith('llm-agent:'),
|
|
@@ -113,10 +142,11 @@ export class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
113
142
|
const { rejections, approvedPrUrl } =
|
|
114
143
|
await this.issueRejectionEvaluator.evaluate(
|
|
115
144
|
issue,
|
|
116
|
-
|
|
145
|
+
labelsNotRequiringPullRequest,
|
|
117
146
|
{
|
|
118
147
|
relatedOpenPrUrls:
|
|
119
148
|
relatedOpenPrUrlsByIssueUrl.get(issue.url) ?? null,
|
|
149
|
+
resolvedOpenPrByUrl,
|
|
120
150
|
},
|
|
121
151
|
);
|
|
122
152
|
if (
|
|
@@ -173,9 +203,6 @@ export class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
173
203
|
}
|
|
174
204
|
|
|
175
205
|
const projectStory = project.story;
|
|
176
|
-
const unreadPullRequests = issues.filter(
|
|
177
|
-
(issue) => issue.status === DEFAULT_STATUS_NAME && issue.isPr,
|
|
178
|
-
);
|
|
179
206
|
|
|
180
207
|
for (const pullRequest of unreadPullRequests) {
|
|
181
208
|
const hasLlmAgentLabel = pullRequest.labels.some(
|
|
@@ -197,7 +224,8 @@ export class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
197
224
|
try {
|
|
198
225
|
const { rejections } = await this.issueRejectionEvaluator.evaluate(
|
|
199
226
|
pullRequest,
|
|
200
|
-
|
|
227
|
+
labelsNotRequiringPullRequest,
|
|
228
|
+
{ resolvedOpenPrByUrl },
|
|
201
229
|
);
|
|
202
230
|
if (rejections.length > 0) {
|
|
203
231
|
if (!pullRequest.assignees.includes(params.manager)) {
|
|
@@ -66,6 +66,7 @@ export interface IssueRepository {
|
|
|
66
66
|
projectId: Project['id'],
|
|
67
67
|
) => Promise<{ issues: Issue[]; project: Project; cacheUsed: boolean }>;
|
|
68
68
|
getIssueByUrl: (url: string) => Promise<Issue | null>;
|
|
69
|
+
getIssueBodyByUrl: (url: string) => Promise<string | null>;
|
|
69
70
|
createNewIssue: (
|
|
70
71
|
org: string,
|
|
71
72
|
repo: string,
|
|
@@ -90,6 +91,10 @@ export interface IssueRepository {
|
|
|
90
91
|
}[]
|
|
91
92
|
>;
|
|
92
93
|
updateIssue: (issue: Issue) => Promise<void>;
|
|
94
|
+
updateIssueBody: (
|
|
95
|
+
issue: Pick<Issue, 'org' | 'repo' | 'number'>,
|
|
96
|
+
body: string,
|
|
97
|
+
) => Promise<void>;
|
|
93
98
|
updateNextActionDate: (
|
|
94
99
|
issueUrl: string,
|
|
95
100
|
project: Project,
|
|
@@ -136,6 +141,9 @@ export interface IssueRepository {
|
|
|
136
141
|
update: (issue: Issue, project: Project) => Promise<void>;
|
|
137
142
|
findRelatedOpenPRs: (issueUrl: string) => Promise<RelatedPullRequest[]>;
|
|
138
143
|
getOpenPullRequest: (prUrl: string) => Promise<RelatedPullRequest | null>;
|
|
144
|
+
getOpenPullRequests: (
|
|
145
|
+
prUrls: string[],
|
|
146
|
+
) => Promise<Map<string, RelatedPullRequest | null>>;
|
|
139
147
|
getPullRequestChangedFilePaths: (prUrl: string) => Promise<string[]>;
|
|
140
148
|
approvePullRequest: (prUrl: string) => Promise<void>;
|
|
141
149
|
requestChangesWithInlineComment: (
|
|
@@ -18,7 +18,7 @@ export declare const INCREMENTAL_FETCH_SKEW_BUFFER_MS: number;
|
|
|
18
18
|
export declare const REQUIRED_CHECKS_CACHE_TTL_MS: number;
|
|
19
19
|
export declare class ApiV3CheerioRestIssueRepository extends BaseGitHubRepository implements IssueRepository {
|
|
20
20
|
readonly apiV3IssueRepository: Pick<ApiV3IssueRepository, 'searchIssue'>;
|
|
21
|
-
readonly restIssueRepository: Pick<RestIssueRepository, 'createNewIssue' | 'updateIssue' | 'createComment' | 'getIssue' | 'updateLabels' | 'removeLabel' | 'updateAssigneeList' | 'searchIssues'>;
|
|
21
|
+
readonly restIssueRepository: Pick<RestIssueRepository, 'createNewIssue' | 'updateIssue' | 'updateIssueBody' | 'createComment' | 'getIssue' | 'updateLabels' | 'removeLabel' | 'updateAssigneeList' | 'searchIssues'>;
|
|
22
22
|
readonly graphqlProjectItemRepository: Pick<GraphqlProjectItemRepository, 'fetchProjectItems' | 'fetchProjectItemsLight' | 'fetchProjectItemsByIds' | 'fetchProjectItemByUrl' | 'updateProjectField' | 'clearProjectField' | 'updateProjectTextField' | 'addIssueToProject'>;
|
|
23
23
|
readonly localStorageCacheRepository: Pick<LocalStorageCacheRepository, 'getSingle' | 'setSingle'>;
|
|
24
24
|
readonly projectRepository: Pick<ProjectRepository, 'getProject'>;
|
|
@@ -26,7 +26,7 @@ export declare class ApiV3CheerioRestIssueRepository extends BaseGitHubRepositor
|
|
|
26
26
|
readonly localStorageRepository: LocalStorageRepository;
|
|
27
27
|
readonly ghToken: string;
|
|
28
28
|
readonly sleep: Sleep;
|
|
29
|
-
constructor(apiV3IssueRepository: Pick<ApiV3IssueRepository, 'searchIssue'>, restIssueRepository: Pick<RestIssueRepository, 'createNewIssue' | 'updateIssue' | 'createComment' | 'getIssue' | 'updateLabels' | 'removeLabel' | 'updateAssigneeList' | 'searchIssues'>, graphqlProjectItemRepository: Pick<GraphqlProjectItemRepository, 'fetchProjectItems' | 'fetchProjectItemsLight' | 'fetchProjectItemsByIds' | 'fetchProjectItemByUrl' | 'updateProjectField' | 'clearProjectField' | 'updateProjectTextField' | 'addIssueToProject'>, localStorageCacheRepository: Pick<LocalStorageCacheRepository, 'getSingle' | 'setSingle'>, projectRepository: Pick<ProjectRepository, 'getProject'>, dateRepository: DateRepository, localStorageRepository: LocalStorageRepository, ghToken?: string, sleep?: Sleep);
|
|
29
|
+
constructor(apiV3IssueRepository: Pick<ApiV3IssueRepository, 'searchIssue'>, restIssueRepository: Pick<RestIssueRepository, 'createNewIssue' | 'updateIssue' | 'updateIssueBody' | 'createComment' | 'getIssue' | 'updateLabels' | 'removeLabel' | 'updateAssigneeList' | 'searchIssues'>, graphqlProjectItemRepository: Pick<GraphqlProjectItemRepository, 'fetchProjectItems' | 'fetchProjectItemsLight' | 'fetchProjectItemsByIds' | 'fetchProjectItemByUrl' | 'updateProjectField' | 'clearProjectField' | 'updateProjectTextField' | 'addIssueToProject'>, localStorageCacheRepository: Pick<LocalStorageCacheRepository, 'getSingle' | 'setSingle'>, projectRepository: Pick<ProjectRepository, 'getProject'>, dateRepository: DateRepository, localStorageRepository: LocalStorageRepository, ghToken?: string, sleep?: Sleep);
|
|
30
30
|
private readonly projectIssuesCacheRepository;
|
|
31
31
|
private readonly getAllIssuesRefreshMemo;
|
|
32
32
|
private readonly lastIssuesFetchedAtByProjectId;
|
|
@@ -59,6 +59,7 @@ export declare class ApiV3CheerioRestIssueRepository extends BaseGitHubRepositor
|
|
|
59
59
|
number: string;
|
|
60
60
|
}[]>;
|
|
61
61
|
updateIssue: (issue: Issue) => Promise<void>;
|
|
62
|
+
updateIssueBody: (issue: Pick<Issue, "org" | "repo" | "number">, body: string) => Promise<void>;
|
|
62
63
|
getIssueByUrl: (url: string) => Promise<Issue | null>;
|
|
63
64
|
addIssueToProject: (project: Project, issueUrl: string) => Promise<void>;
|
|
64
65
|
setDependedIssueUrl: (prUrl: string, project: Project, issueUrl: string) => Promise<void>;
|
|
@@ -91,6 +92,9 @@ export declare class ApiV3CheerioRestIssueRepository extends BaseGitHubRepositor
|
|
|
91
92
|
getAllOpened: (project: Project) => Promise<Issue[]>;
|
|
92
93
|
getStoryObjectMap: (project: Project) => Promise<StoryObjectMap>;
|
|
93
94
|
getOpenPullRequest: (prUrl: string) => Promise<RelatedPullRequest | null>;
|
|
95
|
+
getOpenPullRequests: (prUrls: string[]) => Promise<Map<string, RelatedPullRequest | null>>;
|
|
96
|
+
private requireParsedPullRequest;
|
|
97
|
+
private fetchSlimPullRequestsInOneQuery;
|
|
94
98
|
closePullRequest: (prUrl: string) => Promise<void>;
|
|
95
99
|
closeIssueByUrl: (issueUrl: string, stateReason: "completed" | "not_planned") => Promise<void>;
|
|
96
100
|
getPullRequestChangedFilePaths: (prUrl: string) => Promise<string[]>;
|
|
@@ -103,7 +107,10 @@ export declare class ApiV3CheerioRestIssueRepository extends BaseGitHubRepositor
|
|
|
103
107
|
private formatGitHubErrorWithStatus;
|
|
104
108
|
deletePullRequestBranch: (prUrl: string, branchName: string) => Promise<void>;
|
|
105
109
|
createCommentByUrl: (issueOrPrUrl: string, commentBody: string) => Promise<void>;
|
|
110
|
+
private fetchIssueBodyResponse;
|
|
111
|
+
private parseIssueBodyResponse;
|
|
106
112
|
getIssueOrPullRequestBody: (url: string) => Promise<string>;
|
|
113
|
+
getIssueBodyByUrl: (url: string) => Promise<string | null>;
|
|
107
114
|
getIssueOrPullRequestComments: (url: string) => Promise<IssueComment[]>;
|
|
108
115
|
getPullRequestDetail: (prUrl: string) => Promise<PullRequestDetail | null>;
|
|
109
116
|
private fetchPullRequestFiles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiV3CheerioRestIssueRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EACjB,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,6DAA6D,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,4BAA4B,EAC5B,WAAW,EACZ,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAO7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+DAA+D,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,4DAA4D,CAAC;AAC5F,OAAO,EACL,KAAK,EAKN,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,4BAA4B,QAAiB,CAAC;AAC3D,eAAO,MAAM,gCAAgC,QAAgB,CAAC;AAC9D,eAAO,MAAM,4BAA4B,QAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ApiV3CheerioRestIssueRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EACjB,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,6DAA6D,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,4BAA4B,EAC5B,WAAW,EACZ,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAO7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+DAA+D,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,4DAA4D,CAAC;AAC5F,OAAO,EACL,KAAK,EAKN,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,4BAA4B,QAAiB,CAAC;AAC3D,eAAO,MAAM,gCAAgC,QAAgB,CAAC;AAC9D,eAAO,MAAM,4BAA4B,QAAiB,CAAC;AA8Z3D,qBAAa,+BACX,SAAQ,oBACR,YAAW,eAAe;IAGxB,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAAE,aAAa,CAAC;IACxE,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAChC,mBAAmB,EACjB,gBAAgB,GAChB,aAAa,GACb,iBAAiB,GACjB,eAAe,GACf,UAAU,GACV,cAAc,GACd,aAAa,GACb,oBAAoB,GACpB,cAAc,CACjB;IACD,QAAQ,CAAC,4BAA4B,EAAE,IAAI,CACzC,4BAA4B,EAC1B,mBAAmB,GACnB,wBAAwB,GACxB,wBAAwB,GACxB,uBAAuB,GACvB,oBAAoB,GACpB,mBAAmB,GACnB,wBAAwB,GACxB,mBAAmB,CACtB;IACD,QAAQ,CAAC,2BAA2B,EAAE,IAAI,CACxC,2BAA2B,EAC3B,WAAW,GAAG,WAAW,CAC1B;IACD,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC;IACjE,QAAQ,CAAC,cAAc,EAAE,cAAc;IACvC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK;gBAhCZ,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAAE,aAAa,CAAC,EAC/D,mBAAmB,EAAE,IAAI,CAChC,mBAAmB,EACjB,gBAAgB,GAChB,aAAa,GACb,iBAAiB,GACjB,eAAe,GACf,UAAU,GACV,cAAc,GACd,aAAa,GACb,oBAAoB,GACpB,cAAc,CACjB,EACQ,4BAA4B,EAAE,IAAI,CACzC,4BAA4B,EAC1B,mBAAmB,GACnB,wBAAwB,GACxB,wBAAwB,GACxB,uBAAuB,GACvB,oBAAoB,GACpB,mBAAmB,GACnB,wBAAwB,GACxB,mBAAmB,CACtB,EACQ,2BAA2B,EAAE,IAAI,CACxC,2BAA2B,EAC3B,WAAW,GAAG,WAAW,CAC1B,EACQ,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,EACxD,cAAc,EAAE,cAAc,EAC9B,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,GAAE,MAAwC,EACjD,KAAK,GAAE,KAAiB;IAQnC,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAA+B;IAE5E,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAGpC;IAEJ,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAG3C;IAEJ,sBAAsB,GAAI,WAAW,OAAO,CAAC,IAAI,CAAC,KAAG,MAAM,GAAG,IAAI,CACL;IAE7D,OAAO,CAAC,uBAAuB,CAE4C;IAE3E,YAAY,EAAE,CACZ,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,IAAI,CAAC,CAOhB;IAEF,yBAAyB,GAAI,MAAM,WAAW,KAAG,KAAK,CAyDpD;IACF,OAAO,CAAC,sBAAsB,CA+C5B;IAEF,OAAO,CAAC,uBAAuB,CA8B7B;IAMF,gBAAgB,GACd,WAAW,OAAO,CAAC,IAAI,CAAC,KACvB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CACiC;IAE3D,OAAO,CAAC,YAAY,CAC0G;IAE9H,YAAY,GACV,WAAW,OAAO,CAAC,IAAI,CAAC,KACvB,OAAO,CAAC;QACT,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC,CAQA;IAEF,OAAO,CAAC,gBAAgB,CAiEtB;IACF,cAAc,GACZ,KAAK,MAAM,EACX,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,WAAW,MAAM,EAAE,EACnB,QAAQ,MAAM,EAAE,KACf,OAAO,CAAC,MAAM,CAAC,CAShB;IACF,WAAW,GAAU,OAAO;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,KAAG,OAAO,CACT;QACE,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,EAAE,CACJ,CAEC;IACF,WAAW,GAAU,OAAO,KAAK,KAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;IACF,eAAe,GACb,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC,EAC7C,MAAM,MAAM,KACX,OAAO,CAAC,IAAI,CAAC,CAEd;IACF,aAAa,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAOxD;IACF,iBAAiB,GACf,SAAS,OAAO,EAChB,UAAU,MAAM,KACf,OAAO,CAAC,IAAI,CAAC,CAKd;IACF,mBAAmB,GACjB,OAAO,MAAM,EACb,SAAS,OAAO,EAChB,UAAU,MAAM,KACf,OAAO,CAAC,IAAI,CAAC,CA4Bd;IAEF,oBAAoB,GAClB,UAAU,MAAM,EAChB,SAAS,OAAO,EAChB,MAAM,IAAI,EACV,gBAAgB,MAAM,KACrB,OAAO,CAAC,IAAI,CAAC,CAyBd;IACF,oBAAoB,GAClB,SAAS,OAAO,GAAG;QACjB,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;KACxD,EACD,OAAO,KAAK,EACZ,MAAM,MAAM,KACX,OAAO,CAAC,IAAI,CAAC,CAOd;IACF,WAAW,GACT,SAAS,OAAO,GAAG;QAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;KAAE,EAC3D,OAAO,KAAK,EACZ,eAAe,MAAM,KACpB,OAAO,CAAC,IAAI,CAAC,CAOd;IACF,iBAAiB,GACf,SAAS,OAAO,EAChB,SAAS,MAAM,EACf,OAAO,KAAK,KACX,OAAO,CAAC,IAAI,CAAC,CAOd;IACF,aAAa,GAAU,OAAO,KAAK,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAElE;IACF,sBAAsB,GACpB,SAAS,OAAO,EAChB,SAAS,MAAM,EACf,OAAO,KAAK,EACZ,MAAM,MAAM,KACX,OAAO,CAAC,IAAI,CAAC,CAOd;IAEF,YAAY,GAAI,OAAO,KAAK,EAAE,QAAQ,KAAK,CAAC,QAAQ,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;IACF,WAAW,GAAI,OAAO,KAAK,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAExD;IACF,kBAAkB,GAChB,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC,EAC7C,cAAc,MAAM,CAAC,MAAM,CAAC,EAAE,KAC7B,OAAO,CAAC,IAAI,CAAC,CAEd;IACF,YAAY,GAAI,OAAO,MAAM,KAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAEtD;IACF,GAAG,GAAU,UAAU,MAAM,EAAE,SAAS,OAAO,KAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAUrE;IACF,MAAM,GAAU,OAAO,KAAK,EAAE,UAAU,OAAO,KAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;IACF,OAAO,CAAC,aAAa,CAoBnB;IAEF,OAAO,CAAC,eAAe,CA6FrB;IAEF,OAAO,CAAC,qCAAqC,CAkB3C;IAEF,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAGpC;IAEJ,OAAO,CAAC,qBAAqB,CA+F3B;IAEF,OAAO,CAAC,mBAAmB,CA8FzB;IAEF,OAAO,CAAC,oBAAoB,CAsF1B;IAEF,OAAO,CAAC,+BAA+B,CA0BrC;IAEF,OAAO,CAAC,4BAA4B,CA0ElC;IAEF,kBAAkB,GAChB,UAAU,MAAM,KACf,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA4L9B;IAEF,YAAY,GAAU,SAAS,OAAO,KAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAGvD;IAEF,iBAAiB,GAAU,SAAS,OAAO,KAAG,OAAO,CAAC,cAAc,CAAC,CAmBnE;IAEF,kBAAkB,GAChB,OAAO,MAAM,KACZ,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAiBnC;IAOF,mBAAmB,GACjB,QAAQ,MAAM,EAAE,KACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAsEhD;IAEF,OAAO,CAAC,wBAAwB,CAS9B;IAKF,OAAO,CAAC,+BAA+B,CAiHrC;IAEF,gBAAgB,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAmBrD;IAEF,eAAe,GACb,UAAU,MAAM,EAChB,aAAa,WAAW,GAAG,aAAa,KACvC,OAAO,CAAC,IAAI,CAAC,CAqBd;IAEF,8BAA8B,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyCvE;IAEF,kBAAkB,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAoBvD;IAEF,+BAA+B,GAC7B,OAAO,MAAM,EACb,iBAAiB,MAAM,GAAG,IAAI,EAC9B,aAAa,MAAM,EACnB,wBAAuB,+BAA+B,GAAG,IAAW,KACnE,OAAO,CAAC,IAAI,CAAC,CAkDd;IAEF,OAAO,CAAC,mCAAmC,CAiBzC;IAEF,OAAO,CAAC,uBAAuB,CAmC7B;IAEF,8BAA8B,GAC5B,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,MAAM,4BAA4B,EAClC,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CAAC,CAoCd;IAEF,OAAO,CAAC,qBAAqB,CA8B3B;IAEF,OAAO,CAAC,2BAA2B,CAmBjC;IAEF,uBAAuB,GACrB,OAAO,MAAM,EACb,YAAY,MAAM,KACjB,OAAO,CAAC,IAAI,CAAC,CAmBd;IAEF,kBAAkB,GAChB,cAAc,MAAM,EACpB,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CAAC,CAEd;IAEF,OAAO,CAAC,sBAAsB,CAc5B;IAEF,OAAO,CAAC,sBAAsB,CAW5B;IAEF,yBAAyB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAO9D;IAEF,iBAAiB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU7D;IAEF,6BAA6B,GAC3B,KAAK,MAAM,KACV,OAAO,CAAC,YAAY,EAAE,CAAC,CA2CxB;IAEF,oBAAoB,GAClB,OAAO,MAAM,KACZ,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAmDlC;IAEF,OAAO,CAAC,qBAAqB,CAqD3B;IAEF,qBAAqB,GACnB,OAAO,MAAM,KACZ,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAoD7B;IAEF,0BAA0B,GACxB,KAAK,MAAM,KACV,OAAO,CAAC;QACT,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,OAAO,CAAC;QAChB,aAAa,EAAE,OAAO,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CA4DA;IAEF,qBAAqB,GACnB,OAAO,MAAM,KACZ,OAAO,CAAC;QACT,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;KACtB,GAAG,IAAI,CAAC,CAuCP;CACH"}
|
|
@@ -16,6 +16,7 @@ export declare class RestIssueRepository extends BaseGitHubRepository implements
|
|
|
16
16
|
created_at: string;
|
|
17
17
|
}>;
|
|
18
18
|
updateIssue: (issue: Issue) => Promise<void>;
|
|
19
|
+
updateIssueBody: (issue: Pick<Issue, "org" | "repo" | "number">, body: string) => Promise<void>;
|
|
19
20
|
updateLabels: (issue: Issue, labels: Issue["labels"]) => Promise<void>;
|
|
20
21
|
removeLabel: (issue: Issue, label: string) => Promise<void>;
|
|
21
22
|
updateAssigneeList: (issue: Pick<Issue, "org" | "repo" | "number">, assigneeList: Member["name"][]) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestIssueRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/RestIssueRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAcvE,qBAAa,mBACX,SAAQ,oBACR,YACE,IAAI,CAAC,eAAe,EAAE,oBAAoB,GAAG,aAAa,GAAG,cAAc,CAAC;IAE9E,aAAa,GAAU,UAAU,MAAM,EAAE,SAAS,MAAM,mBAStD;IACF,cAAc,GACZ,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,WAAW,MAAM,EAAE,EACnB,QAAQ,MAAM,EAAE,KACf,OAAO,CAAC,MAAM,CAAC,CAQhB;IACF,QAAQ,GACN,UAAU,MAAM,KACf,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CA8BA;IACF,WAAW,GAAU,OAAO,KAAK,mBAc/B;IAEF,YAAY,GACV,OAAO,KAAK,EACZ,QAAQ,KAAK,CAAC,QAAQ,CAAC,KACtB,OAAO,CAAC,IAAI,CAAC,CAYd;IAEF,WAAW,GAAU,OAAO,KAAK,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAiB9D;IAEF,kBAAkB,GAChB,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC,EAC7C,cAAc,MAAM,CAAC,MAAM,CAAC,EAAE,KAC7B,OAAO,CAAC,IAAI,CAAC,CAQd;IAEF,YAAY,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA2B5D;IAEF,OAAO,CAAC,kBAAkB,CAsBxB;CACH"}
|
|
1
|
+
{"version":3,"file":"RestIssueRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/RestIssueRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAcvE,qBAAa,mBACX,SAAQ,oBACR,YACE,IAAI,CAAC,eAAe,EAAE,oBAAoB,GAAG,aAAa,GAAG,cAAc,CAAC;IAE9E,aAAa,GAAU,UAAU,MAAM,EAAE,SAAS,MAAM,mBAStD;IACF,cAAc,GACZ,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,WAAW,MAAM,EAAE,EACnB,QAAQ,MAAM,EAAE,KACf,OAAO,CAAC,MAAM,CAAC,CAQhB;IACF,QAAQ,GACN,UAAU,MAAM,KACf,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CA8BA;IACF,WAAW,GAAU,OAAO,KAAK,mBAc/B;IAEF,eAAe,GACb,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC,EAC7C,MAAM,MAAM,KACX,OAAO,CAAC,IAAI,CAAC,CAQd;IAEF,YAAY,GACV,OAAO,KAAK,EACZ,QAAQ,KAAK,CAAC,QAAQ,CAAC,KACtB,OAAO,CAAC,IAAI,CAAC,CAYd;IAEF,WAAW,GAAU,OAAO,KAAK,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAiB9D;IAEF,kBAAkB,GAChB,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC,EAC7C,cAAc,MAAM,CAAC,MAAM,CAAC,EAAE,KAC7B,OAAO,CAAC,IAAI,CAAC,CAQd;IAEF,YAAY,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA2B5D;IAEF,OAAO,CAAC,kBAAkB,CAsBxB;CACH"}
|
|
@@ -4,8 +4,8 @@ import { Project } from '../entities/Project';
|
|
|
4
4
|
import { StoryObjectMap } from '../entities/StoryObjectMap';
|
|
5
5
|
import { Member } from '../entities/Member';
|
|
6
6
|
export declare class ConvertCheckboxToIssueInStoryIssueUseCase {
|
|
7
|
-
readonly issueRepository: Pick<IssueRepository, 'createNewIssue' | '
|
|
8
|
-
constructor(issueRepository: Pick<IssueRepository, 'createNewIssue' | '
|
|
7
|
+
readonly issueRepository: Pick<IssueRepository, 'createNewIssue' | 'updateIssueBody' | 'updateStory' | 'getIssueByUrl' | 'getIssueBodyByUrl' | 'addIssueToProject'>;
|
|
8
|
+
constructor(issueRepository: Pick<IssueRepository, 'createNewIssue' | 'updateIssueBody' | 'updateStory' | 'getIssueByUrl' | 'getIssueBodyByUrl' | 'addIssueToProject'>);
|
|
9
9
|
run: (input: {
|
|
10
10
|
project: Project;
|
|
11
11
|
issues: Issue[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConvertCheckboxToIssueInStoryIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,qBAAa,yCAAyC;IAElD,QAAQ,CAAC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACb,gBAAgB,GAChB,
|
|
1
|
+
{"version":3,"file":"ConvertCheckboxToIssueInStoryIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,qBAAa,yCAAyC;IAElD,QAAQ,CAAC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACb,gBAAgB,GAChB,iBAAiB,GACjB,aAAa,GACb,eAAe,GACf,mBAAmB,GACnB,mBAAmB,CACtB;gBARQ,eAAe,EAAE,IAAI,CAC5B,eAAe,EACb,gBAAgB,GAChB,iBAAiB,GACjB,aAAa,GACb,eAAe,GACf,mBAAmB,GACnB,mBAAmB,CACtB;IAGH,GAAG,GAAU,OAAO;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,cAAc,CAAC;QAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,sCAAsC,EAAE,OAAO,CAAC;KACjD,KAAG,OAAO,CAAC,IAAI,CAAC,CAgGf;IACF,gCAAgC,GAC9B,MAAM,MAAM,EACZ,gBAAgB,MAAM,EACtB,WAAW,MAAM,KAChB,MAAM,CA8BP;IACF,kBAAkB,GAAI,gBAAgB,MAAM,EAAE,WAAW,MAAM,KAAG,MAAM,CAEtE;IACF,yBAAyB,GACvB,gBAAgB,MAAM,EACtB,WAAW,MAAM,KAChB,MAAM,CAQP;IACF,gCAAgC,GAAI,gBAAgB,MAAM,KAAG,MAAM,EAAE,CAcnE;CACH"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IssueRepository } from './adapter-interfaces/IssueRepository';
|
|
1
|
+
import { IssueRepository, RelatedPullRequest } from './adapter-interfaces/IssueRepository';
|
|
2
2
|
export type PrRejectedReasonType = 'PULL_REQUEST_NOT_FOUND' | 'MULTIPLE_PULL_REQUESTS_FOUND' | 'PULL_REQUEST_IS_DRAFT' | 'PULL_REQUEST_CONFLICTED' | 'ANY_CI_JOB_FAILED_OR_IN_PROGRESS' | 'REQUIRED_CI_JOB_NEVER_STARTED' | 'ANY_REVIEW_COMMENT_NOT_RESOLVED' | 'CHANGE_TARGET_MUST_PATH_NOT_CHANGED';
|
|
3
3
|
export type PrRejectionResult = {
|
|
4
4
|
rejections: {
|
|
@@ -9,6 +9,7 @@ export type PrRejectionResult = {
|
|
|
9
9
|
};
|
|
10
10
|
export type EvaluateOptions = {
|
|
11
11
|
relatedOpenPrUrls?: string[] | null;
|
|
12
|
+
resolvedOpenPrByUrl?: ReadonlyMap<string, RelatedPullRequest | null> | null;
|
|
12
13
|
};
|
|
13
14
|
export declare class IssueRejectionEvaluator {
|
|
14
15
|
private readonly issueRepository;
|
|
@@ -19,6 +20,10 @@ export declare class IssueRejectionEvaluator {
|
|
|
19
20
|
isPr: boolean;
|
|
20
21
|
body?: string | null;
|
|
21
22
|
}, labelsNotRequiringPullRequest?: string[], options?: EvaluateOptions) => Promise<PrRejectionResult>;
|
|
23
|
+
requiresPullRequestEvaluation: (issue: {
|
|
24
|
+
labels: string[];
|
|
25
|
+
body?: string | null;
|
|
26
|
+
}, labelsNotRequiringPullRequest?: string[]) => boolean;
|
|
22
27
|
private resolveOpenPrsForPrItem;
|
|
23
28
|
private resolveOpenPrsFromUrls;
|
|
24
29
|
private extractChangeTargetMustPaths;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IssueRejectionEvaluator.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/IssueRejectionEvaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,
|
|
1
|
+
{"version":3,"file":"IssueRejectionEvaluator.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/IssueRejectionEvaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,kBAAkB,EACnB,MAAM,sCAAsC,CAAC;AAE9C,MAAM,MAAM,oBAAoB,GAC5B,wBAAwB,GACxB,8BAA8B,GAC9B,uBAAuB,GACvB,yBAAyB,GACzB,kCAAkC,GAClC,+BAA+B,GAC/B,iCAAiC,GACjC,qCAAqC,CAAC;AAE1C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE;QAAE,IAAI,EAAE,oBAAoB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAQ5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAMpC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7E,CAAC;AAEF,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,oBAAoB,GACpB,oBAAoB,GACpB,gCAAgC,GAChC,iCAAiC,CACpC;IAGH,QAAQ,GACN,OAAO;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,EACD,gCAA+B,MAAM,EAAO,EAC5C,UAAS,eAAoB,KAC5B,OAAO,CAAC,iBAAiB,CAAC,CA6H3B;IAKF,6BAA6B,GAC3B,OAAO;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EACjD,gCAA+B,MAAM,EAAO,KAC3C,OAAO,CAgBR;IAKF,OAAO,CAAC,uBAAuB,CAqB7B;IAcF,OAAO,CAAC,sBAAsB,CA8B5B;IAEF,OAAO,CAAC,4BAA4B,CAYlC;IAEF,OAAO,CAAC,mBAAmB,CAIwC;IAEnE,OAAO,CAAC,2BAA2B,CAejC;CACH"}
|
|
@@ -7,7 +7,7 @@ export declare class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
7
7
|
private readonly issueCommentRepository;
|
|
8
8
|
private readonly issueRejectionEvaluator;
|
|
9
9
|
private readonly changeTargetPullRequestApprover;
|
|
10
|
-
constructor(projectRepository: Pick<ProjectRepository, 'findProjectIdByUrl' | 'getProject'>, issueRepository: Pick<IssueRepository, 'getAllIssues' | 'updateStatus' | 'updateStory' | 'findRelatedOpenPRs' | 'getOpenPullRequest' | 'getPullRequestChangedFilePaths' | 'approvePullRequest' | 'requestChangesWithInlineComment'>, issueCommentRepository: Pick<IssueCommentRepository, 'createComment' | 'getCommentsFromIssue'>);
|
|
10
|
+
constructor(projectRepository: Pick<ProjectRepository, 'findProjectIdByUrl' | 'getProject'>, issueRepository: Pick<IssueRepository, 'getAllIssues' | 'updateStatus' | 'updateStory' | 'findRelatedOpenPRs' | 'getOpenPullRequest' | 'getOpenPullRequests' | 'getPullRequestChangedFilePaths' | 'approvePullRequest' | 'requestChangesWithInlineComment'>, issueCommentRepository: Pick<IssueCommentRepository, 'createComment' | 'getCommentsFromIssue'>);
|
|
11
11
|
run: (params: {
|
|
12
12
|
projectUrl: string;
|
|
13
13
|
manager: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RevertNotReadyReviewQueueIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAyBrF,qBAAa,qCAAqC;IAK9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"RevertNotReadyReviewQueueIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAyBrF,qBAAa,qCAAqC;IAK9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAYhC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IApBzC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;IAClE,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAkC;gBAG/D,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,oBAAoB,GAAG,YAAY,CACpC,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,cAAc,GACd,cAAc,GACd,aAAa,GACb,oBAAoB,GACpB,oBAAoB,GACpB,qBAAqB,GACrB,gCAAgC,GAChC,oBAAoB,GACpB,iCAAiC,CACpC,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,eAAe,GAAG,sBAAsB,CACzC;IAQH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACvC,6BAA6B,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAChD,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;QACxD,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;KACvC,KAAG,OAAO,CAAC,IAAI,CAAC,CA2Mf;IAQF,OAAO,CAAC,gCAAgC,CAsBtC;CACH"}
|