github-issue-tower-defence-management 1.52.0 → 1.53.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.
Files changed (34) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +45 -31
  3. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  4. package/bin/adapter/repositories/GraphqlProjectRepository.js +31 -9
  5. package/bin/adapter/repositories/GraphqlProjectRepository.js.map +1 -1
  6. package/bin/domain/usecases/HandleScheduledEventUseCase.js +8 -1
  7. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  8. package/bin/domain/usecases/IssueRejectionEvaluator.js +80 -0
  9. package/bin/domain/usecases/IssueRejectionEvaluator.js.map +1 -0
  10. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js +4 -67
  11. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js.map +1 -1
  12. package/bin/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.js +42 -0
  13. package/bin/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.js.map +1 -0
  14. package/package.json +1 -1
  15. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +8 -0
  16. package/src/adapter/repositories/GraphqlProjectRepository.fetchProjectId.test.ts +251 -0
  17. package/src/adapter/repositories/GraphqlProjectRepository.ts +54 -25
  18. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +58 -0
  19. package/src/domain/usecases/HandleScheduledEventUseCase.ts +11 -0
  20. package/src/domain/usecases/IssueRejectionEvaluator.ts +114 -0
  21. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts +15 -89
  22. package/src/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.test.ts +376 -0
  23. package/src/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.ts +88 -0
  24. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  25. package/types/adapter/repositories/GraphqlProjectRepository.d.ts +2 -0
  26. package/types/adapter/repositories/GraphqlProjectRepository.d.ts.map +1 -1
  27. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +6 -1
  28. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  29. package/types/domain/usecases/IssueRejectionEvaluator.d.ts +20 -0
  30. package/types/domain/usecases/IssueRejectionEvaluator.d.ts.map +1 -0
  31. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts +1 -1
  32. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts.map +1 -1
  33. package/types/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.d.ts +15 -0
  34. package/types/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.d.ts.map +1 -0
@@ -0,0 +1,376 @@
1
+ import { RevertNotReadyAwaitingQualityCheckUseCase } from './RevertNotReadyAwaitingQualityCheckUseCase';
2
+ import { Issue } from '../entities/Issue';
3
+ import { Project } from '../entities/Project';
4
+
5
+ const createMockProject = (overrides: Partial<Project> = {}): Project => ({
6
+ id: 'project-1',
7
+ url: 'https://github.com/users/user/projects/1',
8
+ databaseId: 1,
9
+ name: 'Test Project',
10
+ status: {
11
+ name: 'Status',
12
+ fieldId: 'field-1',
13
+ statuses: [
14
+ {
15
+ id: 'awaiting-workspace-id',
16
+ name: 'Awaiting Workspace',
17
+ color: 'GRAY',
18
+ description: '',
19
+ },
20
+ {
21
+ id: 'awaiting-quality-check-id',
22
+ name: 'Awaiting Quality Check',
23
+ color: 'BLUE',
24
+ description: '',
25
+ },
26
+ ],
27
+ },
28
+ nextActionDate: null,
29
+ nextActionHour: null,
30
+ story: null,
31
+ remainingEstimationMinutes: null,
32
+ dependedIssueUrlSeparatedByComma: null,
33
+ completionDate50PercentConfidence: null,
34
+ ...overrides,
35
+ });
36
+
37
+ const createMockIssue = (overrides: Partial<Issue> = {}): Issue => ({
38
+ nameWithOwner: 'user/repo',
39
+ number: 1,
40
+ title: 'Test Issue',
41
+ state: 'OPEN',
42
+ status: 'Awaiting Quality Check',
43
+ story: null,
44
+ nextActionDate: null,
45
+ nextActionHour: null,
46
+ estimationMinutes: null,
47
+ dependedIssueUrls: [],
48
+ completionDate50PercentConfidence: null,
49
+ url: 'https://github.com/user/repo/issues/1',
50
+ assignees: [],
51
+ labels: [],
52
+ org: 'user',
53
+ repo: 'repo',
54
+ body: '',
55
+ itemId: 'item-1',
56
+ isPr: false,
57
+ isInProgress: false,
58
+ isClosed: false,
59
+ createdAt: new Date(),
60
+ author: '',
61
+ ...overrides,
62
+ });
63
+
64
+ const createReadyPr = (url = 'https://github.com/user/repo/pull/1') => ({
65
+ url,
66
+ isConflicted: false,
67
+ isPassedAllCiJob: true,
68
+ isCiStateSuccess: true,
69
+ isResolvedAllReviewComments: true,
70
+ isBranchOutOfDate: false,
71
+ missingRequiredCheckNames: [],
72
+ });
73
+
74
+ describe('RevertNotReadyAwaitingQualityCheckUseCase', () => {
75
+ let mockProjectRepository: {
76
+ findProjectIdByUrl: jest.Mock;
77
+ getProject: jest.Mock;
78
+ };
79
+ let mockIssueRepository: {
80
+ getAllIssues: jest.Mock;
81
+ updateStatus: jest.Mock;
82
+ findRelatedOpenPRs: jest.Mock;
83
+ getOpenPullRequest: jest.Mock;
84
+ };
85
+ let mockIssueCommentRepository: {
86
+ createComment: jest.Mock;
87
+ };
88
+ let mockProject: Project;
89
+ let useCase: RevertNotReadyAwaitingQualityCheckUseCase;
90
+
91
+ beforeEach(() => {
92
+ jest.resetAllMocks();
93
+
94
+ mockProject = createMockProject();
95
+
96
+ mockProjectRepository = {
97
+ findProjectIdByUrl: jest.fn().mockResolvedValue('project-1'),
98
+ getProject: jest.fn().mockResolvedValue(mockProject),
99
+ };
100
+
101
+ mockIssueRepository = {
102
+ getAllIssues: jest
103
+ .fn()
104
+ .mockResolvedValue({ issues: [], cacheUsed: false }),
105
+ updateStatus: jest.fn().mockResolvedValue(undefined),
106
+ findRelatedOpenPRs: jest.fn().mockResolvedValue([]),
107
+ getOpenPullRequest: jest.fn().mockResolvedValue(null),
108
+ };
109
+
110
+ mockIssueCommentRepository = {
111
+ createComment: jest.fn().mockResolvedValue(undefined),
112
+ };
113
+
114
+ useCase = new RevertNotReadyAwaitingQualityCheckUseCase(
115
+ mockProjectRepository,
116
+ mockIssueRepository,
117
+ mockIssueCommentRepository,
118
+ );
119
+ });
120
+
121
+ it('should do nothing when there are no Awaiting Quality Check issues', async () => {
122
+ mockIssueRepository.getAllIssues.mockResolvedValue({
123
+ issues: [
124
+ createMockIssue({ status: 'Awaiting Workspace' }),
125
+ createMockIssue({ status: 'Preparation' }),
126
+ ],
127
+ cacheUsed: false,
128
+ });
129
+
130
+ await useCase.run({
131
+ projectUrl: 'https://github.com/users/user/projects/1',
132
+ allowIssueCacheMinutes: 10,
133
+ });
134
+
135
+ expect(mockIssueRepository.updateStatus).not.toHaveBeenCalled();
136
+ expect(mockIssueCommentRepository.createComment).not.toHaveBeenCalled();
137
+ });
138
+
139
+ it('should skip Awaiting Quality Check issue with llm-agent label', async () => {
140
+ const issue = createMockIssue({
141
+ status: 'Awaiting Quality Check',
142
+ labels: ['llm-agent'],
143
+ });
144
+ mockIssueRepository.getAllIssues.mockResolvedValue({
145
+ issues: [issue],
146
+ cacheUsed: false,
147
+ });
148
+
149
+ await useCase.run({
150
+ projectUrl: 'https://github.com/users/user/projects/1',
151
+ allowIssueCacheMinutes: 10,
152
+ });
153
+
154
+ expect(mockIssueRepository.updateStatus).not.toHaveBeenCalled();
155
+ expect(mockIssueCommentRepository.createComment).not.toHaveBeenCalled();
156
+ });
157
+
158
+ it('should revert issue when no linked PR is found', async () => {
159
+ const issue = createMockIssue({
160
+ status: 'Awaiting Quality Check',
161
+ });
162
+ mockIssueRepository.getAllIssues.mockResolvedValue({
163
+ issues: [issue],
164
+ cacheUsed: false,
165
+ });
166
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
167
+
168
+ await useCase.run({
169
+ projectUrl: 'https://github.com/users/user/projects/1',
170
+ allowIssueCacheMinutes: 10,
171
+ });
172
+
173
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
174
+ mockProject,
175
+ issue,
176
+ 'awaiting-workspace-id',
177
+ );
178
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
179
+ issue,
180
+ expect.stringContaining('Auto Status Check: REJECTED'),
181
+ );
182
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
183
+ issue,
184
+ expect.stringContaining('PULL_REQUEST_NOT_FOUND'),
185
+ );
186
+ });
187
+
188
+ it('should not revert issue when PR is ready', async () => {
189
+ const issue = createMockIssue({
190
+ status: 'Awaiting Quality Check',
191
+ });
192
+ mockIssueRepository.getAllIssues.mockResolvedValue({
193
+ issues: [issue],
194
+ cacheUsed: false,
195
+ });
196
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([createReadyPr()]);
197
+
198
+ await useCase.run({
199
+ projectUrl: 'https://github.com/users/user/projects/1',
200
+ allowIssueCacheMinutes: 10,
201
+ });
202
+
203
+ expect(mockIssueRepository.updateStatus).not.toHaveBeenCalled();
204
+ expect(mockIssueCommentRepository.createComment).not.toHaveBeenCalled();
205
+ });
206
+
207
+ it('should revert issue when PR is conflicted', async () => {
208
+ const issue = createMockIssue({
209
+ status: 'Awaiting Quality Check',
210
+ });
211
+ mockIssueRepository.getAllIssues.mockResolvedValue({
212
+ issues: [issue],
213
+ cacheUsed: false,
214
+ });
215
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([
216
+ { ...createReadyPr(), isConflicted: true },
217
+ ]);
218
+
219
+ await useCase.run({
220
+ projectUrl: 'https://github.com/users/user/projects/1',
221
+ allowIssueCacheMinutes: 10,
222
+ });
223
+
224
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
225
+ mockProject,
226
+ issue,
227
+ 'awaiting-workspace-id',
228
+ );
229
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
230
+ issue,
231
+ expect.stringContaining('Auto Status Check: REJECTED'),
232
+ );
233
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
234
+ issue,
235
+ expect.stringContaining('PULL_REQUEST_CONFLICTED'),
236
+ );
237
+ });
238
+
239
+ it('should revert issue when CI is failing', async () => {
240
+ const issue = createMockIssue({
241
+ status: 'Awaiting Quality Check',
242
+ });
243
+ mockIssueRepository.getAllIssues.mockResolvedValue({
244
+ issues: [issue],
245
+ cacheUsed: false,
246
+ });
247
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([
248
+ {
249
+ ...createReadyPr(),
250
+ isPassedAllCiJob: false,
251
+ isCiStateSuccess: false,
252
+ },
253
+ ]);
254
+
255
+ await useCase.run({
256
+ projectUrl: 'https://github.com/users/user/projects/1',
257
+ allowIssueCacheMinutes: 10,
258
+ });
259
+
260
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
261
+ mockProject,
262
+ issue,
263
+ 'awaiting-workspace-id',
264
+ );
265
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
266
+ issue,
267
+ expect.stringContaining('Auto Status Check: REJECTED'),
268
+ );
269
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
270
+ issue,
271
+ expect.stringContaining('ANY_CI_JOB_FAILED_OR_IN_PROGRESS'),
272
+ );
273
+ });
274
+
275
+ it('should revert issue when review comments are not resolved', async () => {
276
+ const issue = createMockIssue({
277
+ status: 'Awaiting Quality Check',
278
+ });
279
+ mockIssueRepository.getAllIssues.mockResolvedValue({
280
+ issues: [issue],
281
+ cacheUsed: false,
282
+ });
283
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([
284
+ { ...createReadyPr(), isResolvedAllReviewComments: false },
285
+ ]);
286
+
287
+ await useCase.run({
288
+ projectUrl: 'https://github.com/users/user/projects/1',
289
+ allowIssueCacheMinutes: 10,
290
+ });
291
+
292
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
293
+ mockProject,
294
+ issue,
295
+ 'awaiting-workspace-id',
296
+ );
297
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
298
+ issue,
299
+ expect.stringContaining('Auto Status Check: REJECTED'),
300
+ );
301
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
302
+ issue,
303
+ expect.stringContaining('ANY_REVIEW_COMMENT_NOT_RESOLVED'),
304
+ );
305
+ });
306
+
307
+ it('should revert issue when multiple linked open PRs are found', async () => {
308
+ const issue = createMockIssue({
309
+ status: 'Awaiting Quality Check',
310
+ });
311
+ mockIssueRepository.getAllIssues.mockResolvedValue({
312
+ issues: [issue],
313
+ cacheUsed: false,
314
+ });
315
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([
316
+ createReadyPr('https://github.com/user/repo/pull/1'),
317
+ createReadyPr('https://github.com/user/repo/pull/2'),
318
+ ]);
319
+
320
+ await useCase.run({
321
+ projectUrl: 'https://github.com/users/user/projects/1',
322
+ allowIssueCacheMinutes: 10,
323
+ });
324
+
325
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
326
+ mockProject,
327
+ issue,
328
+ 'awaiting-workspace-id',
329
+ );
330
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
331
+ issue,
332
+ expect.stringContaining('Auto Status Check: REJECTED'),
333
+ );
334
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
335
+ issue,
336
+ expect.stringContaining('MULTIPLE_PULL_REQUESTS_FOUND'),
337
+ );
338
+ });
339
+
340
+ it('should revert issue when CI is SUCCESS but required check never started', async () => {
341
+ const issue = createMockIssue({
342
+ status: 'Awaiting Quality Check',
343
+ });
344
+ mockIssueRepository.getAllIssues.mockResolvedValue({
345
+ issues: [issue],
346
+ cacheUsed: false,
347
+ });
348
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([
349
+ {
350
+ ...createReadyPr(),
351
+ isPassedAllCiJob: false,
352
+ isCiStateSuccess: true,
353
+ missingRequiredCheckNames: ['E2E Tests'],
354
+ },
355
+ ]);
356
+
357
+ await useCase.run({
358
+ projectUrl: 'https://github.com/users/user/projects/1',
359
+ allowIssueCacheMinutes: 10,
360
+ });
361
+
362
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
363
+ mockProject,
364
+ issue,
365
+ 'awaiting-workspace-id',
366
+ );
367
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
368
+ issue,
369
+ expect.stringContaining('Auto Status Check: REJECTED'),
370
+ );
371
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
372
+ issue,
373
+ expect.stringContaining('REQUIRED_CI_JOB_NEVER_STARTED'),
374
+ );
375
+ });
376
+ });
@@ -0,0 +1,88 @@
1
+ import { IssueRepository } from './adapter-interfaces/IssueRepository';
2
+ import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
3
+ import { IssueCommentRepository } from './adapter-interfaces/IssueCommentRepository';
4
+ import { IssueRejectionEvaluator } from './IssueRejectionEvaluator';
5
+ import {
6
+ AWAITING_QUALITY_CHECK_STATUS_NAME,
7
+ AWAITING_WORKSPACE_STATUS_NAME,
8
+ } from '../entities/WorkflowStatus';
9
+
10
+ export class RevertNotReadyAwaitingQualityCheckUseCase {
11
+ private readonly issueRejectionEvaluator: IssueRejectionEvaluator;
12
+
13
+ constructor(
14
+ private readonly projectRepository: Pick<
15
+ ProjectRepository,
16
+ 'findProjectIdByUrl' | 'getProject'
17
+ >,
18
+ private readonly issueRepository: Pick<
19
+ IssueRepository,
20
+ | 'getAllIssues'
21
+ | 'updateStatus'
22
+ | 'findRelatedOpenPRs'
23
+ | 'getOpenPullRequest'
24
+ >,
25
+ private readonly issueCommentRepository: Pick<
26
+ IssueCommentRepository,
27
+ 'createComment'
28
+ >,
29
+ ) {
30
+ this.issueRejectionEvaluator = new IssueRejectionEvaluator(issueRepository);
31
+ }
32
+
33
+ run = async (params: {
34
+ projectUrl: string;
35
+ allowIssueCacheMinutes: number;
36
+ }): Promise<void> => {
37
+ const projectId = await this.projectRepository.findProjectIdByUrl(
38
+ params.projectUrl,
39
+ );
40
+ if (!projectId) {
41
+ throw new Error(`Project not found. projectUrl: ${params.projectUrl}`);
42
+ }
43
+ const project = await this.projectRepository.getProject(projectId);
44
+ if (!project) {
45
+ throw new Error(
46
+ `Project not found. projectId: ${projectId} projectUrl: ${params.projectUrl}`,
47
+ );
48
+ }
49
+
50
+ const awaitingWorkspaceStatusOption = project.status.statuses.find(
51
+ (s) => s.name === AWAITING_WORKSPACE_STATUS_NAME,
52
+ );
53
+ if (!awaitingWorkspaceStatusOption) {
54
+ return;
55
+ }
56
+
57
+ const { issues } = await this.issueRepository.getAllIssues(
58
+ projectId,
59
+ params.allowIssueCacheMinutes,
60
+ );
61
+
62
+ const awaitingQualityCheckIssues = issues.filter(
63
+ (issue) => issue.status === AWAITING_QUALITY_CHECK_STATUS_NAME,
64
+ );
65
+
66
+ for (const issue of awaitingQualityCheckIssues) {
67
+ const hasLlmAgentLabel = issue.labels.some(
68
+ (l) => l === 'llm-agent' || l.startsWith('llm-agent:'),
69
+ );
70
+ if (hasLlmAgentLabel) {
71
+ continue;
72
+ }
73
+
74
+ const { rejections } = await this.issueRejectionEvaluator.evaluate(issue);
75
+ if (rejections.length > 0) {
76
+ await this.issueRepository.updateStatus(
77
+ project,
78
+ issue,
79
+ awaitingWorkspaceStatusOption.id,
80
+ );
81
+ await this.issueCommentRepository.createComment(
82
+ issue,
83
+ `Auto Status Check: REJECTED\n${rejections.map((r) => `- ${r.detail}`).join('\n')}`,
84
+ );
85
+ }
86
+ }
87
+ };
88
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAuB3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CAoOP;CACH"}
1
+ {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAwB3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CA2OP;CACH"}
@@ -2,6 +2,8 @@ import { BaseGitHubRepository } from './BaseGitHubRepository';
2
2
  import { ProjectRepository } from '../../domain/usecases/adapter-interfaces/ProjectRepository';
3
3
  import { FieldOption, Project } from '../../domain/entities/Project';
4
4
  export declare class GraphqlProjectRepository extends BaseGitHubRepository implements Pick<ProjectRepository, 'getProject' | 'findProjectIdByUrl' | 'getByUrl' | 'updateStoryList' | 'updateStatusList'> {
5
+ private readonly projectIdCache;
6
+ private readonly fetchProjectIdFailedAt;
5
7
  extractProjectFromUrl: (projectUrl: string) => {
6
8
  owner: string;
7
9
  projectNumber: number;
@@ -1 +1 @@
1
- {"version":3,"file":"GraphqlProjectRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/GraphqlProjectRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAGrE,qBAAa,wBACX,SAAQ,oBACR,YACE,IAAI,CACF,iBAAiB,EACf,YAAY,GACZ,oBAAoB,GACpB,UAAU,GACV,iBAAiB,GACjB,kBAAkB,CACrB;IAEH,qBAAqB,GACnB,YAAY,MAAM,KACjB;QACD,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,CAMC;IACF,cAAc,GACZ,OAAO,MAAM,EACb,eAAe,MAAM,KACpB,OAAO,CAAC,MAAM,CAAC,CA8DhB;IACF,kBAAkB,GAChB,YAAY,MAAM,KACjB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAG9B;IACF,UAAU,GAAU,WAAW,OAAO,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CA2NpE;IACF,QAAQ,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC,CAU9C;IACF,eAAe,GACb,SAAS,OAAO,EAChB,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;QACvC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC9B,CAAC,EAAE,KACH,OAAO,CAAC,WAAW,EAAE,CAAC,CA+CvB;IACF,gBAAgB,GACd,SAAS,OAAO,EAChB,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;QACxC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC9B,CAAC,EAAE,KACH,OAAO,CAAC,WAAW,EAAE,CAAC,CA4CvB;CACH"}
1
+ {"version":3,"file":"GraphqlProjectRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/GraphqlProjectRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAKrE,qBAAa,wBACX,SAAQ,oBACR,YACE,IAAI,CACF,iBAAiB,EACf,YAAY,GACZ,oBAAoB,GACpB,UAAU,GACV,iBAAiB,GACjB,kBAAkB,CACrB;IAEH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA6B;IAEpE,qBAAqB,GACnB,YAAY,MAAM,KACjB;QACD,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,CAMC;IACF,cAAc,GACZ,OAAO,MAAM,EACb,eAAe,MAAM,KACpB,OAAO,CAAC,MAAM,CAAC,CAsFhB;IACF,kBAAkB,GAChB,YAAY,MAAM,KACjB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAG9B;IACF,UAAU,GAAU,WAAW,OAAO,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CA2NpE;IACF,QAAQ,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC,CAU9C;IACF,eAAe,GACb,SAAS,OAAO,EAChB,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;QACvC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC9B,CAAC,EAAE,KACH,OAAO,CAAC,WAAW,EAAE,CAAC,CA+CvB;IACF,gBAAgB,GACd,SAAS,OAAO,EAChB,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;QACxC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC9B,CAAC,EAAE,KACH,OAAO,CAAC,WAAW,EAAE,CAAC,CA4CvB;CACH"}
@@ -21,6 +21,7 @@ import { AssignNoAssigneeIssueToManagerUseCase } from './AssignNoAssigneeIssueTo
21
21
  import { UpdateIssueStatusByLabelUseCase } from './UpdateIssueStatusByLabelUseCase';
22
22
  import { StartPreparationUseCase } from './StartPreparationUseCase';
23
23
  import { RevertOrphanedPreparationUseCase } from './RevertOrphanedPreparationUseCase';
24
+ import { RevertNotReadyAwaitingQualityCheckUseCase } from './RevertNotReadyAwaitingQualityCheckUseCase';
24
25
  import { SetupTowerDefenceProjectUseCase } from './SetupTowerDefenceProjectUseCase';
25
26
  export declare class ProjectNotFoundError extends Error {
26
27
  constructor(message: string);
@@ -42,11 +43,12 @@ export declare class HandleScheduledEventUseCase {
42
43
  readonly updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase;
43
44
  readonly startPreparationUseCase: StartPreparationUseCase;
44
45
  readonly revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase;
46
+ readonly revertNotReadyAwaitingQualityCheckUseCase: RevertNotReadyAwaitingQualityCheckUseCase;
45
47
  readonly dateRepository: DateRepository;
46
48
  readonly spreadsheetRepository: SpreadsheetRepository;
47
49
  readonly projectRepository: ProjectRepository;
48
50
  readonly issueRepository: IssueRepository;
49
- constructor(setupTowerDefenceProjectUseCase: SetupTowerDefenceProjectUseCase, actionAnnouncementUseCase: ActionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase: SetWorkflowManagementIssueToStoryUseCase, clearPastNextActionUseCase: ClearPastNextActionDateHourUseCase, analyzeProblemByIssueUseCase: AnalyzeProblemByIssueUseCase, analyzeStoriesUseCase: AnalyzeStoriesUseCase, clearDependedIssueURLUseCase: ClearDependedIssueURLUseCase, createEstimationIssueUseCase: CreateEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase: ConvertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase: ChangeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase: SetNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase: CreateNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase: AssignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase, startPreparationUseCase: StartPreparationUseCase, revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase, dateRepository: DateRepository, spreadsheetRepository: SpreadsheetRepository, projectRepository: ProjectRepository, issueRepository: IssueRepository);
51
+ constructor(setupTowerDefenceProjectUseCase: SetupTowerDefenceProjectUseCase, actionAnnouncementUseCase: ActionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase: SetWorkflowManagementIssueToStoryUseCase, clearPastNextActionUseCase: ClearPastNextActionDateHourUseCase, analyzeProblemByIssueUseCase: AnalyzeProblemByIssueUseCase, analyzeStoriesUseCase: AnalyzeStoriesUseCase, clearDependedIssueURLUseCase: ClearDependedIssueURLUseCase, createEstimationIssueUseCase: CreateEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase: ConvertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase: ChangeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase: SetNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase: CreateNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase: AssignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase, startPreparationUseCase: StartPreparationUseCase, revertOrphanedPreparationUseCase: RevertOrphanedPreparationUseCase, revertNotReadyAwaitingQualityCheckUseCase: RevertNotReadyAwaitingQualityCheckUseCase, dateRepository: DateRepository, spreadsheetRepository: SpreadsheetRepository, projectRepository: ProjectRepository, issueRepository: IssueRepository);
50
52
  run: (input: {
51
53
  projectName: string;
52
54
  org: string;
@@ -74,6 +76,9 @@ export declare class HandleScheduledEventUseCase {
74
76
  awLogStaleThresholdMinutes?: number;
75
77
  awaitingQualityCheckStatus?: string | null;
76
78
  } | null;
79
+ notifyFinishedPreparation?: {
80
+ awaitingQualityCheckStatusName?: string | null;
81
+ } | null;
77
82
  }) => Promise<{
78
83
  project: Project;
79
84
  issues: Issue[];
@@ -1 +1 @@
1
- {"version":3,"file":"HandleScheduledEventUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/HandleScheduledEventUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HandleScheduledEventUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/HandleScheduledEventUseCase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { IssueRepository } from './adapter-interfaces/IssueRepository';
2
+ export type PrRejectedReasonType = 'PULL_REQUEST_NOT_FOUND' | 'MULTIPLE_PULL_REQUESTS_FOUND' | 'PULL_REQUEST_CONFLICTED' | 'ANY_CI_JOB_FAILED_OR_IN_PROGRESS' | 'REQUIRED_CI_JOB_NEVER_STARTED' | 'ANY_REVIEW_COMMENT_NOT_RESOLVED';
3
+ export type PrRejectionResult = {
4
+ rejections: {
5
+ type: PrRejectedReasonType;
6
+ detail: string;
7
+ }[];
8
+ approvedPrUrl: string | null;
9
+ };
10
+ export declare class IssueRejectionEvaluator {
11
+ private readonly issueRepository;
12
+ constructor(issueRepository: Pick<IssueRepository, 'findRelatedOpenPRs' | 'getOpenPullRequest'>);
13
+ evaluate: (issue: {
14
+ url: string;
15
+ labels: string[];
16
+ isPr: boolean;
17
+ }) => Promise<PrRejectionResult>;
18
+ private resolveOpenPrsForPrItem;
19
+ }
20
+ //# sourceMappingURL=IssueRejectionEvaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IssueRejectionEvaluator.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/IssueRejectionEvaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEhB,MAAM,sCAAsC,CAAC;AAE9C,MAAM,MAAM,oBAAoB,GAC5B,wBAAwB,GACxB,8BAA8B,GAC9B,yBAAyB,GACzB,kCAAkC,GAClC,+BAA+B,GAC/B,iCAAiC,CAAC;AAEtC,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,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,IAAI,CACpC,eAAe,EACf,oBAAoB,GAAG,oBAAoB,CAC5C;IAGH,QAAQ,GAAU,OAAO;QACvB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC;KACf,KAAG,OAAO,CAAC,iBAAiB,CAAC,CAwE5B;IAEF,OAAO,CAAC,uBAAuB,CAQ7B;CACH"}
@@ -13,6 +13,7 @@ export declare class NotifyFinishedIssuePreparationUseCase {
13
13
  private readonly issueRepository;
14
14
  private readonly issueCommentRepository;
15
15
  private readonly webhookRepository;
16
+ private readonly issueRejectionEvaluator;
16
17
  constructor(projectRepository: Pick<ProjectRepository, 'getByUrl'>, issueRepository: Pick<IssueRepository, 'get' | 'update' | 'updateStatus' | 'updateNextActionDate' | 'findRelatedOpenPRs' | 'getStoryObjectMap' | 'getOpenPullRequest'>, issueCommentRepository: Pick<IssueCommentRepository, 'getCommentsFromIssue' | 'createComment'>, webhookRepository: Pick<WebhookRepository, 'sendGetRequest'>);
17
18
  run: (params: {
18
19
  projectUrl: string;
@@ -21,7 +22,6 @@ export declare class NotifyFinishedIssuePreparationUseCase {
21
22
  workflowBlockerResolvedWebhookUrl: string | null;
22
23
  }) => Promise<void>;
23
24
  private collectRejections;
24
- private resolveOpenPrsForPrItem;
25
25
  private reportBodyHasNextStep;
26
26
  private setPrNextActionDate;
27
27
  private sendWorkflowBlockerNotification;
@@ -1 +1 @@
1
- {"version":3,"file":"NotifyFinishedIssuePreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEhB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAQ3E,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,QAAQ,EAAE,MAAM;CAI7B;AACD,qBAAa,uBAAwB,SAAQ,KAAK;gBAE9C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,cAAc,EAAE,MAAM,GAAG,IAAI;CAOhC;AAWD,qBAAa,qCAAqC;IAE9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAUhC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAIvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAfjB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EACtD,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,KAAK,GACL,QAAQ,GACR,cAAc,GACd,sBAAsB,GACtB,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,CACvB,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,sBAAsB,GAAG,eAAe,CACzC,EACgB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,gBAAgB,CACjB;IAGH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,iCAAiC,EAAE,MAAM,GAAG,IAAI,CAAC;KAClD,KAAG,OAAO,CAAC,IAAI,CAAC,CAmLf;IAEF,OAAO,CAAC,iBAAiB,CAyFvB;IAEF,OAAO,CAAC,uBAAuB,CAQ7B;IAEF,OAAO,CAAC,qBAAqB,CAuB3B;IAEF,OAAO,CAAC,mBAAmB,CAWzB;IAEF,OAAO,CAAC,+BAA+B,CAkCrC;CACH"}
1
+ {"version":3,"file":"NotifyFinishedIssuePreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAY3E,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,QAAQ,EAAE,MAAM;CAI7B;AACD,qBAAa,uBAAwB,SAAQ,KAAK;gBAE9C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,cAAc,EAAE,MAAM,GAAG,IAAI;CAOhC;AAMD,qBAAa,qCAAqC;IAI9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAUhC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAIvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAlBpC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;gBAG/C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EACtD,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,KAAK,GACL,QAAQ,GACR,cAAc,GACd,sBAAsB,GACtB,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,CACvB,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,sBAAsB,GAAG,eAAe,CACzC,EACgB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,gBAAgB,CACjB;IAKH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,iCAAiC,EAAE,MAAM,GAAG,IAAI,CAAC;KAClD,KAAG,OAAO,CAAC,IAAI,CAAC,CAmLf;IAEF,OAAO,CAAC,iBAAiB,CAyBvB;IAEF,OAAO,CAAC,qBAAqB,CAuB3B;IAEF,OAAO,CAAC,mBAAmB,CAWzB;IAEF,OAAO,CAAC,+BAA+B,CAkCrC;CACH"}
@@ -0,0 +1,15 @@
1
+ import { IssueRepository } from './adapter-interfaces/IssueRepository';
2
+ import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
3
+ import { IssueCommentRepository } from './adapter-interfaces/IssueCommentRepository';
4
+ export declare class RevertNotReadyAwaitingQualityCheckUseCase {
5
+ private readonly projectRepository;
6
+ private readonly issueRepository;
7
+ private readonly issueCommentRepository;
8
+ private readonly issueRejectionEvaluator;
9
+ constructor(projectRepository: Pick<ProjectRepository, 'findProjectIdByUrl' | 'getProject'>, issueRepository: Pick<IssueRepository, 'getAllIssues' | 'updateStatus' | 'findRelatedOpenPRs' | 'getOpenPullRequest'>, issueCommentRepository: Pick<IssueCommentRepository, 'createComment'>);
10
+ run: (params: {
11
+ projectUrl: string;
12
+ allowIssueCacheMinutes: number;
13
+ }) => Promise<void>;
14
+ }
15
+ //# sourceMappingURL=RevertNotReadyAwaitingQualityCheckUseCase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RevertNotReadyAwaitingQualityCheckUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/RevertNotReadyAwaitingQualityCheckUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAOrF,qBAAa,yCAAyC;IAIlD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAOhC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAdzC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;gBAG/C,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,oBAAoB,GAAG,YAAY,CACpC,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,cAAc,GACd,cAAc,GACd,oBAAoB,GACpB,oBAAoB,CACvB,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,eAAe,CAChB;IAKH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,sBAAsB,EAAE,MAAM,CAAC;KAChC,KAAG,OAAO,CAAC,IAAI,CAAC,CAmDf;CACH"}