github-issue-tower-defence-management 1.67.5 → 1.67.6
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 +7 -0
- package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js +3 -5
- package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/repositories/issue/RestIssueRepository.test.ts +195 -77
- package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.test.ts +6 -8
- package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts +2 -5
- package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [1.67.6](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.67.5...v1.67.6) (2026-05-29)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **core:** skip auto-escalation to Failed Preparation when current check is APPROVED ([3a2e926](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/3a2e9268b8d91eed5a5a668151a4b29fb688d6c6)), closes [#676](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/676)
|
|
7
|
+
|
|
1
8
|
## [1.67.5](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.67.4...v1.67.5) (2026-05-29)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -82,18 +82,16 @@ class NotifyFinishedIssuePreparationUseCase {
|
|
|
82
82
|
? `Auto Status Check: REJECTED\n${rejections.map((r) => `- ${r.detail}`).join('\n')}`
|
|
83
83
|
: 'Auto Status Check: APPROVED';
|
|
84
84
|
const lastTargetComments = comments.slice(-params.thresholdForAutoReject * 2);
|
|
85
|
-
if (
|
|
85
|
+
if (rejections.length > 0 &&
|
|
86
|
+
lastTargetComments.filter((comment) => comment.content.startsWith('Auto Status Check: REJECTED')).length >= params.thresholdForAutoReject &&
|
|
86
87
|
!lastTargetComments.some((comment) => comment.content
|
|
87
88
|
.toLowerCase()
|
|
88
89
|
.includes('failed to pass the check automatically'))) {
|
|
89
90
|
issue.status = WorkflowStatus_1.FAILED_PREPARATION_STATUS_NAME;
|
|
90
91
|
await this.issueRepository.update(issue, project);
|
|
91
92
|
await this.issueRepository.updateStatus(project, issue, failedPreparationStatusOption.id);
|
|
92
|
-
const escalationStatusLine = rejections.length > 0
|
|
93
|
-
? rejectionStatusMessage
|
|
94
|
-
: 'Auto Status Check: APPROVED (escalated due to prior failures)';
|
|
95
93
|
await this.setDependedIssueUrlForAllOpenPRs(issue, params.issueUrl, project);
|
|
96
|
-
await this.issueCommentRepository.createComment(issue, `${
|
|
94
|
+
await this.issueCommentRepository.createComment(issue, `${rejectionStatusMessage}\n\nFailed to pass the check automatically for ${params.thresholdForAutoReject} times`);
|
|
97
95
|
await this.sendWorkflowBlockerNotification(params.issueUrl, params.workflowBlockerResolvedWebhookUrl, project);
|
|
98
96
|
return;
|
|
99
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotifyFinishedIssuePreparationUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"NotifyFinishedIssuePreparationUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,25 +1,118 @@
|
|
|
1
|
+
const mockPost = jest.fn();
|
|
2
|
+
const mockGet = jest.fn();
|
|
3
|
+
const mockPut = jest.fn();
|
|
4
|
+
const mockPatch = jest.fn();
|
|
5
|
+
const mockDelete = jest.fn();
|
|
6
|
+
|
|
7
|
+
jest.mock('ky', () => ({
|
|
8
|
+
default: {
|
|
9
|
+
post: mockPost,
|
|
10
|
+
get: mockGet,
|
|
11
|
+
put: mockPut,
|
|
12
|
+
patch: mockPatch,
|
|
13
|
+
delete: mockDelete,
|
|
14
|
+
extend: jest.fn(),
|
|
15
|
+
create: jest.fn(),
|
|
16
|
+
stop: jest.fn(),
|
|
17
|
+
},
|
|
18
|
+
__esModule: true,
|
|
19
|
+
}));
|
|
20
|
+
|
|
1
21
|
import { RestIssueRepository } from './RestIssueRepository';
|
|
2
22
|
import { LocalStorageRepository } from '../LocalStorageRepository';
|
|
3
23
|
import { Issue } from '../../../domain/entities/Issue';
|
|
4
24
|
|
|
25
|
+
const mockJsonResponse = <T>(data: T) => ({
|
|
26
|
+
json: jest.fn().mockResolvedValue(data),
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const buildIssue = (overrides: Partial<Issue> = {}): Issue => ({
|
|
30
|
+
nameWithOwner: 'HiromiShikata/test-repository',
|
|
31
|
+
number: 40,
|
|
32
|
+
title: 'Test Issue',
|
|
33
|
+
state: 'OPEN',
|
|
34
|
+
status: null,
|
|
35
|
+
story: null,
|
|
36
|
+
nextActionDate: null,
|
|
37
|
+
nextActionHour: null,
|
|
38
|
+
estimationMinutes: null,
|
|
39
|
+
dependedIssueUrls: [],
|
|
40
|
+
completionDate50PercentConfidence: null,
|
|
41
|
+
url: 'https://github.com/HiromiShikata/test-repository/issues/40',
|
|
42
|
+
assignees: [],
|
|
43
|
+
labels: ['test'],
|
|
44
|
+
org: 'HiromiShikata',
|
|
45
|
+
repo: 'test-repository',
|
|
46
|
+
body: 'Test body',
|
|
47
|
+
itemId: '',
|
|
48
|
+
isPr: false,
|
|
49
|
+
isInProgress: false,
|
|
50
|
+
isClosed: false,
|
|
51
|
+
createdAt: new Date(),
|
|
52
|
+
author: '',
|
|
53
|
+
...overrides,
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const buildGetIssueResponse = (
|
|
57
|
+
labels: string[],
|
|
58
|
+
assignees: string[],
|
|
59
|
+
): {
|
|
60
|
+
labels: Array<{ name: string }>;
|
|
61
|
+
assignees: Array<{ login: string }>;
|
|
62
|
+
title: string;
|
|
63
|
+
body: string;
|
|
64
|
+
number: number;
|
|
65
|
+
state: string;
|
|
66
|
+
created_at: string;
|
|
67
|
+
} => ({
|
|
68
|
+
labels: labels.map((name) => ({ name })),
|
|
69
|
+
assignees: assignees.map((login) => ({ login })),
|
|
70
|
+
title: 'Test Issue',
|
|
71
|
+
body: 'Test body',
|
|
72
|
+
number: 40,
|
|
73
|
+
state: 'OPEN',
|
|
74
|
+
created_at: '2020-01-01T00:00:00Z',
|
|
75
|
+
});
|
|
76
|
+
|
|
5
77
|
describe('RestIssueRepository', () => {
|
|
6
78
|
const localStorageRepository = new LocalStorageRepository();
|
|
7
79
|
const restIssueRepository: RestIssueRepository = new RestIssueRepository(
|
|
8
80
|
localStorageRepository,
|
|
9
|
-
|
|
81
|
+
'dummy-token',
|
|
10
82
|
);
|
|
11
83
|
|
|
84
|
+
afterEach(() => {
|
|
85
|
+
mockPost.mockReset();
|
|
86
|
+
mockGet.mockReset();
|
|
87
|
+
mockPut.mockReset();
|
|
88
|
+
mockPatch.mockReset();
|
|
89
|
+
mockDelete.mockReset();
|
|
90
|
+
});
|
|
91
|
+
|
|
12
92
|
describe('createComment', () => {
|
|
13
93
|
it('should create a comment', async () => {
|
|
94
|
+
mockPost.mockResolvedValue(undefined);
|
|
95
|
+
|
|
14
96
|
await restIssueRepository.createComment(
|
|
15
97
|
'https://github.com/HiromiShikata/test-repository/issues/40',
|
|
16
98
|
'test comment',
|
|
17
99
|
);
|
|
100
|
+
|
|
101
|
+
expect(mockPost).toHaveBeenCalledTimes(1);
|
|
102
|
+
expect(mockPost).toHaveBeenCalledWith(
|
|
103
|
+
'https://api.github.com/repos/HiromiShikata/test-repository/issues/40/comments',
|
|
104
|
+
{
|
|
105
|
+
json: { body: 'test comment' },
|
|
106
|
+
headers: { Authorization: 'token dummy-token' },
|
|
107
|
+
},
|
|
108
|
+
);
|
|
18
109
|
});
|
|
19
110
|
});
|
|
20
111
|
describe('createNewIssue', () => {
|
|
21
112
|
it('should create a new issue', async () => {
|
|
22
|
-
|
|
113
|
+
mockPost.mockReturnValue(mockJsonResponse({ number: 123 }));
|
|
114
|
+
|
|
115
|
+
const issueNumber = await restIssueRepository.createNewIssue(
|
|
23
116
|
'HiromiShikata',
|
|
24
117
|
'test-repository',
|
|
25
118
|
'test issue',
|
|
@@ -27,35 +120,35 @@ describe('RestIssueRepository', () => {
|
|
|
27
120
|
['HiromiShikata'],
|
|
28
121
|
['test'],
|
|
29
122
|
);
|
|
123
|
+
|
|
124
|
+
expect(issueNumber).toBe(123);
|
|
125
|
+
expect(mockPost).toHaveBeenCalledTimes(1);
|
|
126
|
+
expect(mockPost).toHaveBeenCalledWith(
|
|
127
|
+
'https://api.github.com/repos/HiromiShikata/test-repository/issues',
|
|
128
|
+
{
|
|
129
|
+
json: {
|
|
130
|
+
title: 'test issue',
|
|
131
|
+
body: 'test body',
|
|
132
|
+
assignees: ['HiromiShikata'],
|
|
133
|
+
labels: ['test'],
|
|
134
|
+
},
|
|
135
|
+
headers: { Authorization: 'token dummy-token' },
|
|
136
|
+
},
|
|
137
|
+
);
|
|
30
138
|
});
|
|
31
139
|
});
|
|
32
140
|
describe('updateLabels', () => {
|
|
33
141
|
it('should update issue labels', async () => {
|
|
34
|
-
const issue
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
dependedIssueUrls: [],
|
|
45
|
-
completionDate50PercentConfidence: null,
|
|
46
|
-
url: 'https://github.com/HiromiShikata/test-repository/issues/40',
|
|
47
|
-
assignees: [],
|
|
48
|
-
labels: ['test'],
|
|
49
|
-
org: 'HiromiShikata',
|
|
50
|
-
repo: 'test-repository',
|
|
51
|
-
body: 'Test body',
|
|
52
|
-
itemId: '',
|
|
53
|
-
isPr: false,
|
|
54
|
-
isInProgress: false,
|
|
55
|
-
isClosed: false,
|
|
56
|
-
createdAt: new Date(),
|
|
57
|
-
author: '',
|
|
58
|
-
};
|
|
142
|
+
const issue = buildIssue();
|
|
143
|
+
|
|
144
|
+
mockPut.mockResolvedValue(undefined);
|
|
145
|
+
mockGet
|
|
146
|
+
.mockReturnValueOnce(
|
|
147
|
+
mockJsonResponse(buildGetIssueResponse(['default'], [])),
|
|
148
|
+
)
|
|
149
|
+
.mockReturnValueOnce(
|
|
150
|
+
mockJsonResponse(buildGetIssueResponse(['test', 'updated'], [])),
|
|
151
|
+
);
|
|
59
152
|
|
|
60
153
|
await restIssueRepository.updateLabels(issue, ['default']);
|
|
61
154
|
const issueDefault = await restIssueRepository.getIssue(issue.url);
|
|
@@ -65,35 +158,45 @@ describe('RestIssueRepository', () => {
|
|
|
65
158
|
expect(updatedIssue.labels).toContain('updated');
|
|
66
159
|
expect(updatedIssue.labels).toContain('test');
|
|
67
160
|
expect(updatedIssue.labels).not.toContain('default');
|
|
161
|
+
|
|
162
|
+
expect(mockPut).toHaveBeenCalledTimes(2);
|
|
163
|
+
expect(mockPut).toHaveBeenNthCalledWith(
|
|
164
|
+
1,
|
|
165
|
+
'https://api.github.com/repos/HiromiShikata/test-repository/issues/40/labels',
|
|
166
|
+
{
|
|
167
|
+
json: { labels: ['default'] },
|
|
168
|
+
headers: {
|
|
169
|
+
Authorization: 'token dummy-token',
|
|
170
|
+
Accept: 'application/vnd.github.v3+json',
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
);
|
|
174
|
+
expect(mockPut).toHaveBeenNthCalledWith(
|
|
175
|
+
2,
|
|
176
|
+
'https://api.github.com/repos/HiromiShikata/test-repository/issues/40/labels',
|
|
177
|
+
{
|
|
178
|
+
json: { labels: ['test', 'updated'] },
|
|
179
|
+
headers: {
|
|
180
|
+
Authorization: 'token dummy-token',
|
|
181
|
+
Accept: 'application/vnd.github.v3+json',
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
);
|
|
68
185
|
});
|
|
69
186
|
});
|
|
70
187
|
describe('removeLabel', () => {
|
|
71
188
|
it('should remove a specific label from issue', async () => {
|
|
72
|
-
const issue
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
completionDate50PercentConfidence: null,
|
|
84
|
-
url: 'https://github.com/HiromiShikata/test-repository/issues/40',
|
|
85
|
-
assignees: [],
|
|
86
|
-
labels: ['test'],
|
|
87
|
-
org: 'HiromiShikata',
|
|
88
|
-
repo: 'test-repository',
|
|
89
|
-
body: 'Test body',
|
|
90
|
-
itemId: '',
|
|
91
|
-
isPr: false,
|
|
92
|
-
isInProgress: false,
|
|
93
|
-
isClosed: false,
|
|
94
|
-
createdAt: new Date(),
|
|
95
|
-
author: '',
|
|
96
|
-
};
|
|
189
|
+
const issue = buildIssue();
|
|
190
|
+
|
|
191
|
+
mockPut.mockResolvedValue(undefined);
|
|
192
|
+
mockDelete.mockResolvedValue(undefined);
|
|
193
|
+
mockGet
|
|
194
|
+
.mockReturnValueOnce(
|
|
195
|
+
mockJsonResponse(buildGetIssueResponse(['test', 'to-remove'], [])),
|
|
196
|
+
)
|
|
197
|
+
.mockReturnValueOnce(
|
|
198
|
+
mockJsonResponse(buildGetIssueResponse(['test'], [])),
|
|
199
|
+
);
|
|
97
200
|
|
|
98
201
|
await restIssueRepository.updateLabels(issue, ['test', 'to-remove']);
|
|
99
202
|
const issueBefore = await restIssueRepository.getIssue(issue.url);
|
|
@@ -104,35 +207,32 @@ describe('RestIssueRepository', () => {
|
|
|
104
207
|
const issueAfter = await restIssueRepository.getIssue(issue.url);
|
|
105
208
|
expect(issueAfter.labels).not.toContain('to-remove');
|
|
106
209
|
expect(issueAfter.labels).toContain('test');
|
|
210
|
+
|
|
211
|
+
expect(mockDelete).toHaveBeenCalledTimes(1);
|
|
212
|
+
expect(mockDelete).toHaveBeenCalledWith(
|
|
213
|
+
'https://api.github.com/repos/HiromiShikata/test-repository/issues/40/labels/to-remove',
|
|
214
|
+
{
|
|
215
|
+
headers: {
|
|
216
|
+
Authorization: 'token dummy-token',
|
|
217
|
+
Accept: 'application/vnd.github.v3+json',
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
);
|
|
107
221
|
});
|
|
108
222
|
});
|
|
109
223
|
describe('updateAssigneeList', () => {
|
|
110
224
|
it('should update issue assignees', async () => {
|
|
111
|
-
const issue
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
completionDate50PercentConfidence: null,
|
|
123
|
-
url: 'https://github.com/HiromiShikata/test-repository/issues/40',
|
|
124
|
-
assignees: [],
|
|
125
|
-
labels: ['test'],
|
|
126
|
-
org: 'HiromiShikata',
|
|
127
|
-
repo: 'test-repository',
|
|
128
|
-
body: 'Test body',
|
|
129
|
-
itemId: '',
|
|
130
|
-
isPr: false,
|
|
131
|
-
isInProgress: false,
|
|
132
|
-
isClosed: false,
|
|
133
|
-
createdAt: new Date(),
|
|
134
|
-
author: '',
|
|
135
|
-
};
|
|
225
|
+
const issue = buildIssue();
|
|
226
|
+
|
|
227
|
+
mockPatch.mockResolvedValue(undefined);
|
|
228
|
+
mockGet
|
|
229
|
+
.mockReturnValueOnce(
|
|
230
|
+
mockJsonResponse(buildGetIssueResponse(['test'], ['HiromiShikata'])),
|
|
231
|
+
)
|
|
232
|
+
.mockReturnValueOnce(
|
|
233
|
+
mockJsonResponse(buildGetIssueResponse(['test'], [])),
|
|
234
|
+
);
|
|
235
|
+
|
|
136
236
|
await restIssueRepository.updateAssigneeList(issue, ['HiromiShikata']);
|
|
137
237
|
const issueWithAssignee = await restIssueRepository.getIssue(issue.url);
|
|
138
238
|
expect(issueWithAssignee.assignees).toContain('HiromiShikata');
|
|
@@ -141,6 +241,24 @@ describe('RestIssueRepository', () => {
|
|
|
141
241
|
issue.url,
|
|
142
242
|
);
|
|
143
243
|
expect(issueWithoutAssignee.assignees).not.toContain('HiromiShikata');
|
|
244
|
+
|
|
245
|
+
expect(mockPatch).toHaveBeenCalledTimes(2);
|
|
246
|
+
expect(mockPatch).toHaveBeenNthCalledWith(
|
|
247
|
+
1,
|
|
248
|
+
'https://api.github.com/repos/HiromiShikata/test-repository/issues/40',
|
|
249
|
+
{
|
|
250
|
+
json: { assignees: ['HiromiShikata'] },
|
|
251
|
+
headers: { Authorization: 'token dummy-token' },
|
|
252
|
+
},
|
|
253
|
+
);
|
|
254
|
+
expect(mockPatch).toHaveBeenNthCalledWith(
|
|
255
|
+
2,
|
|
256
|
+
'https://api.github.com/repos/HiromiShikata/test-repository/issues/40',
|
|
257
|
+
{
|
|
258
|
+
json: { assignees: [] },
|
|
259
|
+
headers: { Authorization: 'token dummy-token' },
|
|
260
|
+
},
|
|
261
|
+
);
|
|
144
262
|
});
|
|
145
263
|
});
|
|
146
264
|
});
|
|
@@ -730,7 +730,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
|
|
|
730
730
|
);
|
|
731
731
|
});
|
|
732
732
|
|
|
733
|
-
it('should
|
|
733
|
+
it('should advance to Awaiting Quality Check and skip escalation when current check passes even if prior rejection threshold is met', async () => {
|
|
734
734
|
const issue = createMockIssue({
|
|
735
735
|
url: 'https://github.com/user/repo/issues/1',
|
|
736
736
|
status: 'Preparation',
|
|
@@ -765,16 +765,14 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
|
|
|
765
765
|
});
|
|
766
766
|
|
|
767
767
|
expect(mockIssueRepository.update).toHaveBeenCalledWith(
|
|
768
|
-
expect.objectContaining({ status: '
|
|
768
|
+
expect.objectContaining({ status: 'Awaiting Quality Check' }),
|
|
769
769
|
mockProject,
|
|
770
770
|
);
|
|
771
|
-
expect(
|
|
772
|
-
expect.objectContaining({
|
|
773
|
-
|
|
774
|
-
'Auto Status Check: APPROVED (escalated due to prior failures)',
|
|
775
|
-
),
|
|
771
|
+
expect(mockIssueRepository.update).not.toHaveBeenCalledWith(
|
|
772
|
+
expect.objectContaining({ status: 'Failed Preparation' }),
|
|
773
|
+
mockProject,
|
|
776
774
|
);
|
|
777
|
-
expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
|
|
775
|
+
expect(mockIssueCommentRepository.createComment).not.toHaveBeenCalledWith(
|
|
778
776
|
expect.objectContaining({ url: 'https://github.com/user/repo/issues/1' }),
|
|
779
777
|
expect.stringContaining(
|
|
780
778
|
'Failed to pass the check automatically for 3 times',
|
|
@@ -178,6 +178,7 @@ export class NotifyFinishedIssuePreparationUseCase {
|
|
|
178
178
|
-params.thresholdForAutoReject * 2,
|
|
179
179
|
);
|
|
180
180
|
if (
|
|
181
|
+
rejections.length > 0 &&
|
|
181
182
|
lastTargetComments.filter((comment) =>
|
|
182
183
|
comment.content.startsWith('Auto Status Check: REJECTED'),
|
|
183
184
|
).length >= params.thresholdForAutoReject &&
|
|
@@ -194,10 +195,6 @@ export class NotifyFinishedIssuePreparationUseCase {
|
|
|
194
195
|
issue,
|
|
195
196
|
failedPreparationStatusOption.id,
|
|
196
197
|
);
|
|
197
|
-
const escalationStatusLine =
|
|
198
|
-
rejections.length > 0
|
|
199
|
-
? rejectionStatusMessage
|
|
200
|
-
: 'Auto Status Check: APPROVED (escalated due to prior failures)';
|
|
201
198
|
await this.setDependedIssueUrlForAllOpenPRs(
|
|
202
199
|
issue,
|
|
203
200
|
params.issueUrl,
|
|
@@ -205,7 +202,7 @@ export class NotifyFinishedIssuePreparationUseCase {
|
|
|
205
202
|
);
|
|
206
203
|
await this.issueCommentRepository.createComment(
|
|
207
204
|
issue,
|
|
208
|
-
`${
|
|
205
|
+
`${rejectionStatusMessage}\n\nFailed to pass the check automatically for ${params.thresholdForAutoReject} times`,
|
|
209
206
|
);
|
|
210
207
|
await this.sendWorkflowBlockerNotification(
|
|
211
208
|
params.issueUrl,
|
|
@@ -1 +1 @@
|
|
|
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,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,qBAAqB,CACxB,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,
|
|
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,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,qBAAqB,CACxB,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,CAuLf;IAEF,OAAO,CAAC,iBAAiB,CAyBvB;IAEF,OAAO,CAAC,qBAAqB,CAuB3B;IAEF,OAAO,CAAC,gCAAgC,CAiBtC;IAEF,OAAO,CAAC,uBAAuB,CAQ7B;IAEF,OAAO,CAAC,+BAA+B,CAkCrC;CACH"}
|