npm-cli-gh-issue-preparator 1.19.2 → 1.19.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/bin/domain/usecases/StartPreparationUseCase.js +16 -11
- package/bin/domain/usecases/StartPreparationUseCase.js.map +1 -1
- package/package.json +1 -1
- package/src/domain/usecases/StartPreparationUseCase.test.ts +190 -0
- package/src/domain/usecases/StartPreparationUseCase.ts +19 -15
- package/types/domain/usecases/StartPreparationUseCase.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## [1.19.3](https://github.com/HiromiShikata/npm-cli-gh-issue-preparator/compare/v1.19.2...v1.19.3) (2026-03-02)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **core:** aggregate blocker URLs per orgRepo in createWorkflowBockerIsues ([832523b](https://github.com/HiromiShikata/npm-cli-gh-issue-preparator/commit/832523b19e52717202734cb01a48ba8d297030c7))
|
|
7
|
+
* **core:** iterate all workflow blocker stories in createWorkflowBockerIsues ([2435494](https://github.com/HiromiShikata/npm-cli-gh-issue-preparator/commit/2435494af5a771416519ba19ac0d829ee8f2ee27))
|
|
8
|
+
|
|
1
9
|
## [1.19.2](https://github.com/HiromiShikata/npm-cli-gh-issue-preparator/compare/v1.19.1...v1.19.2) (2026-03-01)
|
|
2
10
|
|
|
3
11
|
|
|
@@ -71,17 +71,22 @@ class StartPreparationUseCase {
|
|
|
71
71
|
if (workflowBlockerStory.length === 0) {
|
|
72
72
|
return [];
|
|
73
73
|
}
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
orgRepo
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
74
|
+
const aggregated = new Map();
|
|
75
|
+
workflowBlockerStory.forEach((storyName) => {
|
|
76
|
+
const issues = storyObjectMap
|
|
77
|
+
.get(storyName)
|
|
78
|
+
?.issues.filter((issue) => issue.state === 'OPEN') || [];
|
|
79
|
+
issues.forEach((issue) => {
|
|
80
|
+
const orgRepo = issue.url.split('/issues')[0].split('github.com/')[1];
|
|
81
|
+
const existing = aggregated.get(orgRepo) || [];
|
|
82
|
+
existing.push(issue.url);
|
|
83
|
+
aggregated.set(orgRepo, existing);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
return Array.from(aggregated.entries()).map(([orgRepo, blockerIssueUrls]) => ({
|
|
87
|
+
orgRepo,
|
|
88
|
+
blockerIssueUrls,
|
|
89
|
+
}));
|
|
85
90
|
};
|
|
86
91
|
}
|
|
87
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartPreparationUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"StartPreparationUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -552,6 +552,196 @@ describe('StartPreparationUseCase', () => {
|
|
|
552
552
|
});
|
|
553
553
|
});
|
|
554
554
|
|
|
555
|
+
it('should collect blocker issues from multiple workflow blocker stories', async () => {
|
|
556
|
+
const blockerIssueRepo1 = createMockIssue({
|
|
557
|
+
url: 'https://github.com/user/repo1/issues/100',
|
|
558
|
+
title: 'Blocker Issue Repo1',
|
|
559
|
+
labels: [],
|
|
560
|
+
status: 'Awaiting Workspace',
|
|
561
|
+
state: 'OPEN',
|
|
562
|
+
});
|
|
563
|
+
|
|
564
|
+
const blockerIssueRepo2 = createMockIssue({
|
|
565
|
+
url: 'https://github.com/user/repo2/issues/200',
|
|
566
|
+
title: 'Blocker Issue Repo2',
|
|
567
|
+
labels: [],
|
|
568
|
+
status: 'Awaiting Workspace',
|
|
569
|
+
state: 'OPEN',
|
|
570
|
+
});
|
|
571
|
+
|
|
572
|
+
const blockedIssueRepo1 = createMockIssue({
|
|
573
|
+
url: 'https://github.com/user/repo1/issues/101',
|
|
574
|
+
title: 'Blocked Issue in Repo1',
|
|
575
|
+
labels: [],
|
|
576
|
+
status: 'Awaiting Workspace',
|
|
577
|
+
state: 'OPEN',
|
|
578
|
+
});
|
|
579
|
+
|
|
580
|
+
const blockedIssueRepo2 = createMockIssue({
|
|
581
|
+
url: 'https://github.com/user/repo2/issues/201',
|
|
582
|
+
title: 'Blocked Issue in Repo2',
|
|
583
|
+
labels: [],
|
|
584
|
+
status: 'Awaiting Workspace',
|
|
585
|
+
state: 'OPEN',
|
|
586
|
+
});
|
|
587
|
+
|
|
588
|
+
const unblockedIssue = createMockIssue({
|
|
589
|
+
url: 'https://github.com/user/repo3/issues/300',
|
|
590
|
+
title: 'Unblocked Issue',
|
|
591
|
+
labels: [],
|
|
592
|
+
status: 'Awaiting Workspace',
|
|
593
|
+
state: 'OPEN',
|
|
594
|
+
});
|
|
595
|
+
|
|
596
|
+
const multiBlockerMap: StoryObjectMap = new Map();
|
|
597
|
+
multiBlockerMap.set('Workflow blocker A', {
|
|
598
|
+
story: {
|
|
599
|
+
id: 'story-blocker-a',
|
|
600
|
+
name: 'Workflow blocker A',
|
|
601
|
+
color: 'RED',
|
|
602
|
+
description: '',
|
|
603
|
+
},
|
|
604
|
+
storyIssue: null,
|
|
605
|
+
issues: [blockerIssueRepo1],
|
|
606
|
+
});
|
|
607
|
+
multiBlockerMap.set('Workflow blocker B', {
|
|
608
|
+
story: {
|
|
609
|
+
id: 'story-blocker-b',
|
|
610
|
+
name: 'Workflow blocker B',
|
|
611
|
+
color: 'RED',
|
|
612
|
+
description: '',
|
|
613
|
+
},
|
|
614
|
+
storyIssue: null,
|
|
615
|
+
issues: [blockerIssueRepo2],
|
|
616
|
+
});
|
|
617
|
+
multiBlockerMap.set('Default Story', {
|
|
618
|
+
story: {
|
|
619
|
+
id: 'story-1',
|
|
620
|
+
name: 'Default Story',
|
|
621
|
+
color: 'GRAY',
|
|
622
|
+
description: '',
|
|
623
|
+
},
|
|
624
|
+
storyIssue: null,
|
|
625
|
+
issues: [blockedIssueRepo1, blockedIssueRepo2, unblockedIssue],
|
|
626
|
+
});
|
|
627
|
+
|
|
628
|
+
mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
|
|
629
|
+
mockIssueRepository.getStoryObjectMap.mockResolvedValue(multiBlockerMap);
|
|
630
|
+
mockIssueRepository.getAllOpened.mockResolvedValueOnce([
|
|
631
|
+
blockerIssueRepo1,
|
|
632
|
+
blockerIssueRepo2,
|
|
633
|
+
blockedIssueRepo1,
|
|
634
|
+
blockedIssueRepo2,
|
|
635
|
+
unblockedIssue,
|
|
636
|
+
]);
|
|
637
|
+
mockLocalCommandRunner.runCommand.mockResolvedValue({
|
|
638
|
+
stdout: '',
|
|
639
|
+
stderr: '',
|
|
640
|
+
exitCode: 0,
|
|
641
|
+
});
|
|
642
|
+
|
|
643
|
+
await useCase.run({
|
|
644
|
+
projectUrl: 'https://github.com/user/repo',
|
|
645
|
+
awaitingWorkspaceStatus: 'Awaiting Workspace',
|
|
646
|
+
preparationStatus: 'Preparation',
|
|
647
|
+
defaultAgentName: 'agent1',
|
|
648
|
+
maximumPreparingIssuesCount: null,
|
|
649
|
+
utilizationPercentageThreshold: 90,
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
const updatedUrls = mockIssueRepository.update.mock.calls.map(
|
|
653
|
+
(call) => call[0].url,
|
|
654
|
+
);
|
|
655
|
+
expect(updatedUrls).toContain('https://github.com/user/repo1/issues/100');
|
|
656
|
+
expect(updatedUrls).toContain('https://github.com/user/repo2/issues/200');
|
|
657
|
+
expect(updatedUrls).toContain('https://github.com/user/repo3/issues/300');
|
|
658
|
+
expect(updatedUrls).not.toContain(
|
|
659
|
+
'https://github.com/user/repo1/issues/101',
|
|
660
|
+
);
|
|
661
|
+
expect(updatedUrls).not.toContain(
|
|
662
|
+
'https://github.com/user/repo2/issues/201',
|
|
663
|
+
);
|
|
664
|
+
});
|
|
665
|
+
|
|
666
|
+
it('should aggregate blocker URLs per orgRepo when multiple blocker issues exist in the same repo', async () => {
|
|
667
|
+
const blockerIssue1 = createMockIssue({
|
|
668
|
+
url: 'https://github.com/user/repo/issues/100',
|
|
669
|
+
title: 'Blocker Issue 1',
|
|
670
|
+
labels: [],
|
|
671
|
+
status: 'Awaiting Workspace',
|
|
672
|
+
state: 'OPEN',
|
|
673
|
+
});
|
|
674
|
+
|
|
675
|
+
const blockerIssue2 = createMockIssue({
|
|
676
|
+
url: 'https://github.com/user/repo/issues/101',
|
|
677
|
+
title: 'Blocker Issue 2',
|
|
678
|
+
labels: [],
|
|
679
|
+
status: 'Awaiting Workspace',
|
|
680
|
+
state: 'OPEN',
|
|
681
|
+
});
|
|
682
|
+
|
|
683
|
+
const nonBlockerIssue = createMockIssue({
|
|
684
|
+
url: 'https://github.com/user/repo/issues/102',
|
|
685
|
+
title: 'Non-Blocker Issue',
|
|
686
|
+
labels: [],
|
|
687
|
+
status: 'Awaiting Workspace',
|
|
688
|
+
state: 'OPEN',
|
|
689
|
+
});
|
|
690
|
+
|
|
691
|
+
const blockerMap: StoryObjectMap = new Map();
|
|
692
|
+
blockerMap.set('Workflow blocker', {
|
|
693
|
+
story: {
|
|
694
|
+
id: 'story-blocker',
|
|
695
|
+
name: 'Workflow blocker',
|
|
696
|
+
color: 'RED',
|
|
697
|
+
description: '',
|
|
698
|
+
},
|
|
699
|
+
storyIssue: null,
|
|
700
|
+
issues: [blockerIssue1, blockerIssue2],
|
|
701
|
+
});
|
|
702
|
+
blockerMap.set('Default Story', {
|
|
703
|
+
story: {
|
|
704
|
+
id: 'story-1',
|
|
705
|
+
name: 'Default Story',
|
|
706
|
+
color: 'GRAY',
|
|
707
|
+
description: '',
|
|
708
|
+
},
|
|
709
|
+
storyIssue: null,
|
|
710
|
+
issues: [nonBlockerIssue],
|
|
711
|
+
});
|
|
712
|
+
|
|
713
|
+
mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
|
|
714
|
+
mockIssueRepository.getStoryObjectMap.mockResolvedValue(blockerMap);
|
|
715
|
+
mockIssueRepository.getAllOpened.mockResolvedValueOnce([
|
|
716
|
+
blockerIssue1,
|
|
717
|
+
blockerIssue2,
|
|
718
|
+
nonBlockerIssue,
|
|
719
|
+
]);
|
|
720
|
+
mockLocalCommandRunner.runCommand.mockResolvedValue({
|
|
721
|
+
stdout: '',
|
|
722
|
+
stderr: '',
|
|
723
|
+
exitCode: 0,
|
|
724
|
+
});
|
|
725
|
+
|
|
726
|
+
await useCase.run({
|
|
727
|
+
projectUrl: 'https://github.com/user/repo',
|
|
728
|
+
awaitingWorkspaceStatus: 'Awaiting Workspace',
|
|
729
|
+
preparationStatus: 'Preparation',
|
|
730
|
+
defaultAgentName: 'agent1',
|
|
731
|
+
maximumPreparingIssuesCount: null,
|
|
732
|
+
utilizationPercentageThreshold: 90,
|
|
733
|
+
});
|
|
734
|
+
|
|
735
|
+
const updatedUrls = mockIssueRepository.update.mock.calls.map(
|
|
736
|
+
(call) => call[0].url,
|
|
737
|
+
);
|
|
738
|
+
expect(updatedUrls).toContain('https://github.com/user/repo/issues/100');
|
|
739
|
+
expect(updatedUrls).toContain('https://github.com/user/repo/issues/101');
|
|
740
|
+
expect(updatedUrls).not.toContain(
|
|
741
|
+
'https://github.com/user/repo/issues/102',
|
|
742
|
+
);
|
|
743
|
+
});
|
|
744
|
+
|
|
555
745
|
it('should handle workflow blocker story with undefined storyObject (|| [] fallback)', async () => {
|
|
556
746
|
// Create an awaiting issue that should be processed
|
|
557
747
|
const awaitingIssue = createMockIssue({
|
|
@@ -145,20 +145,24 @@ export class StartPreparationUseCase {
|
|
|
145
145
|
return [];
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
.
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
148
|
+
const aggregated = new Map<string, string[]>();
|
|
149
|
+
workflowBlockerStory.forEach((storyName) => {
|
|
150
|
+
const issues =
|
|
151
|
+
storyObjectMap
|
|
152
|
+
.get(storyName)
|
|
153
|
+
?.issues.filter((issue) => issue.state === 'OPEN') || [];
|
|
154
|
+
issues.forEach((issue) => {
|
|
155
|
+
const orgRepo = issue.url.split('/issues')[0].split('github.com/')[1];
|
|
156
|
+
const existing = aggregated.get(orgRepo) || [];
|
|
157
|
+
existing.push(issue.url);
|
|
158
|
+
aggregated.set(orgRepo, existing);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
return Array.from(aggregated.entries()).map(
|
|
162
|
+
([orgRepo, blockerIssueUrls]) => ({
|
|
163
|
+
orgRepo,
|
|
164
|
+
blockerIssueUrls,
|
|
165
|
+
}),
|
|
166
|
+
);
|
|
163
167
|
};
|
|
164
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,EAAe,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAIhC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBATlB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,UAAU,GAAG,eAAe,CAC7B,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACf,cAAc,GAAG,mBAAmB,GAAG,QAAQ,CAChD,EACgB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,EACpD,kBAAkB,EAAE,kBAAkB;IAGzD,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,uBAAuB,EAAE,MAAM,CAAC;QAChC,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3C,8BAA8B,EAAE,MAAM,CAAC;KACxC,KAAG,OAAO,CAAC,IAAI,CAAC,CAsGf;IACF,yBAAyB,GACvB,gBAAgB,cAAc,KAC7B;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,EAAE,
|
|
1
|
+
{"version":3,"file":"StartPreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/StartPreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,EAAe,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAIhC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBATlB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,UAAU,GAAG,eAAe,CAC7B,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACf,cAAc,GAAG,mBAAmB,GAAG,QAAQ,CAChD,EACgB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,EACpD,kBAAkB,EAAE,kBAAkB;IAGzD,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,uBAAuB,EAAE,MAAM,CAAC;QAChC,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3C,8BAA8B,EAAE,MAAM,CAAC;KACxC,KAAG,OAAO,CAAC,IAAI,CAAC,CAsGf;IACF,yBAAyB,GACvB,gBAAgB,cAAc,KAC7B;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,EAAE,CA6BD;CACH"}
|