Add command to open remote query on github

Command is available for remote queries that are in progress or
completed.
This commit is contained in:
Andrew Eisenberg
2022-03-03 10:58:35 -08:00
parent 5ad754a3a2
commit d5549f2894
2 changed files with 42 additions and 2 deletions

View File

@@ -544,6 +544,10 @@
"command": "codeQLQueryHistory.compareWith",
"title": "Compare Results"
},
{
"command": "codeQLQueryHistory.openOnGithub",
"title": "Open Remote Query on GitHub"
},
{
"command": "codeQLQueryResults.nextPathStep",
"title": "CodeQL: Show Next Step on Path"
@@ -734,7 +738,12 @@
{
"command": "codeQLQueryHistory.cancel",
"group": "9_qlCommands",
"when": "viewItem == inProgressResultsItem"
"when": "viewItem == inProgressResultsItem || viewItem == inProgressRemoteResultsItem"
},
{
"command": "codeQLQueryHistory.openOnGithub",
"group": "9_qlCommands",
"when": "viewItem == remoteResultsItem || viewItem == inProgressRemoteResultsItem"
},
{
"command": "codeQLTests.showOutputDifferences",
@@ -904,6 +913,10 @@
"command": "codeQLQueryHistory.cancel",
"when": "false"
},
{
"command": "codeQLQueryHistory.openOnGithub",
"when": "false"
},
{
"command": "codeQLQueryHistory.showQueryText",
"when": "false"

View File

@@ -151,7 +151,7 @@ export class HistoryTreeDataProvider extends DisposableObject {
switch (element.status) {
case QueryStatus.InProgress:
treeItem.iconPath = new ThemeIcon('sync~spin');
treeItem.contextValue = 'inProgressResultsItem';
treeItem.contextValue = element.t === 'local' ? 'inProgressResultsItem' : 'inProgressRemoteResultsItem';
break;
case QueryStatus.Completed:
if (element.t === 'local') {
@@ -450,6 +450,14 @@ export class QueryHistoryManager extends DisposableObject {
}
)
);
this.push(
commandRunner(
'codeQLQueryHistory.openOnGithub',
async (item: LocalQueryInfo) => {
return this.handleOpenOnGithub(item, [item]);
}
)
);
// There are two configuration items that affect the query history:
// 1. The ttl for query history items.
@@ -856,6 +864,25 @@ export class QueryHistoryManager extends DisposableObject {
);
}
async handleOpenOnGithub(
singleItem: QueryHistoryInfo,
multiSelect: QueryHistoryInfo[],
) {
const { finalSingleItem, finalMultiSelect } = this.determineSelection(singleItem, multiSelect);
// Remote queries only
if (!this.assertSingleQuery(finalMultiSelect) || !finalSingleItem || finalSingleItem.t !== 'remote') {
return;
}
const { actionsWorkflowRunId: workflowRunId, controllerRepository: { owner, name } } = finalSingleItem.remoteQuery;
await commands.executeCommand(
'vscode.open',
Uri.parse(`https://github.com/${owner}/${name}/actions/runs/${workflowRunId}`)
);
}
async getQueryText(item: QueryHistoryInfo): Promise<string> {
return item.t === 'local'
? item.initialInfo.queryText