Skip to content

Commit 8046322

Browse files
committed
Open Actions workflow run when clicking on "View logs"
This will hook up the "View logs" link to make it open the variant analysis actions workflow run. The method for creating the actions workflow run URL has been extracted from the query history to make it callable without a history item.
1 parent 847cb13 commit 8046322

File tree

6 files changed

+55
-6
lines changed

6 files changed

+55
-6
lines changed

extensions/ql-vscode/src/pure/interface-types.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,10 @@ export interface OpenQueryTextMessage {
477477
t: 'openQueryText';
478478
}
479479

480+
export interface OpenLogsMessage {
481+
t: 'openLogs';
482+
}
483+
480484
export type ToVariantAnalysisMessage =
481485
| SetVariantAnalysisMessage
482486
| SetRepoResultsMessage
@@ -487,4 +491,5 @@ export type FromVariantAnalysisMessage =
487491
| StopVariantAnalysisMessage
488492
| RequestRepositoryResultsMessage
489493
| OpenQueryFileMessage
490-
| OpenQueryTextMessage;
494+
| OpenQueryTextMessage
495+
| OpenLogsMessage;

extensions/ql-vscode/src/query-history-info.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ import { VariantAnalysisHistoryItem } from './remote-queries/variant-analysis-hi
33
import { LocalQueryInfo } from './query-results';
44
import { assertNever } from './pure/helpers-pure';
55
import { pluralize } from './pure/word';
6-
import { hasRepoScanCompleted } from './remote-queries/shared/variant-analysis';
6+
import {
7+
hasRepoScanCompleted,
8+
getActionsWorkflowRunUrl as getVariantAnalysisActionsWorkflowRunUrl
9+
} from './remote-queries/shared/variant-analysis';
710

811
export type QueryHistoryInfo = LocalQueryInfo | RemoteQueryHistoryItem | VariantAnalysisHistoryItem;
912

@@ -77,8 +80,7 @@ export function getActionsWorkflowRunUrl(item: RemoteQueryHistoryItem | VariantA
7780
const { actionsWorkflowRunId: workflowRunId, controllerRepository: { owner, name } } = item.remoteQuery;
7881
return `https://github.com/${owner}/${name}/actions/runs/${workflowRunId}`;
7982
} else if (item.t === 'variant-analysis') {
80-
const { actionsWorkflowRunId, controllerRepo: { fullName } } = item.variantAnalysis;
81-
return `https://github.com/${fullName}/actions/runs/${actionsWorkflowRunId}`;
83+
return getVariantAnalysisActionsWorkflowRunUrl(item.variantAnalysis);
8284
} else {
8385
assertNever(item);
8486
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,8 @@ export function getSkippedRepoCount(skippedRepos: VariantAnalysisSkippedReposito
175175

176176
return Object.values(skippedRepos).reduce((acc, group) => acc + group.repositoryCount, 0);
177177
}
178+
179+
export function getActionsWorkflowRunUrl(variantAnalysis: VariantAnalysis): string {
180+
const { actionsWorkflowRunId, controllerRepo: { fullName } } = variantAnalysis;
181+
return `https://github.com/${fullName}/actions/runs/${actionsWorkflowRunId}`;
182+
}

extensions/ql-vscode/src/remote-queries/variant-analysis-view.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { logger } from '../logging';
55
import { FromVariantAnalysisMessage, ToVariantAnalysisMessage } from '../pure/interface-types';
66
import { assertNever } from '../pure/helpers-pure';
77
import {
8+
getActionsWorkflowRunUrl,
89
VariantAnalysis,
910
VariantAnalysisScannedRepositoryResult,
1011
VariantAnalysisScannedRepositoryState,
@@ -96,6 +97,9 @@ export class VariantAnalysisView extends AbstractWebview<ToVariantAnalysisMessag
9697
case 'openQueryText':
9798
await this.openQueryText();
9899
break;
100+
case 'openLogs':
101+
await this.openLogs();
102+
break;
99103
default:
100104
assertNever(msg);
101105
}
@@ -159,4 +163,16 @@ export class VariantAnalysisView extends AbstractWebview<ToVariantAnalysisMessag
159163
void showAndLogWarningMessage('Could not open variant analysis query text. Failed to open text document.');
160164
}
161165
}
166+
167+
private async openLogs(): Promise<void> {
168+
const variantAnalysis = await this.manager.getVariantAnalysis(this.variantAnalysisId);
169+
if (!variantAnalysis) {
170+
void showAndLogWarningMessage('Could not open variant analysis logs. Variant analysis not found.');
171+
return;
172+
}
173+
174+
const actionsWorkflowRunUrl = getActionsWorkflowRunUrl(variantAnalysis);
175+
176+
await commands.executeCommand('vscode.open', Uri.parse(actionsWorkflowRunUrl));
177+
}
162178
}

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ const openQueryText = () => {
3030
});
3131
};
3232

33+
const openLogs = () => {
34+
vscode.postMessage({
35+
t: 'openLogs',
36+
});
37+
};
38+
3339
export function VariantAnalysis({
3440
variantAnalysis: initialVariantAnalysis,
3541
repoStates: initialRepoStates = [],
@@ -85,7 +91,7 @@ export function VariantAnalysis({
8591
onStopQueryClick={() => console.log('Stop query')}
8692
onCopyRepositoryListClick={() => console.log('Copy repository list')}
8793
onExportResultsClick={() => console.log('Export results')}
88-
onViewLogsClick={() => console.log('View logs')}
94+
onViewLogsClick={openLogs}
8995
/>
9096
<VariantAnalysisOutcomePanels
9197
variantAnalysis={variantAnalysis}

extensions/ql-vscode/test/pure-tests/variant-analysis.test.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import { expect } from 'chai';
2-
import { parseVariantAnalysisQueryLanguage, VariantAnalysisQueryLanguage } from '../../src/remote-queries/shared/variant-analysis';
2+
import {
3+
getActionsWorkflowRunUrl,
4+
parseVariantAnalysisQueryLanguage,
5+
VariantAnalysisQueryLanguage
6+
} from '../../src/remote-queries/shared/variant-analysis';
7+
import { createMockVariantAnalysis } from '../../src/vscode-tests/factories/remote-queries/shared/variant-analysis';
38

49
describe('parseVariantAnalysisQueryLanguage', () => {
510
it('parses a valid language', () => {
@@ -10,3 +15,13 @@ describe('parseVariantAnalysisQueryLanguage', () => {
1015
expect(parseVariantAnalysisQueryLanguage('rubbish')).to.not.exist;
1116
});
1217
});
18+
19+
describe('getActionsWorkflowRunUrl', () => {
20+
it('should get the run url', () => {
21+
const variantAnalysis = createMockVariantAnalysis();
22+
23+
const actionsWorkflowRunUrl = getActionsWorkflowRunUrl(variantAnalysis);
24+
25+
expect(actionsWorkflowRunUrl).to.equal(`https://github.com/${variantAnalysis.controllerRepo.fullName}/actions/runs/${variantAnalysis.actionsWorkflowRunId}`);
26+
});
27+
});

0 commit comments

Comments
 (0)