Skip to content

Commit 562f926

Browse files
Merge pull request #2349 from github/robertbrignull/countSuccessfulRepos
Show number of successful repos instead of completed repos in variant analysis results view header
2 parents 84f482f + 9d7ea8e commit 562f926

File tree

6 files changed

+220
-54
lines changed

6 files changed

+220
-54
lines changed

extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysisStats.stories.tsx

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,37 +34,66 @@ export const Starting = Template.bind({});
3434
Starting.args = {
3535
variantAnalysisStatus: VariantAnalysisStatus.InProgress,
3636
totalRepositoryCount: 10,
37+
completedRepositoryCount: 0,
38+
successfulRepositoryCount: 0,
39+
skippedRepositoryCount: 0,
3740
};
3841

3942
export const Started = Template.bind({});
4043
Started.args = {
4144
...Starting.args,
4245
resultCount: 99_999,
4346
completedRepositoryCount: 2,
47+
successfulRepositoryCount: 2,
4448
};
4549

46-
export const StartedWithWarnings = Template.bind({});
47-
StartedWithWarnings.args = {
50+
export const StartedWithSkippedRepositories = Template.bind({});
51+
StartedWithSkippedRepositories.args = {
4852
...Starting.args,
49-
hasWarnings: true,
53+
skippedRepositoryCount: 3,
54+
};
55+
56+
export const StartedWithFailedAnalyses = Template.bind({});
57+
StartedWithFailedAnalyses.args = {
58+
...Starting.args,
59+
completedRepositoryCount: 5,
60+
successfulRepositoryCount: 3,
5061
};
5162

5263
export const Succeeded = Template.bind({});
5364
Succeeded.args = {
5465
...Started.args,
5566
totalRepositoryCount: 1000,
5667
completedRepositoryCount: 1000,
68+
successfulRepositoryCount: 1000,
5769
variantAnalysisStatus: VariantAnalysisStatus.Succeeded,
5870
createdAt: new Date(1661262726000),
5971
completedAt: new Date(1661263446000),
6072
};
6173

62-
export const SucceededWithWarnings = Template.bind({});
63-
SucceededWithWarnings.args = {
74+
export const SucceededWithSkippedRepositories = Template.bind({});
75+
SucceededWithSkippedRepositories.args = {
6476
...Succeeded.args,
6577
totalRepositoryCount: 10,
66-
completedRepositoryCount: 2,
67-
hasWarnings: true,
78+
completedRepositoryCount: 10,
79+
successfulRepositoryCount: 10,
80+
skippedRepositoryCount: 6,
81+
};
82+
83+
export const SucceededWithFailedAnalyses = Template.bind({});
84+
SucceededWithFailedAnalyses.args = {
85+
...Succeeded.args,
86+
totalRepositoryCount: 10,
87+
completedRepositoryCount: 10,
88+
successfulRepositoryCount: 7,
89+
};
90+
91+
export const SucceededWithFailedAnalysesAndSkippedRepositories = Template.bind(
92+
{},
93+
);
94+
SucceededWithFailedAnalysesAndSkippedRepositories.args = {
95+
...SucceededWithFailedAnalyses.args,
96+
skippedRepositoryCount: 6,
6897
};
6998

7099
export const Failed = Template.bind({});
@@ -77,6 +106,7 @@ Failed.args = {
77106

78107
export const Stopped = Template.bind({});
79108
Stopped.args = {
80-
...SucceededWithWarnings.args,
109+
...Started.args,
81110
variantAnalysisStatus: VariantAnalysisStatus.Canceled,
111+
completedRepositoryCount: 10,
82112
};

extensions/ql-vscode/src/variant-analysis/shared/variant-analysis.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,16 @@ export function hasRepoScanCompleted(
214214
return isCompletedAnalysisRepoStatus(repo.analysisStatus);
215215
}
216216

217+
/**
218+
* @param repo
219+
* @returns whether the repo scan completed successfully
220+
*/
221+
export function isRepoScanSuccessful(
222+
repo: VariantAnalysisScannedRepository,
223+
): boolean {
224+
return repo.analysisStatus === VariantAnalysisRepoStatus.Succeeded;
225+
}
226+
217227
/**
218228
* @param repo
219229
* @returns whether the repo scan has an artifact that can be downloaded

extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisHeader.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
getSkippedRepoCount,
66
getTotalResultCount,
77
hasRepoScanCompleted,
8+
isRepoScanSuccessful,
89
VariantAnalysis,
910
VariantAnalysisScannedRepositoryDownloadStatus,
1011
VariantAnalysisScannedRepositoryState,
@@ -69,11 +70,17 @@ export const VariantAnalysisHeader = ({
6970
?.length ?? 0
7071
);
7172
}, [variantAnalysis.scannedRepos]);
73+
const successfulRepositoryCount = useMemo(() => {
74+
return (
75+
variantAnalysis.scannedRepos?.filter((repo) => isRepoScanSuccessful(repo))
76+
?.length ?? 0
77+
);
78+
}, [variantAnalysis.scannedRepos]);
7279
const resultCount = useMemo(() => {
7380
return getTotalResultCount(variantAnalysis.scannedRepos);
7481
}, [variantAnalysis.scannedRepos]);
75-
const hasSkippedRepos = useMemo(() => {
76-
return getSkippedRepoCount(variantAnalysis.skippedRepos) > 0;
82+
const skippedRepositoryCount = useMemo(() => {
83+
return getSkippedRepoCount(variantAnalysis.skippedRepos);
7784
}, [variantAnalysis.skippedRepos]);
7885
const filteredRepositories = useMemo(() => {
7986
return filterAndSortRepositoriesWithResults(variantAnalysis.scannedRepos, {
@@ -130,8 +137,9 @@ export const VariantAnalysisHeader = ({
130137
variantAnalysisStatus={variantAnalysis.status}
131138
totalRepositoryCount={totalScannedRepositoryCount}
132139
completedRepositoryCount={completedRepositoryCount}
140+
successfulRepositoryCount={successfulRepositoryCount}
141+
skippedRepositoryCount={skippedRepositoryCount}
133142
resultCount={resultCount}
134-
hasWarnings={hasSkippedRepos}
135143
createdAt={parseDate(variantAnalysis.createdAt)}
136144
completedAt={parseDate(variantAnalysis.completedAt)}
137145
onViewLogsClick={onViewLogsClick}

extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisRepositoriesStats.tsx

Lines changed: 54 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,43 +12,78 @@ type Props = {
1212
variantAnalysisStatus: VariantAnalysisStatus;
1313

1414
totalRepositoryCount: number;
15-
completedRepositoryCount?: number | undefined;
16-
17-
showWarning?: boolean;
15+
completedRepositoryCount: number;
16+
successfulRepositoryCount: number;
17+
skippedRepositoryCount: number;
1818
};
1919

20+
function getIcon(
21+
variantAnalysisStatus: VariantAnalysisStatus,
22+
completedRepositoryCount: number,
23+
successfulRepositoryCount: number,
24+
skippedRepositoryCount: number,
25+
) {
26+
if (successfulRepositoryCount < completedRepositoryCount) {
27+
if (variantAnalysisStatus === VariantAnalysisStatus.Canceled) {
28+
return (
29+
<>
30+
<HorizontalSpace size={2} />
31+
<ErrorIcon label="Some analyses were stopped" />
32+
</>
33+
);
34+
} else {
35+
return (
36+
<>
37+
<HorizontalSpace size={2} />
38+
<ErrorIcon label="Some analyses failed" />
39+
</>
40+
);
41+
}
42+
} else if (skippedRepositoryCount > 0) {
43+
return (
44+
<>
45+
<HorizontalSpace size={2} />
46+
<WarningIcon label="Some repositories were skipped" />
47+
</>
48+
);
49+
} else if (variantAnalysisStatus === VariantAnalysisStatus.Succeeded) {
50+
return (
51+
<>
52+
<HorizontalSpace size={2} />
53+
<SuccessIcon label="Completed" />
54+
</>
55+
);
56+
} else {
57+
return undefined;
58+
}
59+
}
60+
2061
export const VariantAnalysisRepositoriesStats = ({
2162
variantAnalysisStatus,
2263
totalRepositoryCount,
23-
completedRepositoryCount = 0,
24-
showWarning,
64+
completedRepositoryCount,
65+
successfulRepositoryCount,
66+
skippedRepositoryCount,
2567
}: Props) => {
2668
if (variantAnalysisStatus === VariantAnalysisStatus.Failed) {
2769
return (
2870
<>
2971
0<HorizontalSpace size={2} />
30-
<ErrorIcon />
72+
<ErrorIcon label="Variant analysis failed" />
3173
</>
3274
);
3375
}
3476

3577
return (
3678
<>
37-
{formatDecimal(completedRepositoryCount)}/
79+
{formatDecimal(successfulRepositoryCount)}/
3880
{formatDecimal(totalRepositoryCount)}
39-
{showWarning && (
40-
<>
41-
<HorizontalSpace size={2} />
42-
<WarningIcon />
43-
</>
81+
{getIcon(
82+
variantAnalysisStatus,
83+
completedRepositoryCount,
84+
successfulRepositoryCount,
85+
skippedRepositoryCount,
4486
)}
45-
{!showWarning &&
46-
variantAnalysisStatus === VariantAnalysisStatus.Succeeded && (
47-
<>
48-
<HorizontalSpace size={2} />
49-
<SuccessIcon label="Completed" />
50-
</>
51-
)}
5287
</>
5388
);
5489
};

extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisStats.tsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ export type VariantAnalysisStatsProps = {
1212
variantAnalysisStatus: VariantAnalysisStatus;
1313

1414
totalRepositoryCount: number;
15-
completedRepositoryCount?: number | undefined;
16-
17-
hasWarnings?: boolean;
15+
completedRepositoryCount: number;
16+
successfulRepositoryCount: number;
17+
skippedRepositoryCount: number;
1818

1919
resultCount?: number | undefined;
2020
createdAt: Date;
@@ -32,8 +32,9 @@ const Row = styled.div`
3232
export const VariantAnalysisStats = ({
3333
variantAnalysisStatus,
3434
totalRepositoryCount,
35-
completedRepositoryCount = 0,
36-
hasWarnings,
35+
completedRepositoryCount,
36+
successfulRepositoryCount,
37+
skippedRepositoryCount,
3738
resultCount,
3839
createdAt,
3940
completedAt,
@@ -54,13 +55,17 @@ export const VariantAnalysisStats = ({
5455

5556
if (
5657
variantAnalysisStatus === VariantAnalysisStatus.Succeeded &&
57-
hasWarnings
58+
successfulRepositoryCount < completedRepositoryCount
5859
) {
59-
return "Succeeded warnings";
60+
return "Some analyses failed";
6061
}
6162

6263
return "Succeeded";
63-
}, [variantAnalysisStatus, hasWarnings]);
64+
}, [
65+
variantAnalysisStatus,
66+
successfulRepositoryCount,
67+
completedRepositoryCount,
68+
]);
6469

6570
const duration = useMemo(() => {
6671
if (!completedAt) {
@@ -80,7 +85,8 @@ export const VariantAnalysisStats = ({
8085
variantAnalysisStatus={variantAnalysisStatus}
8186
totalRepositoryCount={totalRepositoryCount}
8287
completedRepositoryCount={completedRepositoryCount}
83-
showWarning={hasWarnings}
88+
successfulRepositoryCount={successfulRepositoryCount}
89+
skippedRepositoryCount={skippedRepositoryCount}
8490
/>
8591
</StatItem>
8692
<StatItem title="Duration">

0 commit comments

Comments
 (0)