Skip to content

Commit bf1e3c1

Browse files
authored
Merge pull request #1686 from github/koesie10/live-results-view-logs
Open Actions workflow run when clicking on "View logs"
2 parents 453cc77 + 8046322 commit bf1e3c1

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,
@@ -102,6 +103,9 @@ export class VariantAnalysisView extends AbstractWebview<ToVariantAnalysisMessag
102103
case 'openQueryText':
103104
await this.openQueryText();
104105
break;
106+
case 'openLogs':
107+
await this.openLogs();
108+
break;
105109
default:
106110
assertNever(msg);
107111
}
@@ -165,4 +169,16 @@ export class VariantAnalysisView extends AbstractWebview<ToVariantAnalysisMessag
165169
void showAndLogWarningMessage('Could not open variant analysis query text. Failed to open text document.');
166170
}
167171
}
172+
173+
private async openLogs(): Promise<void> {
174+
const variantAnalysis = await this.manager.getVariantAnalysis(this.variantAnalysisId);
175+
if (!variantAnalysis) {
176+
void showAndLogWarningMessage('Could not open variant analysis logs. Variant analysis not found.');
177+
return;
178+
}
179+
180+
const actionsWorkflowRunUrl = getActionsWorkflowRunUrl(variantAnalysis);
181+
182+
await commands.executeCommand('vscode.open', Uri.parse(actionsWorkflowRunUrl));
183+
}
168184
}

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)