Skip to content

Commit 620cc39

Browse files
committed
Introduce createVariantAnalysis method in actions API
This will allow us to make an API call to cancel a variant analysis.
1 parent 8345284 commit 620cc39

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

extensions/ql-vscode/src/remote-queries/gh-api/gh-actions-api-client.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { RemoteQuery } from '../remote-query';
99
import { RemoteQueryFailureIndexItem, RemoteQueryResultIndex, RemoteQuerySuccessIndexItem } from '../remote-query-result-index';
1010
import { getErrorMessage } from '../../pure/helpers-pure';
1111
import { unzipFile } from '../../pure/zip';
12+
import { VariantAnalysis } from '../shared/variant-analysis';
1213

1314
export const RESULT_INDEX_ARTIFACT_NAME = 'result-index';
1415

@@ -94,6 +95,18 @@ export async function cancelRemoteQuery(
9495
}
9596
}
9697

98+
export async function cancelVariantAnalysis(
99+
credentials: Credentials,
100+
variantAnalysis: VariantAnalysis
101+
): Promise<void> {
102+
const octokit = await credentials.getOctokit();
103+
const { actionsWorkflowRunId, controllerRepo: { fullName } } = variantAnalysis;
104+
const response = await octokit.request(`POST /repos/${fullName}/actions/runs/${actionsWorkflowRunId}/cancel`);
105+
if (response.status >= 300) {
106+
throw new Error(`Error cancelling variant analysis: ${response.status} ${response?.data?.message || ''}`);
107+
}
108+
}
109+
97110
export async function downloadArtifactFromLink(
98111
credentials: Credentials,
99112
storagePath: string,

extensions/ql-vscode/src/vscode-tests/no-workspace/remote-queries/gh-api/gh-actions-api-client.test.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,14 @@ import { fail } from 'assert';
22
import { expect } from 'chai';
33
import * as sinon from 'sinon';
44
import { Credentials } from '../../../../authentication';
5-
import { cancelRemoteQuery, getRepositoriesMetadata } from '../../../../remote-queries/gh-api/gh-actions-api-client';
5+
import {
6+
cancelRemoteQuery,
7+
cancelVariantAnalysis,
8+
getRepositoriesMetadata
9+
} from '../../../../remote-queries/gh-api/gh-actions-api-client';
610
import { RemoteQuery } from '../../../../remote-queries/remote-query';
11+
import { createMockVariantAnalysis } from '../../../factories/remote-queries/shared/variant-analysis';
12+
import { VariantAnalysis } from '../../../../remote-queries/shared/variant-analysis';
713

814
describe('gh-actions-api-client mock responses', () => {
915
let sandbox: sinon.SinonSandbox;
@@ -50,6 +56,29 @@ describe('gh-actions-api-client mock responses', () => {
5056
} as unknown as RemoteQuery;
5157
}
5258
});
59+
60+
describe('cancelVariantAnalysis', () => {
61+
let variantAnalysis: VariantAnalysis;
62+
before(() => {
63+
variantAnalysis = createMockVariantAnalysis({});
64+
});
65+
66+
it('should cancel a variant analysis', async () => {
67+
mockResponse = sinon.stub().resolves({ status: 202 });
68+
await cancelVariantAnalysis(mockCredentials, variantAnalysis);
69+
70+
expect(mockResponse.calledOnce).to.be.true;
71+
expect(mockResponse.firstCall.args[0]).to.equal(`POST /repos/${variantAnalysis.controllerRepo.fullName}/actions/runs/${variantAnalysis.actionsWorkflowRunId}/cancel`);
72+
});
73+
74+
it('should fail to cancel a variant analysis', async () => {
75+
mockResponse = sinon.stub().resolves({ status: 409, data: { message: 'Uh oh!' } });
76+
77+
await expect(cancelVariantAnalysis(mockCredentials, variantAnalysis)).to.be.rejectedWith(/Error cancelling variant analysis: 409 Uh oh!/);
78+
expect(mockResponse.calledOnce).to.be.true;
79+
expect(mockResponse.firstCall.args[0]).to.equal(`POST /repos/${variantAnalysis.controllerRepo.fullName}/actions/runs/${variantAnalysis.actionsWorkflowRunId}/cancel`);
80+
});
81+
});
5382
});
5483

5584
describe('gh-actions-api-client real responses', function() {

0 commit comments

Comments
 (0)