diff --git a/extensions/ql-vscode/src/remote-queries/shared/variant-analysis-monitor-result.ts b/extensions/ql-vscode/src/remote-queries/shared/variant-analysis-monitor-result.ts index 97eceee89..6dd387e7d 100644 --- a/extensions/ql-vscode/src/remote-queries/shared/variant-analysis-monitor-result.ts +++ b/extensions/ql-vscode/src/remote-queries/shared/variant-analysis-monitor-result.ts @@ -1,16 +1,11 @@ import { VariantAnalysis } from './variant-analysis'; export type VariantAnalysisMonitorStatus = - | 'InProgress' - | 'CompletedSuccessfully' - | 'CompletedUnsuccessfully' - | 'Failed' - | 'Cancelled' - | 'TimedOut'; + | 'Completed' + | 'Canceled'; export interface VariantAnalysisMonitorResult { status: VariantAnalysisMonitorStatus; - error?: string; scannedReposDownloaded?: number[], variantAnalysis?: VariantAnalysis } diff --git a/extensions/ql-vscode/src/remote-queries/variant-analysis-monitor.ts b/extensions/ql-vscode/src/remote-queries/variant-analysis-monitor.ts index c80e29288..61359cad7 100644 --- a/extensions/ql-vscode/src/remote-queries/variant-analysis-monitor.ts +++ b/extensions/ql-vscode/src/remote-queries/variant-analysis-monitor.ts @@ -43,7 +43,7 @@ export class VariantAnalysisMonitor extends DisposableObject { await this.sleep(VariantAnalysisMonitor.sleepTime); if (cancellationToken && cancellationToken.isCancellationRequested) { - return { status: 'Cancelled', error: 'Variant Analysis was canceled.' }; + return { status: 'Canceled' }; } const variantAnalysisSummary = await ghApiClient.getVariantAnalysis( @@ -59,22 +59,14 @@ export class VariantAnalysisMonitor extends DisposableObject { const downloadedRepos = this.downloadVariantAnalysisResults(variantAnalysisSummary, scannedReposDownloaded); scannedReposDownloaded.push(...downloadedRepos); - if (variantAnalysis.failureReason) { - return { - status: 'Failed', - error: `Variant Analysis has failed: ${variantAnalysis.failureReason}`, - variantAnalysis: variantAnalysis - }; - } - - if (isFinalVariantAnalysisStatus(variantAnalysis.status)) { + if (isFinalVariantAnalysisStatus(variantAnalysis.status) || variantAnalysis.failureReason) { break; } attemptCount++; } - return { status: 'CompletedSuccessfully', scannedReposDownloaded: scannedReposDownloaded }; + return { status: 'Completed', scannedReposDownloaded, variantAnalysis }; } private scheduleForDownload( diff --git a/extensions/ql-vscode/src/remote-queries/variant-analysis-processor.ts b/extensions/ql-vscode/src/remote-queries/variant-analysis-processor.ts index 04ca4541b..3bd8278a6 100644 --- a/extensions/ql-vscode/src/remote-queries/variant-analysis-processor.ts +++ b/extensions/ql-vscode/src/remote-queries/variant-analysis-processor.ts @@ -62,7 +62,7 @@ export function processUpdatedVariantAnalysis( executionStartTime: previousVariantAnalysis.executionStartTime, createdAt: response.created_at, updatedAt: response.updated_at, - status: processApiStatus(response.status), + status: processApiStatus(response.status, response.failure_reason), completedAt: response.completed_at, actionsWorkflowRunId: response.actions_workflow_run_id, scannedRepos: scannedRepos, @@ -158,12 +158,13 @@ function processApiRepoStatus(analysisStatus: ApiVariantAnalysisRepoStatus): Var } } -function processApiStatus(status: ApiVariantAnalysisStatus): VariantAnalysisStatus { - switch (status) { - case 'in_progress': - return VariantAnalysisStatus.InProgress; - case 'completed': - return VariantAnalysisStatus.Succeeded; +function processApiStatus(status: ApiVariantAnalysisStatus, failureReason: string | undefined): VariantAnalysisStatus { + if (status === 'in_progress') { + return VariantAnalysisStatus.InProgress; + } else if (failureReason !== undefined) { + return VariantAnalysisStatus.Failed; + } else { + return VariantAnalysisStatus.Succeeded; } } diff --git a/extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-monitor.test.ts b/extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-monitor.test.ts index 19f373bd4..8b8bda6f2 100644 --- a/extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-monitor.test.ts +++ b/extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-monitor.test.ts @@ -83,14 +83,14 @@ describe('Variant Analysis Monitor', async function() { const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token); - expect(result).to.eql({ status: 'Cancelled', error: 'Variant Analysis was canceled.' }); + expect(result).to.eql({ status: 'Canceled' }); }); describe('when the variant analysis fails', async () => { let mockFailedApiResponse: VariantAnalysisApiResponse; beforeEach(async function() { - mockFailedApiResponse = createFailedMockApiResponse('in_progress'); + mockFailedApiResponse = createFailedMockApiResponse(); mockGetVariantAnalysis = sandbox.stub(ghApiClient, 'getVariantAnalysis').resolves(mockFailedApiResponse); }); @@ -98,8 +98,7 @@ describe('Variant Analysis Monitor', async function() { const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token); expect(mockGetVariantAnalysis.calledOnce).to.be.true; - expect(result.status).to.eql('Failed'); - expect(result.error).to.eql(`Variant Analysis has failed: ${mockFailedApiResponse.failure_reason}`); + expect(result.status).to.eql('Completed'); expect(result.variantAnalysis?.status).to.equal(VariantAnalysisStatus.Failed); expect(result.variantAnalysis?.failureReason).to.equal(processFailureReason(mockFailedApiResponse.failure_reason as VariantAnalysisFailureReason)); }); @@ -130,7 +129,7 @@ describe('Variant Analysis Monitor', async function() { it('should succeed and return a list of scanned repo ids', async () => { const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token); - expect(result.status).to.equal('CompletedSuccessfully'); + expect(result.status).to.equal('Completed'); expect(result.scannedReposDownloaded).to.eql(succeededRepos.map(r => r.repository.id)); }); @@ -173,7 +172,7 @@ describe('Variant Analysis Monitor', async function() { it('should succeed and return an empty list of scanned repo ids', async () => { const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token); - expect(result.status).to.equal('CompletedSuccessfully'); + expect(result.status).to.equal('Completed'); expect(result.scannedReposDownloaded).to.eql([]); }); @@ -194,7 +193,7 @@ describe('Variant Analysis Monitor', async function() { it('should succeed and return an empty list of scanned repo ids', async () => { const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationTokenSource.token); - expect(result.status).to.equal('CompletedSuccessfully'); + expect(result.status).to.equal('Completed'); expect(result.scannedReposDownloaded).to.eql([]); }); diff --git a/extensions/ql-vscode/src/vscode-tests/factories/remote-queries/gh-api/variant-analysis-api-response.ts b/extensions/ql-vscode/src/vscode-tests/factories/remote-queries/gh-api/variant-analysis-api-response.ts index 6ba9db436..6903b4805 100644 --- a/extensions/ql-vscode/src/vscode-tests/factories/remote-queries/gh-api/variant-analysis-api-response.ts +++ b/extensions/ql-vscode/src/vscode-tests/factories/remote-queries/gh-api/variant-analysis-api-response.ts @@ -39,13 +39,10 @@ export function createMockApiResponse( } export function createFailedMockApiResponse( - status: VariantAnalysisStatus = 'in_progress', scannedRepos: VariantAnalysisScannedRepository[] = createMockScannedRepos(), skippedRepos: VariantAnalysisSkippedRepositories = createMockSkippedRepos(), ): VariantAnalysisApiResponse { - const variantAnalysis = createMockApiResponse(status, scannedRepos, skippedRepos); - variantAnalysis.status = status; + const variantAnalysis = createMockApiResponse('completed', scannedRepos, skippedRepos); variantAnalysis.failure_reason = 'internal_error'; - return variantAnalysis; }