github-issue-tower-defence-management 1.38.1 → 1.40.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 (24) hide show
  1. package/.github/workflows/api-created_issue_pr.yml +82 -0
  2. package/.github/workflows/create-pr.yml +12 -5
  3. package/.github/workflows/umino-project.yml +45 -16
  4. package/CHANGELOG.md +20 -0
  5. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +206 -6
  6. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  7. package/bin/domain/usecases/HandleScheduledEventUseCase.js +7 -4
  8. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  9. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js +111 -16
  10. package/bin/domain/usecases/NotifyFinishedIssuePreparationUseCase.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +324 -8
  13. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +146 -0
  14. package/src/domain/usecases/HandleScheduledEventUseCase.ts +17 -3
  15. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.test.ts +982 -167
  16. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts +177 -26
  17. package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +3 -4
  18. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +3 -4
  19. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  20. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  21. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts +5 -1
  22. package/types/domain/usecases/NotifyFinishedIssuePreparationUseCase.d.ts.map +1 -1
  23. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts +2 -3
  24. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts.map +1 -1
@@ -0,0 +1,82 @@
1
+ name: Add to Project
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ issue_or_pr_url:
7
+ description: 'Issue or PR URL (https://github.com/<owner>/<repo>/issues/<number> or .../pull/<number>)'
8
+ required: true
9
+ default: ''
10
+
11
+ env:
12
+ PROJECT_V2_ID: PVT_kwHOAGJHa84AFWnr
13
+
14
+ jobs:
15
+ add-to-project:
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - name: Add to Project
19
+ env:
20
+ GH_TOKEN: ${{ secrets.GH_TOKEN }}
21
+ run: |
22
+ ISSUE_OR_PR_URL="${{ github.event.inputs.issue_or_pr_url }}"
23
+ ISSUE_OR_PR_URL="${ISSUE_OR_PR_URL%%\?*}"
24
+ ISSUE_OR_PR_URL="${ISSUE_OR_PR_URL%/}"
25
+
26
+ if ! echo "$ISSUE_OR_PR_URL" | grep -qE '^https://github\.com/[^/]+/[^/]+/(issues|pull)/[0-9]+$'; then
27
+ echo "Invalid URL format. Expected: https://github.com/<owner>/<repo>/issues/<number> or .../pull/<number>"
28
+ echo "Got: $ISSUE_OR_PR_URL"
29
+ exit 1
30
+ fi
31
+
32
+ REPO_PATH=$(echo "$ISSUE_OR_PR_URL" | awk -F'/' '{print $4"/"$5}')
33
+ NUMBER=$(echo "$ISSUE_OR_PR_URL" | grep -oE '[0-9]+$')
34
+
35
+ if echo "$ISSUE_OR_PR_URL" | grep -q "/pull/"; then
36
+ RESOURCE_TYPE="pulls"
37
+ else
38
+ RESOURCE_TYPE="issues"
39
+ fi
40
+
41
+ REST_RESPONSE=$(curl -s -w "\n%{http_code}" -H "Authorization: token $GH_TOKEN" \
42
+ "https://api.github.com/repos/$REPO_PATH/$RESOURCE_TYPE/$NUMBER")
43
+ HTTP_STATUS=$(echo "$REST_RESPONSE" | tail -n1)
44
+ REST_BODY=$(echo "$REST_RESPONSE" | sed '$d')
45
+
46
+ if [ "$HTTP_STATUS" != "200" ]; then
47
+ echo "REST API returned HTTP $HTTP_STATUS"
48
+ echo "$REST_BODY"
49
+ exit 1
50
+ fi
51
+
52
+ NODE_ID=$(echo "$REST_BODY" | jq -r '.node_id')
53
+
54
+ if [ -z "$NODE_ID" ] || [ "$NODE_ID" = "null" ]; then
55
+ echo "Failed to get node ID. REST response:"
56
+ echo "$REST_BODY"
57
+ exit 1
58
+ fi
59
+
60
+ echo "Node ID: $NODE_ID"
61
+
62
+ GRAPHQL_PAYLOAD=$(jq -n \
63
+ --arg nodeId "$NODE_ID" \
64
+ --arg projectId "$PROJECT_V2_ID" \
65
+ '{"query": "mutation($contentId: ID!, $projectId: ID!) { addProjectV2ItemById(input: { contentId: $contentId, projectId: $projectId }) { item { id } } }", "variables": {"contentId": $nodeId, "projectId": $projectId}}')
66
+
67
+ RESPONSE=$(curl -s -X POST \
68
+ -H "Authorization: bearer $GH_TOKEN" \
69
+ -H "Content-Type: application/json" \
70
+ https://api.github.com/graphql \
71
+ -d "$GRAPHQL_PAYLOAD")
72
+ echo "$RESPONSE"
73
+
74
+ if ! echo "$RESPONSE" | jq '.' > /dev/null 2>&1; then
75
+ echo "Non-JSON response received"
76
+ exit 1
77
+ fi
78
+
79
+ if echo "$RESPONSE" | jq -e '.errors' > /dev/null; then
80
+ echo "GraphQL error occurred"
81
+ exit 1
82
+ fi
@@ -10,6 +10,13 @@ jobs:
10
10
  runs-on: ubuntu-latest
11
11
  if: github.actor != 'dependabot[bot]' && github.actor != 'renovate[bot]'
12
12
  steps:
13
+ - name: Generate hs-bot-gh-ap installation token
14
+ id: app-token
15
+ uses: actions/create-github-app-token@v1
16
+ with:
17
+ app-id: ${{ secrets.HS_BOT_GH_AP_APP_ID }}
18
+ private-key: ${{ secrets.HS_BOT_GH_AP_PRIVATE_KEY }}
19
+
13
20
  - name: Checkout repository
14
21
  uses: actions/checkout@v6
15
22
 
@@ -23,14 +30,14 @@ jobs:
23
30
  EXISTING_PR=$(gh pr list --head "${{ steps.branch_name.outputs.branch }}" --base main --json number --jq '.[0].number // empty')
24
31
  echo "existing_pr=$EXISTING_PR" >> "$GITHUB_OUTPUT"
25
32
  env:
26
- GH_TOKEN: ${{ secrets.GH_TOKEN }}
33
+ GH_TOKEN: ${{ steps.app-token.outputs.token }}
27
34
 
28
35
  - name: Create Pull Request
29
36
  id: create_pr
30
37
  if: steps.check_pr.outputs.existing_pr == ''
31
38
  uses: repo-sync/pull-request@v2
32
39
  with:
33
- github_token: ${{ secrets.GH_TOKEN }}
40
+ github_token: ${{ steps.app-token.outputs.token }}
34
41
  destination_branch: 'main'
35
42
  source_branch: ''
36
43
  pr_title: '${{ steps.branch_name.outputs.branch }}'
@@ -48,7 +55,7 @@ jobs:
48
55
  fi
49
56
  echo "pr_number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
50
57
  env:
51
- GH_TOKEN: ${{ secrets.GH_TOKEN }}
58
+ GH_TOKEN: ${{ steps.app-token.outputs.token }}
52
59
 
53
60
  - name: Assign PR to author
54
61
  if: steps.resolve_pr.outputs.pr_number
@@ -63,7 +70,7 @@ jobs:
63
70
  if: steps.resolve_pr.outputs.pr_number
64
71
  id: get_pr_id
65
72
  run: |
66
- PR_DATA=$(curl -s -H "Authorization: token ${{ secrets.GH_TOKEN }}" -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/pulls/${{ steps.resolve_pr.outputs.pr_number }}")
73
+ PR_DATA=$(curl -s -H "Authorization: token ${{ steps.app-token.outputs.token }}" -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/pulls/${{ steps.resolve_pr.outputs.pr_number }}")
67
74
  PR_ID=$(echo "$PR_DATA" | jq -r '.node_id')
68
75
  echo "node_id=$PR_ID" >> "$GITHUB_OUTPUT"
69
76
 
@@ -71,7 +78,7 @@ jobs:
71
78
  if: steps.resolve_pr.outputs.pr_number
72
79
  run: |
73
80
  RESPONSE=$(curl -s -X POST \
74
- -H "Authorization: bearer ${{ secrets.GH_TOKEN }}" \
81
+ -H "Authorization: bearer ${{ steps.app-token.outputs.token }}" \
75
82
  -H "Content-Type: application/json" \
76
83
  -d '{
77
84
  "query": "mutation($id: ID!) { enablePullRequestAutoMerge(input: { pullRequestId: $id }) { clientMutationId } }",
@@ -108,7 +108,9 @@ jobs:
108
108
  github-token: ${{secrets.GH_TOKEN}}
109
109
  script: |
110
110
  const commentBody = context.payload.comment.body;
111
- const createIssueIndex = commentBody.indexOf('/createissue');
111
+ const commandMatch = /(^|\n)\s*\/createissue\b/m.exec(commentBody);
112
+ if (!commandMatch) return;
113
+ const createIssueIndex = commentBody.indexOf('/createissue', commandMatch.index);
112
114
  const issueTitle = commentBody.slice(createIssueIndex + 12).split('\n')[0].trim();
113
115
  const issueNumber = context.issue.number;
114
116
  const commentId = context.payload.comment.id;
@@ -116,7 +118,7 @@ jobs:
116
118
  const issueBody = `
117
119
  ${commentBody.slice(createIssueIndex + 12).trim()}
118
120
  Created from a comment: ${commentLink}
119
- `;
121
+ `;
120
122
  const newIssue = await github.rest.issues.create({
121
123
  owner: context.repo.owner,
122
124
  repo: context.repo.repo,
@@ -130,6 +132,8 @@ jobs:
130
132
  with:
131
133
  github-token: ${{secrets.GH_TOKEN}}
132
134
  script: |
135
+ const body = context.payload.comment.body;
136
+ if (!/(^|\n)\s*\/(close|done)\b/m.test(body)) return;
133
137
  await github.rest.issues.update({
134
138
  owner: context.repo.owner,
135
139
  repo: context.repo.repo,
@@ -138,18 +142,42 @@ jobs:
138
142
  });
139
143
  - name: Update Date Field
140
144
  if: ${{ github.event_name == 'issue_comment' && github.event.action == 'created' && contains(github.event.comment.body, '/movenextactiondateto') }}
141
- run: |
142
- DATE_STRING=$(echo "${{ github.event.comment.body }}" | grep -oP '(?<=/movenextactiondateto )\d{8}')
143
- OWNER=$(echo ${{ github.repository }} | cut -d '/' -f 1)
144
- REPO=$(echo ${{ github.repository }} | cut -d '/' -f 2)
145
- ITEM_ID=$(curl -X POST -H "Authorization: bearer ${{ secrets.GH_TOKEN }}" -H "Content-Type: application/json" --data '{ "query": "query { repository(owner: \"'$OWNER'\", name: \"'$REPO'\") { issue(number: '${{ github.event.issue.number }}') { projectItems(first: 10) { nodes { id } } } } }" }' https://api.github.com/graphql | jq -r '.data.repository.issue.projectItems.nodes[0].id')
146
- UPDATE_FIELD_DATA="{\"query\":\"mutation { updateProjectV2ItemFieldValue(input: {projectId: \\\"${{ env.project_v2_id }}\\\", fieldId: \\\"${{ env.field_id }}\\\", itemId: \\\"$ITEM_ID\\\", value: { date: \\\"$DATE_STRING\\\" }}) { clientMutationId }}\"}"
147
- curl --request POST \
148
- -f \
149
- --url https://api.github.com/graphql \
150
- --header "Authorization: Bearer ${{ env.gh_project_token }}" \
151
- --header "Content-Type: application/json" \
152
- --data "$UPDATE_FIELD_DATA"
145
+ uses: actions/github-script@v9
146
+ env:
147
+ PROJECT_V2_ID: ${{ env.project_v2_id }}
148
+ FIELD_ID: ${{ env.field_id }}
149
+ with:
150
+ github-token: ${{ secrets.GH_TOKEN }}
151
+ script: |
152
+ const commentBody = context.payload.comment.body;
153
+ const commandMatch = /(^|\n)\s*\/movenextactiondateto\b/m.exec(commentBody);
154
+ if (!commandMatch) return;
155
+ const dateMatch = /\/movenextactiondateto\s+(\d{8})/.exec(commentBody.slice(commandMatch.index));
156
+ if (!dateMatch) return;
157
+ const dateString = dateMatch[1];
158
+ const projectId = process.env.PROJECT_V2_ID;
159
+ const fieldId = process.env.FIELD_ID;
160
+ const itemIdResult = await github.graphql(
161
+ `query($owner: String!, $repo: String!, $number: Int!) {
162
+ repository(owner: $owner, name: $repo) {
163
+ issue(number: $number) {
164
+ projectItems(first: 10) { nodes { id } }
165
+ }
166
+ }
167
+ }`,
168
+ { owner: context.repo.owner, repo: context.repo.repo, number: context.issue.number }
169
+ );
170
+ const itemId = itemIdResult.repository.issue.projectItems.nodes[0]?.id;
171
+ if (!itemId) { core.setFailed('No project item found for this issue'); return; }
172
+ await github.graphql(
173
+ `mutation($projectId: ID!, $fieldId: ID!, $itemId: ID!, $date: Date!) {
174
+ updateProjectV2ItemFieldValue(input: {
175
+ projectId: $projectId, fieldId: $fieldId, itemId: $itemId,
176
+ value: { date: $date }
177
+ }) { clientMutationId }
178
+ }`,
179
+ { projectId, fieldId, itemId, date: dateString }
180
+ );
153
181
  - name: Change Assignee
154
182
  if: ${{ github.event_name == 'issue_comment' && github.event.action == 'created' && contains(github.event.comment.body, '/changeassignee ') }}
155
183
  uses: actions/github-script@v9
@@ -157,8 +185,9 @@ jobs:
157
185
  github-token: ${{secrets.GH_TOKEN}}
158
186
  script: |
159
187
  const commentBody = context.payload.comment.body;
160
- const assigneeIndex = commentBody.indexOf('/changeassignee ') + 16;
161
- const assigneeName = commentBody.slice(assigneeIndex).split(' ')[0].trim();
188
+ const commandMatch = /(^|\n)\s*\/changeassignee\s+(\S+)/m.exec(commentBody);
189
+ if (!commandMatch) return;
190
+ const assigneeName = commandMatch[2].trim();
162
191
  await github.rest.issues.update({
163
192
  owner: context.repo.owner,
164
193
  repo: context.repo.repo,
package/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ # [1.40.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.39.0...v1.40.0) (2026-05-07)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **core:** replace type assertions with type guard functions in ApiV3CheerioRestIssueRepository ([f6c71cb](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/f6c71cbdb52b136ad2ddfda582011e456c67e01d))
7
+ * **core:** use typia.is for proper runtime type validation in ApiV3CheerioRestIssueRepository ([2e3b77c](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/2e3b77cc829ba03be489942ebb38f3e3d91b85e6))
8
+
9
+
10
+ ### Features
11
+
12
+ * **core:** port NotifyFinishedIssuePreparationUseCase from preparator ([2751863](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/275186338a59d7b22fec1d39d4743b552da7975e))
13
+
14
+ # [1.39.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.38.1...v1.39.0) (2026-05-04)
15
+
16
+
17
+ ### Features
18
+
19
+ * **core:** add progress logs to HandleScheduledEventUseCase story-issue creation loop ([a9f5e37](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/a9f5e3712833da43efc18ee9ff709b074339e52c)), closes [#441](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/441)
20
+
1
21
  ## [1.38.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.38.0...v1.38.1) (2026-05-04)
2
22
 
3
23
 
@@ -7,6 +7,18 @@ exports.ApiV3CheerioRestIssueRepository = void 0;
7
7
  const typia_1 = __importDefault(require("typia"));
8
8
  const BaseGitHubRepository_1 = require("../BaseGitHubRepository");
9
9
  const utils_1 = require("../utils");
10
+ function isGetPullRequestResponse(value) {
11
+ return (() => { const _io0 = input => (undefined === input.data || "object" === typeof input.data && null !== input.data && false === Array.isArray(input.data) && _io1(input.data)) && (undefined === input.errors || Array.isArray(input.errors) && input.errors.every(elem => "object" === typeof elem && null !== elem && _io22(elem))); const _io1 = input => undefined === input.repository || "object" === typeof input.repository && null !== input.repository && false === Array.isArray(input.repository) && _io2(input.repository); const _io2 = input => undefined === input.pullRequest || "object" === typeof input.pullRequest && null !== input.pullRequest && _io3(input.pullRequest); const _io3 = input => "string" === typeof input.state && "string" === typeof input.mergeable && ("object" === typeof input.commits && null !== input.commits && _io4(input.commits)) && ("object" === typeof input.reviewThreads && null !== input.reviewThreads && _io11(input.reviewThreads)) && ("object" === typeof input.baseRepository && null !== input.baseRepository && _io13(input.baseRepository)); const _io4 = input => Array.isArray(input.nodes) && input.nodes.every(elem => "object" === typeof elem && null !== elem && _io5(elem)); const _io5 = input => "object" === typeof input.commit && null !== input.commit && _io6(input.commit); const _io6 = input => null === input.statusCheckRollup || "object" === typeof input.statusCheckRollup && null !== input.statusCheckRollup && _io7(input.statusCheckRollup); const _io7 = input => "string" === typeof input.state && ("object" === typeof input.contexts && null !== input.contexts && _io8(input.contexts)); const _io8 = input => Array.isArray(input.nodes) && input.nodes.every(elem => "object" === typeof elem && null !== elem && false === Array.isArray(elem) && _iu0(elem)); const _io9 = input => (undefined === input.name || "string" === typeof input.name) && (undefined === input.status || "string" === typeof input.status) && (null === input.conclusion || undefined === input.conclusion || "string" === typeof input.conclusion); const _io10 = input => (undefined === input.context || "string" === typeof input.context) && (undefined === input.state || "string" === typeof input.state); const _io11 = input => Array.isArray(input.nodes) && input.nodes.every(elem => "object" === typeof elem && null !== elem && _io12(elem)); const _io12 = input => "boolean" === typeof input.isResolved; const _io13 = input => "object" === typeof input.branchProtectionRules && null !== input.branchProtectionRules && _io14(input.branchProtectionRules) && ("object" === typeof input.rulesets && null !== input.rulesets && _io16(input.rulesets)); const _io14 = input => Array.isArray(input.nodes) && input.nodes.every(elem => "object" === typeof elem && null !== elem && _io15(elem)); const _io15 = input => Array.isArray(input.requiredStatusCheckContexts) && input.requiredStatusCheckContexts.every(elem => "string" === typeof elem); const _io16 = input => Array.isArray(input.nodes) && input.nodes.every(elem => "object" === typeof elem && null !== elem && _io17(elem)); const _io17 = input => "object" === typeof input.rules && null !== input.rules && _io18(input.rules); const _io18 = input => Array.isArray(input.nodes) && input.nodes.every(elem => "object" === typeof elem && null !== elem && _io19(elem)); const _io19 = input => "string" === typeof input.type && (undefined === input.parameters || "object" === typeof input.parameters && null !== input.parameters && false === Array.isArray(input.parameters) && _io20(input.parameters)); const _io20 = input => undefined === input.requiredStatusChecks || Array.isArray(input.requiredStatusChecks) && input.requiredStatusChecks.every(elem => "object" === typeof elem && null !== elem && _io21(elem)); const _io21 = input => "string" === typeof input.context; const _io22 = input => "string" === typeof input.message; const _iu0 = input => (() => {
12
+ if (_io9(input))
13
+ return _io9(input);
14
+ if (_io10(input))
15
+ return _io10(input);
16
+ return false;
17
+ })(); return input => "object" === typeof input && null !== input && false === Array.isArray(input) && _io0(input); })()(value);
18
+ }
19
+ function isFindRelatedPRsResponse(value) {
20
+ return (() => { const _io0 = input => (undefined === input.data || "object" === typeof input.data && null !== input.data && false === Array.isArray(input.data) && _io1(input.data)) && (undefined === input.errors || Array.isArray(input.errors) && input.errors.every(elem => "object" === typeof elem && null !== elem && _io7(elem))); const _io1 = input => undefined === input.repository || "object" === typeof input.repository && null !== input.repository && false === Array.isArray(input.repository) && _io2(input.repository); const _io2 = input => undefined === input.issue || "object" === typeof input.issue && null !== input.issue && _io3(input.issue); const _io3 = input => "object" === typeof input.timelineItems && null !== input.timelineItems && _io4(input.timelineItems); const _io4 = input => Array.isArray(input.nodes) && input.nodes.every(elem => "object" === typeof elem && null !== elem && false === Array.isArray(elem) && _io5(elem)); const _io5 = input => undefined === input.source || "object" === typeof input.source && null !== input.source && false === Array.isArray(input.source) && _io6(input.source); const _io6 = input => (undefined === input.url || "string" === typeof input.url) && (undefined === input.state || "string" === typeof input.state); const _io7 = input => "string" === typeof input.message; return input => "object" === typeof input && null !== input && false === Array.isArray(input) && _io0(input); })()(value);
21
+ }
10
22
  class ApiV3CheerioRestIssueRepository extends BaseGitHubRepository_1.BaseGitHubRepository {
11
23
  constructor(apiV3IssueRepository, restIssueRepository, graphqlProjectItemRepository, localStorageCacheRepository, localStorageRepository, jsonFilePath = './tmp/github.com.cookies.json', ghToken = process.env.GH_TOKEN || 'dummy', ghUserName = process.env.GH_USER_NAME, ghUserPassword = process.env.GH_USER_PASSWORD, ghAuthenticatorKey = process.env
12
24
  .GH_AUTHENTICATOR_KEY) {
@@ -130,11 +142,143 @@ class ApiV3CheerioRestIssueRepository extends BaseGitHubRepository_1.BaseGitHubR
130
142
  }
131
143
  return this.convertProjectItemToIssue(projectItem);
132
144
  };
133
- this.updateNextActionDate = async (project, issue, date) => {
134
- if (project.nextActionDate === null) {
135
- throw new Error('nextActionDate is not defined');
145
+ this.updateNextActionDate = async (issueUrl, project, date) => {
146
+ if (!project.nextActionDate) {
147
+ return;
136
148
  }
137
- return this.graphqlProjectItemRepository.updateProjectField(project.id, project.nextActionDate.fieldId, issue.itemId, { date: date.toISOString() });
149
+ const projectItem = await this.graphqlProjectItemRepository.fetchProjectItemByUrl(issueUrl);
150
+ if (!projectItem) {
151
+ return;
152
+ }
153
+ return this.graphqlProjectItemRepository.updateProjectField(project.id, project.nextActionDate.fieldId, projectItem.id, { date: date.toISOString().split('T')[0] });
154
+ };
155
+ this.getOpenPullRequest = async (prUrl) => {
156
+ const match = prUrl.match(/https:\/\/github\.com\/([^/]+)\/([^/]+)\/pull\/(\d+)/);
157
+ if (!match) {
158
+ return null;
159
+ }
160
+ const [, owner, repo, prNumberStr] = match;
161
+ const prNumber = parseInt(prNumberStr, 10);
162
+ const query = `query GetPullRequest($owner: String!, $repo: String!, $number: Int!) {
163
+ repository(owner: $owner, name: $repo) {
164
+ pullRequest(number: $number) {
165
+ state
166
+ mergeable
167
+ commits(last: 1) {
168
+ nodes {
169
+ commit {
170
+ statusCheckRollup {
171
+ state
172
+ contexts(first: 100) {
173
+ nodes {
174
+ ... on CheckRun {
175
+ name
176
+ status
177
+ conclusion
178
+ }
179
+ ... on StatusContext {
180
+ context
181
+ state
182
+ }
183
+ }
184
+ }
185
+ }
186
+ }
187
+ }
188
+ }
189
+ reviewThreads(first: 100) {
190
+ nodes {
191
+ isResolved
192
+ }
193
+ }
194
+ baseRepository {
195
+ branchProtectionRules(first: 10) {
196
+ nodes {
197
+ requiredStatusCheckContexts
198
+ }
199
+ }
200
+ rulesets(first: 10) {
201
+ nodes {
202
+ rules(first: 50) {
203
+ nodes {
204
+ type
205
+ parameters {
206
+ ... on RequiredStatusChecksParameters {
207
+ requiredStatusChecks {
208
+ context
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }
214
+ }
215
+ }
216
+ }
217
+ }
218
+ }
219
+ }`;
220
+ const response = await fetch('https://api.github.com/graphql', {
221
+ method: 'POST',
222
+ headers: {
223
+ Authorization: `Bearer ${this.ghToken}`,
224
+ 'Content-Type': 'application/json',
225
+ },
226
+ body: JSON.stringify({
227
+ query,
228
+ variables: { owner, repo, number: prNumber },
229
+ }),
230
+ });
231
+ const responseData = await response.json();
232
+ if (!isGetPullRequestResponse(responseData)) {
233
+ throw new Error('Unexpected response shape when fetching pull request from GitHub GraphQL API');
234
+ }
235
+ if (responseData.errors && responseData.errors.length > 0) {
236
+ throw new Error(responseData.errors.map((e) => e.message).join('\n'));
237
+ }
238
+ const pr = responseData.data?.repository?.pullRequest;
239
+ if (!pr || pr.state !== 'OPEN') {
240
+ return null;
241
+ }
242
+ const isConflicted = pr.mergeable === 'CONFLICTING';
243
+ const lastCommit = pr.commits.nodes[pr.commits.nodes.length - 1];
244
+ const rollup = lastCommit?.commit?.statusCheckRollup;
245
+ const isCiStateSuccess = rollup?.state === 'SUCCESS';
246
+ const requiredCheckNames = [];
247
+ for (const rule of pr.baseRepository.branchProtectionRules.nodes) {
248
+ requiredCheckNames.push(...rule.requiredStatusCheckContexts);
249
+ }
250
+ for (const ruleset of pr.baseRepository.rulesets.nodes) {
251
+ for (const rule of ruleset.rules.nodes) {
252
+ if (rule.type === 'REQUIRED_STATUS_CHECKS' &&
253
+ rule.parameters?.requiredStatusChecks) {
254
+ requiredCheckNames.push(...rule.parameters.requiredStatusChecks.map((c) => c.context));
255
+ }
256
+ }
257
+ }
258
+ const contextNodes = rollup?.contexts?.nodes ?? [];
259
+ const completedCheckNames = contextNodes
260
+ .map((node) => {
261
+ if ('name' in node && node.name) {
262
+ return node.name;
263
+ }
264
+ if ('context' in node && node.context) {
265
+ return node.context;
266
+ }
267
+ return null;
268
+ })
269
+ .filter((name) => name !== null);
270
+ const missingRequiredCheckNames = requiredCheckNames.filter((required) => !completedCheckNames.includes(required));
271
+ const isPassedAllCiJob = isCiStateSuccess && missingRequiredCheckNames.length === 0;
272
+ const isResolvedAllReviewComments = pr.reviewThreads.nodes.every((thread) => thread.isResolved);
273
+ return {
274
+ url: prUrl,
275
+ isConflicted,
276
+ isPassedAllCiJob,
277
+ isCiStateSuccess,
278
+ isResolvedAllReviewComments,
279
+ isBranchOutOfDate: false,
280
+ missingRequiredCheckNames,
281
+ };
138
282
  };
139
283
  this.updateNextActionHour = async (project, issue, hour) => {
140
284
  return this.graphqlProjectItemRepository.updateProjectField(project.id, project.nextActionHour.fieldId, issue.itemId, { number: hour });
@@ -167,8 +311,64 @@ class ApiV3CheerioRestIssueRepository extends BaseGitHubRepository_1.BaseGitHubR
167
311
  this.update = async (issue, _project) => {
168
312
  await this.updateIssue(issue);
169
313
  };
170
- this.findRelatedOpenPRs = async (_issueUrl) => {
171
- throw new Error('findRelatedOpenPRs is not implemented');
314
+ this.findRelatedOpenPRs = async (issueUrl) => {
315
+ const match = issueUrl.match(/https:\/\/github\.com\/([^/]+)\/([^/]+)\/issues\/(\d+)/);
316
+ if (!match) {
317
+ return [];
318
+ }
319
+ const [, owner, repo, issueNumberStr] = match;
320
+ const issueNumber = parseInt(issueNumberStr, 10);
321
+ const query = `query FindRelatedPRs($owner: String!, $repo: String!, $number: Int!) {
322
+ repository(owner: $owner, name: $repo) {
323
+ issue(number: $number) {
324
+ timelineItems(itemTypes: [CROSS_REFERENCED_EVENT], first: 50) {
325
+ nodes {
326
+ ... on CrossReferencedEvent {
327
+ source {
328
+ ... on PullRequest {
329
+ url
330
+ state
331
+ }
332
+ }
333
+ }
334
+ }
335
+ }
336
+ }
337
+ }
338
+ }`;
339
+ const response = await fetch('https://api.github.com/graphql', {
340
+ method: 'POST',
341
+ headers: {
342
+ Authorization: `Bearer ${this.ghToken}`,
343
+ 'Content-Type': 'application/json',
344
+ },
345
+ body: JSON.stringify({
346
+ query,
347
+ variables: { owner, repo, number: issueNumber },
348
+ }),
349
+ });
350
+ const responseData = await response.json();
351
+ if (!isFindRelatedPRsResponse(responseData)) {
352
+ throw new Error('Unexpected response shape when fetching related PRs from GitHub GraphQL API');
353
+ }
354
+ if (responseData.errors && responseData.errors.length > 0) {
355
+ throw new Error(responseData.errors.map((e) => e.message).join('\n'));
356
+ }
357
+ const nodes = responseData.data?.repository?.issue?.timelineItems?.nodes ?? [];
358
+ const openPrUrls = nodes
359
+ .filter((node) => node.source?.url &&
360
+ node.source?.state === 'OPEN' &&
361
+ node.source.url.includes('/pull/'))
362
+ .map((node) => node.source?.url)
363
+ .filter((url) => url !== undefined);
364
+ const results = [];
365
+ for (const prUrl of openPrUrls) {
366
+ const pr = await this.getOpenPullRequest(prUrl);
367
+ if (pr) {
368
+ results.push(pr);
369
+ }
370
+ }
371
+ return results;
172
372
  };
173
373
  this.getAllOpened = async (_project) => {
174
374
  throw new Error('getAllOpened is not implemented');
@@ -1 +1 @@
1
- {"version":3,"file":"ApiV3CheerioRestIssueRepository.js","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiV3CheerioRestIssueRepository.js","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts"],"names":[],"mappings":"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"}
@@ -57,18 +57,19 @@ class HandleScheduledEventUseCase {
57
57
  storyObject.story.name.startsWith('regular / ')) {
58
58
  continue;
59
59
  }
60
+ const storyStartTime = Date.now();
61
+ console.log(`[HandleScheduledEvent] Creating story issue: story="${storyObject.story.name}"`);
60
62
  const issueNumber = await this.issueRepository.createNewIssue(input.org, input.workingReport.repo, storyObject.story.name, storyObject.story.description, [input.manager], ['story']);
61
63
  const issueUrl = `https://github.com/${input.org}/${input.workingReport.repo}/issues/${issueNumber}`;
62
64
  let issue = null;
63
65
  for (let i = 0; i < 3; i++) {
66
+ console.log(`[HandleScheduledEvent] Polling for issue (attempt ${i + 1}/3): url=${issueUrl}`);
64
67
  await new Promise((resolve) => setTimeout(resolve, 30 * 1000));
65
68
  issue = await this.issueRepository.getIssueByUrl(issueUrl);
66
- if (!issue) {
67
- continue;
68
- }
69
- else if (!issue.itemId) {
69
+ if (!issue || !issue.itemId) {
70
70
  continue;
71
71
  }
72
+ console.log(`[HandleScheduledEvent] Issue found: url=${issueUrl} itemId=${issue.itemId}`);
72
73
  break;
73
74
  }
74
75
  if (!issue) {
@@ -78,6 +79,7 @@ class HandleScheduledEventUseCase {
78
79
  throw new Error(`Issue itemId not found. URL: ${issueUrl}`);
79
80
  }
80
81
  await this.issueRepository.updateStory({ ...project, story: projectStory }, issue, storyObject.story.id);
82
+ console.log(`[HandleScheduledEvent] Waiting for story update: url=${issueUrl}`);
81
83
  await new Promise((resolve) => setTimeout(resolve, 10 * 1000));
82
84
  const newIssue = await this.issueRepository.getIssueByUrl(issueUrl);
83
85
  if (!newIssue) {
@@ -86,6 +88,7 @@ class HandleScheduledEventUseCase {
86
88
  storyObject.storyIssue = newIssue;
87
89
  issues.push(newIssue);
88
90
  storyObject.issues.push(newIssue);
91
+ console.log(`[HandleScheduledEvent] Story issue created: story="${storyObject.story.name}" elapsed=${Date.now() - storyStartTime}ms`);
89
92
  }
90
93
  const targetDateTimes = await this.findTargetDateAndUpdateLastExecutionDateTime(input.workingReport.spreadsheetUrl, now);
91
94
  try {