github-issue-tower-defence-management 1.30.2 → 1.32.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/.github/workflows/umino-project.yml +1 -0
- package/CHANGELOG.md +19 -0
- package/README.md +12 -0
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +65 -31
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
- package/bin/adapter/repositories/NodeLocalCommandRunner.js +34 -0
- package/bin/adapter/repositories/NodeLocalCommandRunner.js.map +1 -0
- package/bin/adapter/repositories/StubClaudeRepository.js +13 -0
- package/bin/adapter/repositories/StubClaudeRepository.js.map +1 -0
- package/bin/domain/usecases/AnalyzeProblemByIssueUseCase.js +0 -38
- package/bin/domain/usecases/AnalyzeProblemByIssueUseCase.js.map +1 -1
- package/bin/domain/usecases/HandleScheduledEventUseCase.js +13 -8
- package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
- package/bin/domain/usecases/utils.js +1 -14
- package/bin/domain/usecases/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.test.ts +9 -0
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +12 -0
- package/src/adapter/repositories/NodeLocalCommandRunner.test.ts +80 -0
- package/src/adapter/repositories/NodeLocalCommandRunner.ts +37 -0
- package/src/adapter/repositories/StubClaudeRepository.test.ts +19 -0
- package/src/adapter/repositories/StubClaudeRepository.ts +12 -0
- package/src/domain/usecases/AnalyzeProblemByIssueUseCase.ts +1 -68
- package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +3 -24
- package/src/domain/usecases/HandleScheduledEventUseCase.ts +21 -7
- package/src/domain/usecases/utils.ts +0 -22
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
- package/types/adapter/repositories/NodeLocalCommandRunner.d.ts +9 -0
- package/types/adapter/repositories/NodeLocalCommandRunner.d.ts.map +1 -0
- package/types/adapter/repositories/StubClaudeRepository.d.ts +7 -0
- package/types/adapter/repositories/StubClaudeRepository.d.ts.map +1 -0
- package/types/domain/usecases/AnalyzeProblemByIssueUseCase.d.ts +2 -14
- package/types/domain/usecases/AnalyzeProblemByIssueUseCase.d.ts.map +1 -1
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +10 -1
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
- package/types/domain/usecases/utils.d.ts +0 -3
- package/types/domain/usecases/utils.d.ts.map +1 -1
|
@@ -183,6 +183,7 @@ jobs:
|
|
|
183
183
|
steps:
|
|
184
184
|
- uses: nearform-actions/github-action-check-linked-issues@v1
|
|
185
185
|
id: check-linked-issues
|
|
186
|
+
if: github.event.pull_request.user.login != 'dependabot[bot]'
|
|
186
187
|
with:
|
|
187
188
|
exclude-branches: 'release/**, dependabot/**, project-common/**, renovate/**'
|
|
188
189
|
github-token: ${{ secrets.GH_TOKEN }}
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
# [1.32.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.31.0...v1.32.0) (2026-03-21)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **core:** integrate StartPreparationUseCase into HandleScheduledEventUseCase chain ([d346cfc](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/d346cfc65480bd1f8b86b8d915404bc975abe97a))
|
|
7
|
+
|
|
8
|
+
# [1.31.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.30.2...v1.31.0) (2026-03-16)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **core:** keep isInProgress field in Issue entity ([b5c756b](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/b5c756b662311c2b4a6f3e8bc5b3abcbc94e002d))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
* **core:** remove checkInProgress from AnalyzeProblemByIssueUseCase ([91daf23](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/91daf232d7c6c998a48da2865ba66a4e72abae8b))
|
|
19
|
+
|
|
1
20
|
## [1.30.2](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.30.1...v1.30.2) (2026-03-15)
|
|
2
21
|
|
|
3
22
|
|
package/README.md
CHANGED
|
@@ -54,6 +54,12 @@ workingReport:
|
|
|
54
54
|
reportIssueLabels: # Array of issue labels
|
|
55
55
|
- string
|
|
56
56
|
- string
|
|
57
|
+
startPreparation?: # Optional: Enable automatic issue preparation workflow
|
|
58
|
+
awaitingWorkspaceStatus: string # Project status name for issues awaiting workspace
|
|
59
|
+
preparationStatus: string # Project status name for issues in preparation
|
|
60
|
+
defaultAgentName: string # Default agent name to assign for preparation
|
|
61
|
+
logFilePath?: string # Optional: Path to log file for preparation output
|
|
62
|
+
maximumPreparingIssuesCount: number | null # Max concurrent preparing issues (null = unlimited)
|
|
57
63
|
```
|
|
58
64
|
|
|
59
65
|
Example:
|
|
@@ -84,6 +90,12 @@ workingReport:
|
|
|
84
90
|
- 'working-time'
|
|
85
91
|
slack:
|
|
86
92
|
userToken: 'xoxp-xxx'
|
|
93
|
+
startPreparation:
|
|
94
|
+
awaitingWorkspaceStatus: 'Awaiting Workspace'
|
|
95
|
+
preparationStatus: 'Preparation'
|
|
96
|
+
defaultAgentName: 'umino-bot'
|
|
97
|
+
logFilePath: '/tmp/preparation.log'
|
|
98
|
+
maximumPreparingIssuesCount: 3
|
|
87
99
|
```
|
|
88
100
|
|
|
89
101
|
### Slack User Token
|
|
@@ -56,6 +56,9 @@ const CreateNewStoryByLabelUseCase_1 = require("../../../domain/usecases/CreateN
|
|
|
56
56
|
const CheerioProjectRepository_1 = require("../../repositories/CheerioProjectRepository");
|
|
57
57
|
const AssignNoAssigneeIssueToManagerUseCase_1 = require("../../../domain/usecases/AssignNoAssigneeIssueToManagerUseCase");
|
|
58
58
|
const UpdateIssueStatusByLabelUseCase_1 = require("../../../domain/usecases/UpdateIssueStatusByLabelUseCase");
|
|
59
|
+
const StartPreparationUseCase_1 = require("../../../domain/usecases/StartPreparationUseCase");
|
|
60
|
+
const NodeLocalCommandRunner_1 = require("../../repositories/NodeLocalCommandRunner");
|
|
61
|
+
const StubClaudeRepository_1 = require("../../repositories/StubClaudeRepository");
|
|
59
62
|
class HandleScheduledEventUseCaseHandler {
|
|
60
63
|
constructor() {
|
|
61
64
|
this.handle = async (configFilePath, verbose) => {
|
|
@@ -70,8 +73,8 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
70
73
|
});
|
|
71
74
|
const configFileContent = fs_1.default.readFileSync(configFilePath, 'utf8');
|
|
72
75
|
const input = yaml_1.default.parse(configFileContent);
|
|
73
|
-
if (!(() => { const _io0 = input => "string" === typeof input.projectName && "string" === typeof input.org && "string" === typeof input.projectUrl && "string" === typeof input.manager && ("object" === typeof input.workingReport && null !== input.workingReport && _io1(input.workingReport)) && "string" === typeof input.urlOfStoryView && "string" === typeof input.disabledStatus && (null === input.defaultStatus || "string" === typeof input.defaultStatus) && "boolean" === typeof input.disabled && "number" === typeof input.allowIssueCacheMinutes && ("object" === typeof input.credentials && null !== input.credentials &&
|
|
74
|
-
throw new Error(`Invalid input: ${JSON.stringify(input)}\n\n${JSON.stringify((() => { const _io0 = input => "string" === typeof input.projectName && "string" === typeof input.org && "string" === typeof input.projectUrl && "string" === typeof input.manager && ("object" === typeof input.workingReport && null !== input.workingReport && _io1(input.workingReport)) && "string" === typeof input.urlOfStoryView && "string" === typeof input.disabledStatus && (null === input.defaultStatus || "string" === typeof input.defaultStatus) && "boolean" === typeof input.disabled && "number" === typeof input.allowIssueCacheMinutes && ("object" === typeof input.credentials && null !== input.credentials &&
|
|
76
|
+
if (!(() => { const _io0 = input => "string" === typeof input.projectName && "string" === typeof input.org && "string" === typeof input.projectUrl && "string" === typeof input.manager && ("object" === typeof input.workingReport && null !== input.workingReport && _io1(input.workingReport)) && "string" === typeof input.urlOfStoryView && "string" === typeof input.disabledStatus && (null === input.defaultStatus || "string" === typeof input.defaultStatus) && "boolean" === typeof input.disabled && "number" === typeof input.allowIssueCacheMinutes && (null === input.startPreparation || undefined === input.startPreparation || "object" === typeof input.startPreparation && null !== input.startPreparation && _io2(input.startPreparation)) && ("object" === typeof input.credentials && null !== input.credentials && _io3(input.credentials)); const _io1 = input => "string" === typeof input.repo && (Array.isArray(input.members) && input.members.every(elem => "string" === typeof elem)) && "string" === typeof input.spreadsheetUrl; const _io2 = input => "string" === typeof input.awaitingWorkspaceStatus && "string" === typeof input.preparationStatus && "string" === typeof input.defaultAgentName && (undefined === input.logFilePath || "string" === typeof input.logFilePath) && (null === input.maximumPreparingIssuesCount || "number" === typeof input.maximumPreparingIssuesCount); const _io3 = input => "object" === typeof input.manager && null !== input.manager && _io4(input.manager) && ("object" === typeof input.bot && null !== input.bot && _io8(input.bot)); const _io4 = input => "object" === typeof input.github && null !== input.github && _io5(input.github) && ("object" === typeof input.slack && null !== input.slack && _io6(input.slack)) && ("object" === typeof input.googleServiceAccount && null !== input.googleServiceAccount && _io7(input.googleServiceAccount)); const _io5 = input => "string" === typeof input.token; const _io6 = input => "string" === typeof input.userToken; const _io7 = input => "string" === typeof input.serviceAccountKey; const _io8 = input => "object" === typeof input.github && null !== input.github && _io9(input.github); const _io9 = input => "string" === typeof input.token && (undefined === input.name || "string" === typeof input.name) && (undefined === input.password || "string" === typeof input.password) && (undefined === input.authenticatorKey || "string" === typeof input.authenticatorKey); return input => "object" === typeof input && null !== input && _io0(input); })()(input)) {
|
|
77
|
+
throw new Error(`Invalid input: ${JSON.stringify(input)}\n\n${JSON.stringify((() => { const _io0 = input => "string" === typeof input.projectName && "string" === typeof input.org && "string" === typeof input.projectUrl && "string" === typeof input.manager && ("object" === typeof input.workingReport && null !== input.workingReport && _io1(input.workingReport)) && "string" === typeof input.urlOfStoryView && "string" === typeof input.disabledStatus && (null === input.defaultStatus || "string" === typeof input.defaultStatus) && "boolean" === typeof input.disabled && "number" === typeof input.allowIssueCacheMinutes && (null === input.startPreparation || undefined === input.startPreparation || "object" === typeof input.startPreparation && null !== input.startPreparation && _io2(input.startPreparation)) && ("object" === typeof input.credentials && null !== input.credentials && _io3(input.credentials)); const _io1 = input => "string" === typeof input.repo && (Array.isArray(input.members) && input.members.every(elem => "string" === typeof elem)) && "string" === typeof input.spreadsheetUrl; const _io2 = input => "string" === typeof input.awaitingWorkspaceStatus && "string" === typeof input.preparationStatus && "string" === typeof input.defaultAgentName && (undefined === input.logFilePath || "string" === typeof input.logFilePath) && (null === input.maximumPreparingIssuesCount || "number" === typeof input.maximumPreparingIssuesCount); const _io3 = input => "object" === typeof input.manager && null !== input.manager && _io4(input.manager) && ("object" === typeof input.bot && null !== input.bot && _io8(input.bot)); const _io4 = input => "object" === typeof input.github && null !== input.github && _io5(input.github) && ("object" === typeof input.slack && null !== input.slack && _io6(input.slack)) && ("object" === typeof input.googleServiceAccount && null !== input.googleServiceAccount && _io7(input.googleServiceAccount)); const _io5 = input => "string" === typeof input.token; const _io6 = input => "string" === typeof input.userToken; const _io7 = input => "string" === typeof input.serviceAccountKey; const _io8 = input => "object" === typeof input.github && null !== input.github && _io9(input.github); const _io9 = input => "string" === typeof input.token && (undefined === input.name || "string" === typeof input.name) && (undefined === input.password || "string" === typeof input.password) && (undefined === input.authenticatorKey || "string" === typeof input.authenticatorKey); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.projectName || _report(_exceptionable, {
|
|
75
78
|
path: _path + ".projectName",
|
|
76
79
|
expected: "string",
|
|
77
80
|
value: input.projectName
|
|
@@ -115,13 +118,21 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
115
118
|
path: _path + ".allowIssueCacheMinutes",
|
|
116
119
|
expected: "number",
|
|
117
120
|
value: input.allowIssueCacheMinutes
|
|
121
|
+
}), null === input.startPreparation || undefined === input.startPreparation || ("object" === typeof input.startPreparation && null !== input.startPreparation || _report(_exceptionable, {
|
|
122
|
+
path: _path + ".startPreparation",
|
|
123
|
+
expected: "(__type.o1 | null | undefined)",
|
|
124
|
+
value: input.startPreparation
|
|
125
|
+
})) && _vo2(input.startPreparation, _path + ".startPreparation", true && _exceptionable) || _report(_exceptionable, {
|
|
126
|
+
path: _path + ".startPreparation",
|
|
127
|
+
expected: "(__type.o1 | null | undefined)",
|
|
128
|
+
value: input.startPreparation
|
|
118
129
|
}), ("object" === typeof input.credentials && null !== input.credentials || _report(_exceptionable, {
|
|
119
130
|
path: _path + ".credentials",
|
|
120
|
-
expected: "__type.
|
|
131
|
+
expected: "__type.o2",
|
|
121
132
|
value: input.credentials
|
|
122
|
-
})) &&
|
|
133
|
+
})) && _vo3(input.credentials, _path + ".credentials", true && _exceptionable) || _report(_exceptionable, {
|
|
123
134
|
path: _path + ".credentials",
|
|
124
|
-
expected: "__type.
|
|
135
|
+
expected: "__type.o2",
|
|
125
136
|
value: input.credentials
|
|
126
137
|
})].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.repo || _report(_exceptionable, {
|
|
127
138
|
path: _path + ".repo",
|
|
@@ -143,67 +154,87 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
143
154
|
path: _path + ".spreadsheetUrl",
|
|
144
155
|
expected: "string",
|
|
145
156
|
value: input.spreadsheetUrl
|
|
146
|
-
})].every(flag => flag); const _vo2 = (input, _path, _exceptionable = true) => [
|
|
157
|
+
})].every(flag => flag); const _vo2 = (input, _path, _exceptionable = true) => ["string" === typeof input.awaitingWorkspaceStatus || _report(_exceptionable, {
|
|
158
|
+
path: _path + ".awaitingWorkspaceStatus",
|
|
159
|
+
expected: "string",
|
|
160
|
+
value: input.awaitingWorkspaceStatus
|
|
161
|
+
}), "string" === typeof input.preparationStatus || _report(_exceptionable, {
|
|
162
|
+
path: _path + ".preparationStatus",
|
|
163
|
+
expected: "string",
|
|
164
|
+
value: input.preparationStatus
|
|
165
|
+
}), "string" === typeof input.defaultAgentName || _report(_exceptionable, {
|
|
166
|
+
path: _path + ".defaultAgentName",
|
|
167
|
+
expected: "string",
|
|
168
|
+
value: input.defaultAgentName
|
|
169
|
+
}), undefined === input.logFilePath || "string" === typeof input.logFilePath || _report(_exceptionable, {
|
|
170
|
+
path: _path + ".logFilePath",
|
|
171
|
+
expected: "(string | undefined)",
|
|
172
|
+
value: input.logFilePath
|
|
173
|
+
}), null === input.maximumPreparingIssuesCount || "number" === typeof input.maximumPreparingIssuesCount || _report(_exceptionable, {
|
|
174
|
+
path: _path + ".maximumPreparingIssuesCount",
|
|
175
|
+
expected: "(null | number)",
|
|
176
|
+
value: input.maximumPreparingIssuesCount
|
|
177
|
+
})].every(flag => flag); const _vo3 = (input, _path, _exceptionable = true) => [("object" === typeof input.manager && null !== input.manager || _report(_exceptionable, {
|
|
147
178
|
path: _path + ".manager",
|
|
148
|
-
expected: "__type.
|
|
179
|
+
expected: "__type.o3",
|
|
149
180
|
value: input.manager
|
|
150
|
-
})) &&
|
|
181
|
+
})) && _vo4(input.manager, _path + ".manager", true && _exceptionable) || _report(_exceptionable, {
|
|
151
182
|
path: _path + ".manager",
|
|
152
|
-
expected: "__type.
|
|
183
|
+
expected: "__type.o3",
|
|
153
184
|
value: input.manager
|
|
154
185
|
}), ("object" === typeof input.bot && null !== input.bot || _report(_exceptionable, {
|
|
155
186
|
path: _path + ".bot",
|
|
156
|
-
expected: "__type.
|
|
187
|
+
expected: "__type.o7",
|
|
157
188
|
value: input.bot
|
|
158
|
-
})) &&
|
|
189
|
+
})) && _vo8(input.bot, _path + ".bot", true && _exceptionable) || _report(_exceptionable, {
|
|
159
190
|
path: _path + ".bot",
|
|
160
|
-
expected: "__type.
|
|
191
|
+
expected: "__type.o7",
|
|
161
192
|
value: input.bot
|
|
162
|
-
})].every(flag => flag); const
|
|
193
|
+
})].every(flag => flag); const _vo4 = (input, _path, _exceptionable = true) => [("object" === typeof input.github && null !== input.github || _report(_exceptionable, {
|
|
163
194
|
path: _path + ".github",
|
|
164
|
-
expected: "__type.
|
|
195
|
+
expected: "__type.o4",
|
|
165
196
|
value: input.github
|
|
166
|
-
})) &&
|
|
197
|
+
})) && _vo5(input.github, _path + ".github", true && _exceptionable) || _report(_exceptionable, {
|
|
167
198
|
path: _path + ".github",
|
|
168
|
-
expected: "__type.
|
|
199
|
+
expected: "__type.o4",
|
|
169
200
|
value: input.github
|
|
170
201
|
}), ("object" === typeof input.slack && null !== input.slack || _report(_exceptionable, {
|
|
171
202
|
path: _path + ".slack",
|
|
172
|
-
expected: "__type.
|
|
203
|
+
expected: "__type.o5",
|
|
173
204
|
value: input.slack
|
|
174
|
-
})) &&
|
|
205
|
+
})) && _vo6(input.slack, _path + ".slack", true && _exceptionable) || _report(_exceptionable, {
|
|
175
206
|
path: _path + ".slack",
|
|
176
|
-
expected: "__type.
|
|
207
|
+
expected: "__type.o5",
|
|
177
208
|
value: input.slack
|
|
178
209
|
}), ("object" === typeof input.googleServiceAccount && null !== input.googleServiceAccount || _report(_exceptionable, {
|
|
179
210
|
path: _path + ".googleServiceAccount",
|
|
180
|
-
expected: "__type.
|
|
211
|
+
expected: "__type.o6",
|
|
181
212
|
value: input.googleServiceAccount
|
|
182
|
-
})) &&
|
|
213
|
+
})) && _vo7(input.googleServiceAccount, _path + ".googleServiceAccount", true && _exceptionable) || _report(_exceptionable, {
|
|
183
214
|
path: _path + ".googleServiceAccount",
|
|
184
|
-
expected: "__type.
|
|
215
|
+
expected: "__type.o6",
|
|
185
216
|
value: input.googleServiceAccount
|
|
186
|
-
})].every(flag => flag); const
|
|
217
|
+
})].every(flag => flag); const _vo5 = (input, _path, _exceptionable = true) => ["string" === typeof input.token || _report(_exceptionable, {
|
|
187
218
|
path: _path + ".token",
|
|
188
219
|
expected: "string",
|
|
189
220
|
value: input.token
|
|
190
|
-
})].every(flag => flag); const
|
|
221
|
+
})].every(flag => flag); const _vo6 = (input, _path, _exceptionable = true) => ["string" === typeof input.userToken || _report(_exceptionable, {
|
|
191
222
|
path: _path + ".userToken",
|
|
192
223
|
expected: "string",
|
|
193
224
|
value: input.userToken
|
|
194
|
-
})].every(flag => flag); const
|
|
225
|
+
})].every(flag => flag); const _vo7 = (input, _path, _exceptionable = true) => ["string" === typeof input.serviceAccountKey || _report(_exceptionable, {
|
|
195
226
|
path: _path + ".serviceAccountKey",
|
|
196
227
|
expected: "string",
|
|
197
228
|
value: input.serviceAccountKey
|
|
198
|
-
})].every(flag => flag); const
|
|
229
|
+
})].every(flag => flag); const _vo8 = (input, _path, _exceptionable = true) => [("object" === typeof input.github && null !== input.github || _report(_exceptionable, {
|
|
199
230
|
path: _path + ".github",
|
|
200
|
-
expected: "__type.
|
|
231
|
+
expected: "__type.o8",
|
|
201
232
|
value: input.github
|
|
202
|
-
})) &&
|
|
233
|
+
})) && _vo9(input.github, _path + ".github", true && _exceptionable) || _report(_exceptionable, {
|
|
203
234
|
path: _path + ".github",
|
|
204
|
-
expected: "__type.
|
|
235
|
+
expected: "__type.o8",
|
|
205
236
|
value: input.github
|
|
206
|
-
})].every(flag => flag); const
|
|
237
|
+
})].every(flag => flag); const _vo9 = (input, _path, _exceptionable = true) => ["string" === typeof input.token || _report(_exceptionable, {
|
|
207
238
|
path: _path + ".token",
|
|
208
239
|
expected: "string",
|
|
209
240
|
value: input.token
|
|
@@ -288,7 +319,10 @@ class HandleScheduledEventUseCaseHandler {
|
|
|
288
319
|
const createNewStoryByLabel = new CreateNewStoryByLabelUseCase_1.CreateNewStoryByLabelUseCase(projectRepository, issueRepository);
|
|
289
320
|
const assignNoAssigneeIssueToManagerUseCase = new AssignNoAssigneeIssueToManagerUseCase_1.AssignNoAssigneeIssueToManagerUseCase(issueRepository);
|
|
290
321
|
const updateIssueStatusByLabelUseCase = new UpdateIssueStatusByLabelUseCase_1.UpdateIssueStatusByLabelUseCase(issueRepository);
|
|
291
|
-
const
|
|
322
|
+
const nodeLocalCommandRunner = new NodeLocalCommandRunner_1.NodeLocalCommandRunner();
|
|
323
|
+
const stubClaudeRepository = new StubClaudeRepository_1.StubClaudeRepository();
|
|
324
|
+
const startPreparationUseCase = new StartPreparationUseCase_1.StartPreparationUseCase(projectRepository, issueRepository, stubClaudeRepository, nodeLocalCommandRunner);
|
|
325
|
+
const handleScheduledEventUseCase = new HandleScheduledEventUseCase_1.HandleScheduledEventUseCase(actionAnnouncement, setWorkflowManagementIssueToStoryUseCase, clearNextActionHourUseCase, analyzeProblemByIssueUseCase, analyzeStoriesUseCase, clearDependedIssueURLUseCase, createEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase, createNewStoryByLabel, assignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase, startPreparationUseCase, systemDateRepository, googleSpreadsheetRepository, projectRepository, issueRepository);
|
|
292
326
|
return await handleScheduledEventUseCase.run(input);
|
|
293
327
|
};
|
|
294
328
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleScheduledEventUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,kDAA0B;AAC1B,4CAAoB;AACpB,kFAA+E;AAC/E,sFAAmF;AACnF,gGAA6F;AAC7F,0FAAuF;AACvF,wFAAqF;AACrF,sFAAmF;AACnF,wGAAqG;AACrG,8GAA2G;AAC3G,sGAAmG;AACnG,gGAA6F;AAC7F,kGAA+F;AAC/F,gIAA6H;AAC7H,oGAAiG;AACjG,wGAAqG;AAIrG,0FAAuF;AACvF,wGAAqG;AACrG,wGAAqG;AACrG,kDAA0C;AAC1C,kIAA+H;AAC/H,8GAA2G;AAC3G,0GAAuG;AACvG,wGAAqG;AACrG,0FAAuF;AAEvF,0HAAuH;AACvH,8GAA2G;
|
|
1
|
+
{"version":3,"file":"HandleScheduledEventUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NodeLocalCommandRunner = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const util_1 = require("util");
|
|
6
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
7
|
+
class NodeLocalCommandRunner {
|
|
8
|
+
async runCommand(command) {
|
|
9
|
+
try {
|
|
10
|
+
const { stdout, stderr } = await execAsync(command);
|
|
11
|
+
return {
|
|
12
|
+
stdout,
|
|
13
|
+
stderr,
|
|
14
|
+
exitCode: 0,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (error &&
|
|
19
|
+
typeof error === 'object' &&
|
|
20
|
+
'stdout' in error &&
|
|
21
|
+
'stderr' in error &&
|
|
22
|
+
'code' in error) {
|
|
23
|
+
return {
|
|
24
|
+
stdout: String(error.stdout),
|
|
25
|
+
stderr: String(error.stderr),
|
|
26
|
+
exitCode: typeof error.code === 'number' ? error.code : 1,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.NodeLocalCommandRunner = NodeLocalCommandRunner;
|
|
34
|
+
//# sourceMappingURL=NodeLocalCommandRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeLocalCommandRunner.js","sourceRoot":"","sources":["../../../src/adapter/repositories/NodeLocalCommandRunner.ts"],"names":[],"mappings":";;;AACA,iDAAqC;AACrC,+BAAiC;AAEjC,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAElC,MAAa,sBAAsB;IACjC,KAAK,CAAC,UAAU,CAAC,OAAe;QAK9B,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;YACpD,OAAO;gBACL,MAAM;gBACN,MAAM;gBACN,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IACE,KAAK;gBACL,OAAO,KAAK,KAAK,QAAQ;gBACzB,QAAQ,IAAI,KAAK;gBACjB,QAAQ,IAAI,KAAK;gBACjB,MAAM,IAAI,KAAK,EACf,CAAC;gBACD,OAAO;oBACL,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC5B,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC5B,QAAQ,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAC1D,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AA9BD,wDA8BC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StubClaudeRepository = void 0;
|
|
4
|
+
class StubClaudeRepository {
|
|
5
|
+
async getUsage() {
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
async isClaudeAvailable(_threshold) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.StubClaudeRepository = StubClaudeRepository;
|
|
13
|
+
//# sourceMappingURL=StubClaudeRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StubClaudeRepository.js","sourceRoot":"","sources":["../../../src/adapter/repositories/StubClaudeRepository.ts"],"names":[],"mappings":";;;AAGA,MAAa,oBAAoB;IAC/B,KAAK,CAAC,QAAQ;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,UAAkB;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AARD,oDAQC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AnalyzeProblemByIssueUseCase = void 0;
|
|
4
|
-
const utils_1 = require("./utils");
|
|
5
4
|
class AnalyzeProblemByIssueUseCase {
|
|
6
5
|
constructor(issueRepository, dateRepository) {
|
|
7
6
|
this.issueRepository = issueRepository;
|
|
@@ -16,7 +15,6 @@ class AnalyzeProblemByIssueUseCase {
|
|
|
16
15
|
if (!targetDate) {
|
|
17
16
|
return;
|
|
18
17
|
}
|
|
19
|
-
await this.checkInProgress({ ...input, targetDate });
|
|
20
18
|
for (const storyObject of input.storyObjectMap.values()) {
|
|
21
19
|
const storyIssue = storyObject.storyIssue;
|
|
22
20
|
if (!storyIssue) {
|
|
@@ -26,42 +24,6 @@ class AnalyzeProblemByIssueUseCase {
|
|
|
26
24
|
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
27
25
|
}
|
|
28
26
|
};
|
|
29
|
-
this.checkInProgress = async (input) => {
|
|
30
|
-
const assigneeToNotify = [];
|
|
31
|
-
for (const member of input.members) {
|
|
32
|
-
let topIssue = null;
|
|
33
|
-
for (const story of input.storyObjectMap.values()) {
|
|
34
|
-
const storyIssueObject = input.storyObjectMap.get(story.story.name);
|
|
35
|
-
if (!storyIssueObject) {
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
else if (assigneeToNotify.includes(member)) {
|
|
39
|
-
break;
|
|
40
|
-
}
|
|
41
|
-
for (const issue of storyIssueObject.issues) {
|
|
42
|
-
if (!(0, utils_1.isVisibleIssue)(issue, member, input.targetDate, input.disabledStatus) ||
|
|
43
|
-
issue.status?.toLowerCase().includes('review') ||
|
|
44
|
-
issue.title.toLowerCase().includes('review') ||
|
|
45
|
-
issue.isPr) {
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
if (topIssue === null) {
|
|
49
|
-
topIssue = issue;
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
if (!issue.isInProgress) {
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
assigneeToNotify.push(member);
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
if (assigneeToNotify.length === 0) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
await this.issueRepository.createNewIssue(input.org, input.repo, 'Check in progress', `${assigneeToNotify.join('\n')}`, [input.manager], ['story:workflow-management']);
|
|
64
|
-
};
|
|
65
27
|
this.createSummaryCommentBody = (storyObject) => {
|
|
66
28
|
const getFlowchartIdFromUrl = (url) => {
|
|
67
29
|
return url.split('/').slice(-3).join('/');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyzeProblemByIssueUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/AnalyzeProblemByIssueUseCase.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"AnalyzeProblemByIssueUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/AnalyzeProblemByIssueUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ class ProjectNotFoundError extends Error {
|
|
|
9
9
|
}
|
|
10
10
|
exports.ProjectNotFoundError = ProjectNotFoundError;
|
|
11
11
|
class HandleScheduledEventUseCase {
|
|
12
|
-
constructor(actionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase, clearNextActionHourUseCase, analyzeProblemByIssueUseCase, analyzeStoriesUseCase, clearDependedIssueURLUseCase, createEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase, dateRepository, spreadsheetRepository, projectRepository, issueRepository) {
|
|
12
|
+
constructor(actionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase, clearNextActionHourUseCase, analyzeProblemByIssueUseCase, analyzeStoriesUseCase, clearDependedIssueURLUseCase, createEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase, startPreparationUseCase, dateRepository, spreadsheetRepository, projectRepository, issueRepository) {
|
|
13
13
|
this.actionAnnouncementUseCase = actionAnnouncementUseCase;
|
|
14
14
|
this.setWorkflowManagementIssueToStoryUseCase = setWorkflowManagementIssueToStoryUseCase;
|
|
15
15
|
this.clearNextActionHourUseCase = clearNextActionHourUseCase;
|
|
@@ -23,6 +23,7 @@ class HandleScheduledEventUseCase {
|
|
|
23
23
|
this.createNewStoryByLabelUseCase = createNewStoryByLabelUseCase;
|
|
24
24
|
this.assignNoAssigneeIssueToManagerUseCase = assignNoAssigneeIssueToManagerUseCase;
|
|
25
25
|
this.updateIssueStatusByLabelUseCase = updateIssueStatusByLabelUseCase;
|
|
26
|
+
this.startPreparationUseCase = startPreparationUseCase;
|
|
26
27
|
this.dateRepository = dateRepository;
|
|
27
28
|
this.spreadsheetRepository = spreadsheetRepository;
|
|
28
29
|
this.projectRepository = projectRepository;
|
|
@@ -115,14 +116,7 @@ ${JSON.stringify(e)}
|
|
|
115
116
|
await this.analyzeProblemByIssueUseCase.run({
|
|
116
117
|
targetDates: targetDateTimes,
|
|
117
118
|
project,
|
|
118
|
-
issues,
|
|
119
|
-
cacheUsed,
|
|
120
|
-
manager: input.manager,
|
|
121
|
-
members: input.workingReport.members,
|
|
122
|
-
org: input.org,
|
|
123
|
-
repo: input.workingReport.repo,
|
|
124
119
|
storyObjectMap: storyObjectMap,
|
|
125
|
-
disabledStatus: input.disabledStatus,
|
|
126
120
|
});
|
|
127
121
|
await this.actionAnnouncementUseCase.run({
|
|
128
122
|
targetDates: targetDateTimes,
|
|
@@ -207,6 +201,17 @@ ${JSON.stringify(e)}
|
|
|
207
201
|
issues,
|
|
208
202
|
defaultStatus: input.defaultStatus,
|
|
209
203
|
});
|
|
204
|
+
if (input.startPreparation) {
|
|
205
|
+
await this.startPreparationUseCase.run({
|
|
206
|
+
projectUrl: input.projectUrl,
|
|
207
|
+
awaitingWorkspaceStatus: input.startPreparation.awaitingWorkspaceStatus,
|
|
208
|
+
preparationStatus: input.startPreparation.preparationStatus,
|
|
209
|
+
defaultAgentName: input.startPreparation.defaultAgentName,
|
|
210
|
+
logFilePath: input.startPreparation.logFilePath,
|
|
211
|
+
maximumPreparingIssuesCount: input.startPreparation.maximumPreparingIssuesCount,
|
|
212
|
+
allowIssueCacheMinutes: input.allowIssueCacheMinutes,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
210
215
|
};
|
|
211
216
|
this.findTargetDateAndUpdateLastExecutionDateTime = async (spreadsheetUrl, now) => {
|
|
212
217
|
const sheetValues = await this.spreadsheetRepository.getSheet(spreadsheetUrl, 'HandleScheduledEvent');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleScheduledEventUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/HandleScheduledEventUseCase.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"HandleScheduledEventUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/HandleScheduledEventUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.encodeForURI =
|
|
4
|
-
const isVisibleIssue = (issue, member, targetDate, disabledStatus) => {
|
|
5
|
-
if ((issue.nextActionDate !== null &&
|
|
6
|
-
issue.nextActionDate.getTime() > targetDate.getTime()) ||
|
|
7
|
-
(issue.nextActionHour !== null &&
|
|
8
|
-
issue.nextActionHour > targetDate.getHours()) ||
|
|
9
|
-
issue.state !== 'OPEN' ||
|
|
10
|
-
!issue.assignees.includes(member) ||
|
|
11
|
-
issue.status === disabledStatus) {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
return true;
|
|
15
|
-
};
|
|
16
|
-
exports.isVisibleIssue = isVisibleIssue;
|
|
3
|
+
exports.encodeForURI = void 0;
|
|
17
4
|
const encodeForURI = (url) => {
|
|
18
5
|
if (!url) {
|
|
19
6
|
return '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/domain/usecases/utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/domain/usecases/utils.ts"],"names":[],"mappings":";;;AAAO,MAAM,YAAY,GAAG,CAAC,GAAmB,EAAU,EAAE;IAC1D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC,CAAC;AALW,QAAA,YAAY,gBAKvB"}
|
package/package.json
CHANGED
|
@@ -81,6 +81,15 @@ jest.mock(
|
|
|
81
81
|
jest.mock('../../../domain/usecases/UpdateIssueStatusByLabelUseCase', () => ({
|
|
82
82
|
UpdateIssueStatusByLabelUseCase: jest.fn().mockImplementation(() => ({})),
|
|
83
83
|
}));
|
|
84
|
+
jest.mock('../../../domain/usecases/StartPreparationUseCase', () => ({
|
|
85
|
+
StartPreparationUseCase: jest.fn().mockImplementation(() => ({})),
|
|
86
|
+
}));
|
|
87
|
+
jest.mock('../../repositories/NodeLocalCommandRunner', () => ({
|
|
88
|
+
NodeLocalCommandRunner: jest.fn().mockImplementation(() => ({})),
|
|
89
|
+
}));
|
|
90
|
+
jest.mock('../../repositories/StubClaudeRepository', () => ({
|
|
91
|
+
StubClaudeRepository: jest.fn().mockImplementation(() => ({})),
|
|
92
|
+
}));
|
|
84
93
|
|
|
85
94
|
import { HandleScheduledEventUseCaseHandler } from './HandleScheduledEventUseCaseHandler';
|
|
86
95
|
import { GraphqlProjectRepository } from '../../repositories/GraphqlProjectRepository';
|
|
@@ -30,6 +30,9 @@ import { CheerioProjectRepository } from '../../repositories/CheerioProjectRepos
|
|
|
30
30
|
import { ProjectRepository } from '../../../domain/usecases/adapter-interfaces/ProjectRepository';
|
|
31
31
|
import { AssignNoAssigneeIssueToManagerUseCase } from '../../../domain/usecases/AssignNoAssigneeIssueToManagerUseCase';
|
|
32
32
|
import { UpdateIssueStatusByLabelUseCase } from '../../../domain/usecases/UpdateIssueStatusByLabelUseCase';
|
|
33
|
+
import { StartPreparationUseCase } from '../../../domain/usecases/StartPreparationUseCase';
|
|
34
|
+
import { NodeLocalCommandRunner } from '../../repositories/NodeLocalCommandRunner';
|
|
35
|
+
import { StubClaudeRepository } from '../../repositories/StubClaudeRepository';
|
|
33
36
|
|
|
34
37
|
export class HandleScheduledEventUseCaseHandler {
|
|
35
38
|
handle = async (
|
|
@@ -175,6 +178,14 @@ export class HandleScheduledEventUseCaseHandler {
|
|
|
175
178
|
const updateIssueStatusByLabelUseCase = new UpdateIssueStatusByLabelUseCase(
|
|
176
179
|
issueRepository,
|
|
177
180
|
);
|
|
181
|
+
const nodeLocalCommandRunner = new NodeLocalCommandRunner();
|
|
182
|
+
const stubClaudeRepository = new StubClaudeRepository();
|
|
183
|
+
const startPreparationUseCase = new StartPreparationUseCase(
|
|
184
|
+
projectRepository,
|
|
185
|
+
issueRepository,
|
|
186
|
+
stubClaudeRepository,
|
|
187
|
+
nodeLocalCommandRunner,
|
|
188
|
+
);
|
|
178
189
|
|
|
179
190
|
const handleScheduledEventUseCase = new HandleScheduledEventUseCase(
|
|
180
191
|
actionAnnouncement,
|
|
@@ -190,6 +201,7 @@ export class HandleScheduledEventUseCaseHandler {
|
|
|
190
201
|
createNewStoryByLabel,
|
|
191
202
|
assignNoAssigneeIssueToManagerUseCase,
|
|
192
203
|
updateIssueStatusByLabelUseCase,
|
|
204
|
+
startPreparationUseCase,
|
|
193
205
|
systemDateRepository,
|
|
194
206
|
googleSpreadsheetRepository,
|
|
195
207
|
projectRepository,
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
const mockExecAsync = jest.fn();
|
|
2
|
+
|
|
3
|
+
jest.mock('child_process', () => ({
|
|
4
|
+
exec: jest.fn(),
|
|
5
|
+
}));
|
|
6
|
+
|
|
7
|
+
jest.mock('util', () => ({
|
|
8
|
+
promisify: jest.fn(() => mockExecAsync),
|
|
9
|
+
}));
|
|
10
|
+
|
|
11
|
+
import { NodeLocalCommandRunner } from './NodeLocalCommandRunner';
|
|
12
|
+
|
|
13
|
+
describe('NodeLocalCommandRunner', () => {
|
|
14
|
+
let runner: NodeLocalCommandRunner;
|
|
15
|
+
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
jest.clearAllMocks();
|
|
18
|
+
runner = new NodeLocalCommandRunner();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
describe('runCommand', () => {
|
|
22
|
+
it('should execute command successfully', async () => {
|
|
23
|
+
mockExecAsync.mockResolvedValue({
|
|
24
|
+
stdout: 'command output',
|
|
25
|
+
stderr: '',
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const result = await runner.runCommand('echo "test"');
|
|
29
|
+
|
|
30
|
+
expect(result).toEqual({
|
|
31
|
+
stdout: 'command output',
|
|
32
|
+
stderr: '',
|
|
33
|
+
exitCode: 0,
|
|
34
|
+
});
|
|
35
|
+
expect(mockExecAsync).toHaveBeenCalledWith('echo "test"');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('should handle command errors with exit code', async () => {
|
|
39
|
+
const error = Object.assign(new Error('Command failed'), {
|
|
40
|
+
code: 2,
|
|
41
|
+
stdout: 'partial output',
|
|
42
|
+
stderr: 'error message',
|
|
43
|
+
});
|
|
44
|
+
mockExecAsync.mockRejectedValue(error);
|
|
45
|
+
|
|
46
|
+
const result = await runner.runCommand('invalid-command');
|
|
47
|
+
|
|
48
|
+
expect(result).toEqual({
|
|
49
|
+
stdout: 'partial output',
|
|
50
|
+
stderr: 'error message',
|
|
51
|
+
exitCode: 2,
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('should default to exit code 1 when code is not a number', async () => {
|
|
56
|
+
const error = Object.assign(new Error('Command failed'), {
|
|
57
|
+
code: 'ENOENT',
|
|
58
|
+
stdout: '',
|
|
59
|
+
stderr: 'command not found',
|
|
60
|
+
});
|
|
61
|
+
mockExecAsync.mockRejectedValue(error);
|
|
62
|
+
|
|
63
|
+
const result = await runner.runCommand('nonexistent');
|
|
64
|
+
|
|
65
|
+
expect(result).toEqual({
|
|
66
|
+
stdout: '',
|
|
67
|
+
stderr: 'command not found',
|
|
68
|
+
exitCode: 1,
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('should throw error if error format is unexpected', async () => {
|
|
73
|
+
mockExecAsync.mockRejectedValue(new Error('Unexpected error'));
|
|
74
|
+
|
|
75
|
+
await expect(runner.runCommand('command')).rejects.toThrow(
|
|
76
|
+
'Unexpected error',
|
|
77
|
+
);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { LocalCommandRunner } from '../../domain/usecases/adapter-interfaces/LocalCommandRunner';
|
|
2
|
+
import { exec } from 'child_process';
|
|
3
|
+
import { promisify } from 'util';
|
|
4
|
+
|
|
5
|
+
const execAsync = promisify(exec);
|
|
6
|
+
|
|
7
|
+
export class NodeLocalCommandRunner implements LocalCommandRunner {
|
|
8
|
+
async runCommand(command: string): Promise<{
|
|
9
|
+
stdout: string;
|
|
10
|
+
stderr: string;
|
|
11
|
+
exitCode: number;
|
|
12
|
+
}> {
|
|
13
|
+
try {
|
|
14
|
+
const { stdout, stderr } = await execAsync(command);
|
|
15
|
+
return {
|
|
16
|
+
stdout,
|
|
17
|
+
stderr,
|
|
18
|
+
exitCode: 0,
|
|
19
|
+
};
|
|
20
|
+
} catch (error) {
|
|
21
|
+
if (
|
|
22
|
+
error &&
|
|
23
|
+
typeof error === 'object' &&
|
|
24
|
+
'stdout' in error &&
|
|
25
|
+
'stderr' in error &&
|
|
26
|
+
'code' in error
|
|
27
|
+
) {
|
|
28
|
+
return {
|
|
29
|
+
stdout: String(error.stdout),
|
|
30
|
+
stderr: String(error.stderr),
|
|
31
|
+
exitCode: typeof error.code === 'number' ? error.code : 1,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { StubClaudeRepository } from './StubClaudeRepository';
|
|
2
|
+
|
|
3
|
+
describe('StubClaudeRepository', () => {
|
|
4
|
+
let repository: StubClaudeRepository;
|
|
5
|
+
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
repository = new StubClaudeRepository();
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it('should return empty usage array', async () => {
|
|
11
|
+
const result = await repository.getUsage();
|
|
12
|
+
expect(result).toEqual([]);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('should return true for isClaudeAvailable', async () => {
|
|
16
|
+
const result = await repository.isClaudeAvailable(90);
|
|
17
|
+
expect(result).toBe(true);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ClaudeRepository } from '../../domain/usecases/adapter-interfaces/ClaudeRepository';
|
|
2
|
+
import { ClaudeWindowUsage } from '../../domain/entities/ClaudeWindowUsage';
|
|
3
|
+
|
|
4
|
+
export class StubClaudeRepository implements ClaudeRepository {
|
|
5
|
+
async getUsage(): Promise<ClaudeWindowUsage[]> {
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async isClaudeAvailable(_threshold: number): Promise<boolean> {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -1,17 +1,11 @@
|
|
|
1
|
-
import { Issue } from '../entities/Issue';
|
|
2
1
|
import { IssueRepository } from './adapter-interfaces/IssueRepository';
|
|
3
2
|
import { Project } from '../entities/Project';
|
|
4
|
-
import { Member } from '../entities/Member';
|
|
5
3
|
import { DateRepository } from './adapter-interfaces/DateRepository';
|
|
6
4
|
import { StoryObject, StoryObjectMap } from '../entities/StoryObjectMap';
|
|
7
|
-
import { isVisibleIssue } from './utils';
|
|
8
5
|
|
|
9
6
|
export class AnalyzeProblemByIssueUseCase {
|
|
10
7
|
constructor(
|
|
11
|
-
readonly issueRepository: Pick<
|
|
12
|
-
IssueRepository,
|
|
13
|
-
'createNewIssue' | 'createComment'
|
|
14
|
-
>,
|
|
8
|
+
readonly issueRepository: Pick<IssueRepository, 'createComment'>,
|
|
15
9
|
readonly dateRepository: Pick<
|
|
16
10
|
DateRepository,
|
|
17
11
|
'formatDurationToHHMM' | 'formatDateWithDayOfWeek'
|
|
@@ -21,14 +15,7 @@ export class AnalyzeProblemByIssueUseCase {
|
|
|
21
15
|
run = async (input: {
|
|
22
16
|
targetDates: Date[];
|
|
23
17
|
project: Project;
|
|
24
|
-
issues: Issue[];
|
|
25
|
-
cacheUsed: boolean;
|
|
26
|
-
manager: Member['name'];
|
|
27
|
-
members: Member['name'][];
|
|
28
|
-
org: string;
|
|
29
|
-
repo: string;
|
|
30
18
|
storyObjectMap: StoryObjectMap;
|
|
31
|
-
disabledStatus: string;
|
|
32
19
|
}): Promise<void> => {
|
|
33
20
|
const story = input.project.story;
|
|
34
21
|
if (
|
|
@@ -44,7 +31,6 @@ export class AnalyzeProblemByIssueUseCase {
|
|
|
44
31
|
if (!targetDate) {
|
|
45
32
|
return;
|
|
46
33
|
}
|
|
47
|
-
await this.checkInProgress({ ...input, targetDate });
|
|
48
34
|
for (const storyObject of input.storyObjectMap.values()) {
|
|
49
35
|
const storyIssue = storyObject.storyIssue;
|
|
50
36
|
if (!storyIssue) {
|
|
@@ -57,59 +43,6 @@ export class AnalyzeProblemByIssueUseCase {
|
|
|
57
43
|
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
58
44
|
}
|
|
59
45
|
};
|
|
60
|
-
checkInProgress = async (
|
|
61
|
-
input: Parameters<AnalyzeProblemByIssueUseCase['run']>[0] & {
|
|
62
|
-
targetDate: Date;
|
|
63
|
-
},
|
|
64
|
-
) => {
|
|
65
|
-
const assigneeToNotify: Member['name'][] = [];
|
|
66
|
-
for (const member of input.members) {
|
|
67
|
-
let topIssue: Issue | null = null;
|
|
68
|
-
for (const story of input.storyObjectMap.values()) {
|
|
69
|
-
const storyIssueObject = input.storyObjectMap.get(story.story.name);
|
|
70
|
-
if (!storyIssueObject) {
|
|
71
|
-
continue;
|
|
72
|
-
} else if (assigneeToNotify.includes(member)) {
|
|
73
|
-
break;
|
|
74
|
-
}
|
|
75
|
-
for (const issue of storyIssueObject.issues) {
|
|
76
|
-
if (
|
|
77
|
-
!isVisibleIssue(
|
|
78
|
-
issue,
|
|
79
|
-
member,
|
|
80
|
-
input.targetDate,
|
|
81
|
-
input.disabledStatus,
|
|
82
|
-
) ||
|
|
83
|
-
issue.status?.toLowerCase().includes('review') ||
|
|
84
|
-
issue.title.toLowerCase().includes('review') ||
|
|
85
|
-
issue.isPr
|
|
86
|
-
) {
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
if (topIssue === null) {
|
|
90
|
-
topIssue = issue;
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
if (!issue.isInProgress) {
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
assigneeToNotify.push(member);
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
if (assigneeToNotify.length === 0) {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
await this.issueRepository.createNewIssue(
|
|
105
|
-
input.org,
|
|
106
|
-
input.repo,
|
|
107
|
-
'Check in progress',
|
|
108
|
-
`${assigneeToNotify.join('\n')}`,
|
|
109
|
-
[input.manager],
|
|
110
|
-
['story:workflow-management'],
|
|
111
|
-
);
|
|
112
|
-
};
|
|
113
46
|
createSummaryCommentBody = (
|
|
114
47
|
storyObject: StoryObject & {
|
|
115
48
|
storyIssue: NonNullable<StoryObject['storyIssue']>;
|
|
@@ -18,6 +18,7 @@ import { SetNoStoryIssueToStoryUseCase } from './SetNoStoryIssueToStoryUseCase';
|
|
|
18
18
|
import { CreateNewStoryByLabelUseCase } from './CreateNewStoryByLabelUseCase';
|
|
19
19
|
import { AssignNoAssigneeIssueToManagerUseCase } from './AssignNoAssigneeIssueToManagerUseCase';
|
|
20
20
|
import { UpdateIssueStatusByLabelUseCase } from './UpdateIssueStatusByLabelUseCase';
|
|
21
|
+
import { StartPreparationUseCase } from './StartPreparationUseCase';
|
|
21
22
|
|
|
22
23
|
describe('HandleScheduledEventUseCase', () => {
|
|
23
24
|
describe('createTargetDateTimes', () => {
|
|
@@ -99,6 +100,7 @@ describe('HandleScheduledEventUseCase', () => {
|
|
|
99
100
|
mock<AssignNoAssigneeIssueToManagerUseCase>();
|
|
100
101
|
const mockUpdateIssueStatusByLabelUseCase =
|
|
101
102
|
mock<UpdateIssueStatusByLabelUseCase>();
|
|
103
|
+
const mockStartPreparationUseCase = mock<StartPreparationUseCase>();
|
|
102
104
|
const mockDateRepository = mock<DateRepository>();
|
|
103
105
|
const mockSpreadsheetRepository = mock<SpreadsheetRepository>();
|
|
104
106
|
const mockProjectRepository = mock<ProjectRepository>();
|
|
@@ -118,6 +120,7 @@ describe('HandleScheduledEventUseCase', () => {
|
|
|
118
120
|
mockCreateNewStoryByLabelUseCase,
|
|
119
121
|
mockAssignNoAssigneeIssueToManagerUseCase,
|
|
120
122
|
mockUpdateIssueStatusByLabelUseCase,
|
|
123
|
+
mockStartPreparationUseCase,
|
|
121
124
|
mockDateRepository,
|
|
122
125
|
mockSpreadsheetRepository,
|
|
123
126
|
mockProjectRepository,
|
|
@@ -141,30 +144,6 @@ describe('HandleScheduledEventUseCase', () => {
|
|
|
141
144
|
]);
|
|
142
145
|
});
|
|
143
146
|
|
|
144
|
-
it('should call AnalyzeProblemByIssueUseCase with correct parameters', async () => {
|
|
145
|
-
const input = {
|
|
146
|
-
projectName: 'test-project',
|
|
147
|
-
org: 'test-org',
|
|
148
|
-
projectUrl: 'https://github.com/test-org/test-project',
|
|
149
|
-
manager: 'test-manager',
|
|
150
|
-
workingReport: {
|
|
151
|
-
repo: 'test-repo',
|
|
152
|
-
members: ['member1'],
|
|
153
|
-
spreadsheetUrl: 'https://docs.google.com/spreadsheets/test',
|
|
154
|
-
},
|
|
155
|
-
urlOfStoryView: 'https://github.com/test-org/test-project/issues',
|
|
156
|
-
disabledStatus: 'disabled',
|
|
157
|
-
defaultStatus: null,
|
|
158
|
-
disabled: false,
|
|
159
|
-
allowIssueCacheMinutes: 60,
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
const mockProject = mock<Project>();
|
|
163
|
-
mockProjectRepository.getProject.mockResolvedValue(mockProject);
|
|
164
|
-
await useCase.run(input);
|
|
165
|
-
expect(mockAnalyzeProblemByIssueUseCase.run).toHaveBeenCalled();
|
|
166
|
-
});
|
|
167
|
-
|
|
168
147
|
it('should call UpdateIssueStatusByLabelUseCase with correct parameters', async () => {
|
|
169
148
|
const input = {
|
|
170
149
|
projectName: 'test-project',
|
|
@@ -19,6 +19,7 @@ import { SetNoStoryIssueToStoryUseCase } from './SetNoStoryIssueToStoryUseCase';
|
|
|
19
19
|
import { CreateNewStoryByLabelUseCase } from './CreateNewStoryByLabelUseCase';
|
|
20
20
|
import { AssignNoAssigneeIssueToManagerUseCase } from './AssignNoAssigneeIssueToManagerUseCase';
|
|
21
21
|
import { UpdateIssueStatusByLabelUseCase } from './UpdateIssueStatusByLabelUseCase';
|
|
22
|
+
import { StartPreparationUseCase } from './StartPreparationUseCase';
|
|
22
23
|
|
|
23
24
|
export class ProjectNotFoundError extends Error {
|
|
24
25
|
constructor(message: string) {
|
|
@@ -42,6 +43,7 @@ export class HandleScheduledEventUseCase {
|
|
|
42
43
|
readonly createNewStoryByLabelUseCase: CreateNewStoryByLabelUseCase,
|
|
43
44
|
readonly assignNoAssigneeIssueToManagerUseCase: AssignNoAssigneeIssueToManagerUseCase,
|
|
44
45
|
readonly updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase,
|
|
46
|
+
readonly startPreparationUseCase: StartPreparationUseCase,
|
|
45
47
|
readonly dateRepository: DateRepository,
|
|
46
48
|
readonly spreadsheetRepository: SpreadsheetRepository,
|
|
47
49
|
readonly projectRepository: ProjectRepository,
|
|
@@ -63,6 +65,13 @@ export class HandleScheduledEventUseCase {
|
|
|
63
65
|
defaultStatus: string | null;
|
|
64
66
|
disabled: boolean;
|
|
65
67
|
allowIssueCacheMinutes: number;
|
|
68
|
+
startPreparation?: {
|
|
69
|
+
awaitingWorkspaceStatus: string;
|
|
70
|
+
preparationStatus: string;
|
|
71
|
+
defaultAgentName: string;
|
|
72
|
+
logFilePath?: string;
|
|
73
|
+
maximumPreparingIssuesCount: number | null;
|
|
74
|
+
} | null;
|
|
66
75
|
}): Promise<{
|
|
67
76
|
project: Project;
|
|
68
77
|
issues: Issue[];
|
|
@@ -207,14 +216,7 @@ ${JSON.stringify(e)}
|
|
|
207
216
|
await this.analyzeProblemByIssueUseCase.run({
|
|
208
217
|
targetDates: targetDateTimes,
|
|
209
218
|
project,
|
|
210
|
-
issues,
|
|
211
|
-
cacheUsed,
|
|
212
|
-
manager: input.manager,
|
|
213
|
-
members: input.workingReport.members,
|
|
214
|
-
org: input.org,
|
|
215
|
-
repo: input.workingReport.repo,
|
|
216
219
|
storyObjectMap: storyObjectMap,
|
|
217
|
-
disabledStatus: input.disabledStatus,
|
|
218
220
|
});
|
|
219
221
|
await this.actionAnnouncementUseCase.run({
|
|
220
222
|
targetDates: targetDateTimes,
|
|
@@ -299,6 +301,18 @@ ${JSON.stringify(e)}
|
|
|
299
301
|
issues,
|
|
300
302
|
defaultStatus: input.defaultStatus,
|
|
301
303
|
});
|
|
304
|
+
if (input.startPreparation) {
|
|
305
|
+
await this.startPreparationUseCase.run({
|
|
306
|
+
projectUrl: input.projectUrl,
|
|
307
|
+
awaitingWorkspaceStatus: input.startPreparation.awaitingWorkspaceStatus,
|
|
308
|
+
preparationStatus: input.startPreparation.preparationStatus,
|
|
309
|
+
defaultAgentName: input.startPreparation.defaultAgentName,
|
|
310
|
+
logFilePath: input.startPreparation.logFilePath,
|
|
311
|
+
maximumPreparingIssuesCount:
|
|
312
|
+
input.startPreparation.maximumPreparingIssuesCount,
|
|
313
|
+
allowIssueCacheMinutes: input.allowIssueCacheMinutes,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
302
316
|
};
|
|
303
317
|
static createTargetDateTimes = (from: Date, to: Date): Date[] => {
|
|
304
318
|
const targetDateTimes: Date[] = [];
|
|
@@ -1,25 +1,3 @@
|
|
|
1
|
-
import { Issue } from '../entities/Issue';
|
|
2
|
-
import { Member } from '../entities/Member';
|
|
3
|
-
|
|
4
|
-
export const isVisibleIssue = (
|
|
5
|
-
issue: Issue,
|
|
6
|
-
member: Member['name'],
|
|
7
|
-
targetDate: Date,
|
|
8
|
-
disabledStatus: string,
|
|
9
|
-
): boolean => {
|
|
10
|
-
if (
|
|
11
|
-
(issue.nextActionDate !== null &&
|
|
12
|
-
issue.nextActionDate.getTime() > targetDate.getTime()) ||
|
|
13
|
-
(issue.nextActionHour !== null &&
|
|
14
|
-
issue.nextActionHour > targetDate.getHours()) ||
|
|
15
|
-
issue.state !== 'OPEN' ||
|
|
16
|
-
!issue.assignees.includes(member) ||
|
|
17
|
-
issue.status === disabledStatus
|
|
18
|
-
) {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
return true;
|
|
22
|
-
};
|
|
23
1
|
export const encodeForURI = (url?: string | null): string => {
|
|
24
2
|
if (!url) {
|
|
25
3
|
return '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAkB3D,qBAAa,kCAAkC;IAC7C,MAAM,mBACY,MAAM,WACb,OAAO,KACf,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,CAsKP;CACH"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LocalCommandRunner } from '../../domain/usecases/adapter-interfaces/LocalCommandRunner';
|
|
2
|
+
export declare class NodeLocalCommandRunner implements LocalCommandRunner {
|
|
3
|
+
runCommand(command: string): Promise<{
|
|
4
|
+
stdout: string;
|
|
5
|
+
stderr: string;
|
|
6
|
+
exitCode: number;
|
|
7
|
+
}>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=NodeLocalCommandRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeLocalCommandRunner.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/NodeLocalCommandRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6DAA6D,CAAC;AAMjG,qBAAa,sBAAuB,YAAW,kBAAkB;IACzD,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QACzC,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CAyBH"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ClaudeRepository } from '../../domain/usecases/adapter-interfaces/ClaudeRepository';
|
|
2
|
+
import { ClaudeWindowUsage } from '../../domain/entities/ClaudeWindowUsage';
|
|
3
|
+
export declare class StubClaudeRepository implements ClaudeRepository {
|
|
4
|
+
getUsage(): Promise<ClaudeWindowUsage[]>;
|
|
5
|
+
isClaudeAvailable(_threshold: number): Promise<boolean>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=StubClaudeRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StubClaudeRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/StubClaudeRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE5E,qBAAa,oBAAqB,YAAW,gBAAgB;IACrD,QAAQ,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIxC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAG9D"}
|
|
@@ -1,27 +1,15 @@
|
|
|
1
|
-
import { Issue } from '../entities/Issue';
|
|
2
1
|
import { IssueRepository } from './adapter-interfaces/IssueRepository';
|
|
3
2
|
import { Project } from '../entities/Project';
|
|
4
|
-
import { Member } from '../entities/Member';
|
|
5
3
|
import { DateRepository } from './adapter-interfaces/DateRepository';
|
|
6
4
|
import { StoryObject, StoryObjectMap } from '../entities/StoryObjectMap';
|
|
7
5
|
export declare class AnalyzeProblemByIssueUseCase {
|
|
8
|
-
readonly issueRepository: Pick<IssueRepository, '
|
|
6
|
+
readonly issueRepository: Pick<IssueRepository, 'createComment'>;
|
|
9
7
|
readonly dateRepository: Pick<DateRepository, 'formatDurationToHHMM' | 'formatDateWithDayOfWeek'>;
|
|
10
|
-
constructor(issueRepository: Pick<IssueRepository, '
|
|
8
|
+
constructor(issueRepository: Pick<IssueRepository, 'createComment'>, dateRepository: Pick<DateRepository, 'formatDurationToHHMM' | 'formatDateWithDayOfWeek'>);
|
|
11
9
|
run: (input: {
|
|
12
10
|
targetDates: Date[];
|
|
13
11
|
project: Project;
|
|
14
|
-
issues: Issue[];
|
|
15
|
-
cacheUsed: boolean;
|
|
16
|
-
manager: Member["name"];
|
|
17
|
-
members: Member["name"][];
|
|
18
|
-
org: string;
|
|
19
|
-
repo: string;
|
|
20
12
|
storyObjectMap: StoryObjectMap;
|
|
21
|
-
disabledStatus: string;
|
|
22
|
-
}) => Promise<void>;
|
|
23
|
-
checkInProgress: (input: Parameters<AnalyzeProblemByIssueUseCase["run"]>[0] & {
|
|
24
|
-
targetDate: Date;
|
|
25
13
|
}) => Promise<void>;
|
|
26
14
|
createSummaryCommentBody: (storyObject: StoryObject & {
|
|
27
15
|
storyIssue: NonNullable<StoryObject["storyIssue"]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyzeProblemByIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/AnalyzeProblemByIssueUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"AnalyzeProblemByIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/AnalyzeProblemByIssueUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEzE,qBAAa,4BAA4B;IAErC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC;IAChE,QAAQ,CAAC,cAAc,EAAE,IAAI,CAC3B,cAAc,EACd,sBAAsB,GAAG,yBAAyB,CACnD;gBAJQ,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,EACvD,cAAc,EAAE,IAAI,CAC3B,cAAc,EACd,sBAAsB,GAAG,yBAAyB,CACnD;IAGH,GAAG,UAAiB;QAClB,WAAW,EAAE,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,cAAc,EAAE,cAAc,CAAC;KAChC,KAAG,OAAO,CAAC,IAAI,CAAC,CA0Bf;IACF,wBAAwB,gBACT,WAAW,GAAG;QACzB,UAAU,EAAE,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;KACpD,KACA,MAAM,CAyDP;CACH"}
|
|
@@ -19,6 +19,7 @@ import { SetNoStoryIssueToStoryUseCase } from './SetNoStoryIssueToStoryUseCase';
|
|
|
19
19
|
import { CreateNewStoryByLabelUseCase } from './CreateNewStoryByLabelUseCase';
|
|
20
20
|
import { AssignNoAssigneeIssueToManagerUseCase } from './AssignNoAssigneeIssueToManagerUseCase';
|
|
21
21
|
import { UpdateIssueStatusByLabelUseCase } from './UpdateIssueStatusByLabelUseCase';
|
|
22
|
+
import { StartPreparationUseCase } from './StartPreparationUseCase';
|
|
22
23
|
export declare class ProjectNotFoundError extends Error {
|
|
23
24
|
constructor(message: string);
|
|
24
25
|
}
|
|
@@ -36,11 +37,12 @@ export declare class HandleScheduledEventUseCase {
|
|
|
36
37
|
readonly createNewStoryByLabelUseCase: CreateNewStoryByLabelUseCase;
|
|
37
38
|
readonly assignNoAssigneeIssueToManagerUseCase: AssignNoAssigneeIssueToManagerUseCase;
|
|
38
39
|
readonly updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase;
|
|
40
|
+
readonly startPreparationUseCase: StartPreparationUseCase;
|
|
39
41
|
readonly dateRepository: DateRepository;
|
|
40
42
|
readonly spreadsheetRepository: SpreadsheetRepository;
|
|
41
43
|
readonly projectRepository: ProjectRepository;
|
|
42
44
|
readonly issueRepository: IssueRepository;
|
|
43
|
-
constructor(actionAnnouncementUseCase: ActionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase: SetWorkflowManagementIssueToStoryUseCase, clearNextActionHourUseCase: ClearNextActionHourUseCase, analyzeProblemByIssueUseCase: AnalyzeProblemByIssueUseCase, analyzeStoriesUseCase: AnalyzeStoriesUseCase, clearDependedIssueURLUseCase: ClearDependedIssueURLUseCase, createEstimationIssueUseCase: CreateEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase: ConvertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase: ChangeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase: SetNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase: CreateNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase: AssignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase, dateRepository: DateRepository, spreadsheetRepository: SpreadsheetRepository, projectRepository: ProjectRepository, issueRepository: IssueRepository);
|
|
45
|
+
constructor(actionAnnouncementUseCase: ActionAnnouncementUseCase, setWorkflowManagementIssueToStoryUseCase: SetWorkflowManagementIssueToStoryUseCase, clearNextActionHourUseCase: ClearNextActionHourUseCase, analyzeProblemByIssueUseCase: AnalyzeProblemByIssueUseCase, analyzeStoriesUseCase: AnalyzeStoriesUseCase, clearDependedIssueURLUseCase: ClearDependedIssueURLUseCase, createEstimationIssueUseCase: CreateEstimationIssueUseCase, convertCheckboxToIssueInStoryIssueUseCase: ConvertCheckboxToIssueInStoryIssueUseCase, changeStatusByStoryColorUseCase: ChangeStatusByStoryColorUseCase, setNoStoryIssueToStoryUseCase: SetNoStoryIssueToStoryUseCase, createNewStoryByLabelUseCase: CreateNewStoryByLabelUseCase, assignNoAssigneeIssueToManagerUseCase: AssignNoAssigneeIssueToManagerUseCase, updateIssueStatusByLabelUseCase: UpdateIssueStatusByLabelUseCase, startPreparationUseCase: StartPreparationUseCase, dateRepository: DateRepository, spreadsheetRepository: SpreadsheetRepository, projectRepository: ProjectRepository, issueRepository: IssueRepository);
|
|
44
46
|
run: (input: {
|
|
45
47
|
projectName: string;
|
|
46
48
|
org: string;
|
|
@@ -56,6 +58,13 @@ export declare class HandleScheduledEventUseCase {
|
|
|
56
58
|
defaultStatus: string | null;
|
|
57
59
|
disabled: boolean;
|
|
58
60
|
allowIssueCacheMinutes: number;
|
|
61
|
+
startPreparation?: {
|
|
62
|
+
awaitingWorkspaceStatus: string;
|
|
63
|
+
preparationStatus: string;
|
|
64
|
+
defaultAgentName: string;
|
|
65
|
+
logFilePath?: string;
|
|
66
|
+
maximumPreparingIssuesCount: number | null;
|
|
67
|
+
} | null;
|
|
59
68
|
}) => Promise<{
|
|
60
69
|
project: Project;
|
|
61
70
|
issues: Issue[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleScheduledEventUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/HandleScheduledEventUseCase.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;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,wCAAwC,EAAE,MAAM,4CAA4C,CAAC;AACtG,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,yCAAyC,EAAE,MAAM,6CAA6C,CAAC;AACxG,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,qCAAqC,EAAE,MAAM,yCAAyC,CAAC;AAChG,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"HandleScheduledEventUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/HandleScheduledEventUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
import { Issue } from '../entities/Issue';
|
|
2
|
-
import { Member } from '../entities/Member';
|
|
3
|
-
export declare const isVisibleIssue: (issue: Issue, member: Member["name"], targetDate: Date, disabledStatus: string) => boolean;
|
|
4
1
|
export declare const encodeForURI: (url?: string | null) => string;
|
|
5
2
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/utils.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,SAAU,MAAM,GAAG,IAAI,KAAG,MAKlD,CAAC"}
|