From 590b83916692fa40583208d9d156b7d26a9ed5d0 Mon Sep 17 00:00:00 2001 From: Charis Kyriakou Date: Fri, 24 Feb 2023 11:59:40 +0000 Subject: [PATCH 1/4] MRVA repositories panel not behind canary --- extensions/ql-vscode/package.json | 3 +-- .../ql-vscode/src/databases/db-module.ts | 25 +++++-------------- extensions/ql-vscode/src/extension.ts | 2 +- .../variant-analysis/repository-selection.ts | 4 +-- .../src/variant-analysis/run-remote-query.ts | 2 +- .../variant-analysis-manager.ts | 2 +- 6 files changed, 12 insertions(+), 26 deletions(-) diff --git a/extensions/ql-vscode/package.json b/extensions/ql-vscode/package.json index 3beaedd0b14..72158a8232c 100644 --- a/extensions/ql-vscode/package.json +++ b/extensions/ql-vscode/package.json @@ -1281,8 +1281,7 @@ }, { "id": "codeQLVariantAnalysisRepositories", - "name": "Variant Analysis Repositories", - "when": "config.codeQL.canary" + "name": "Variant Analysis Repositories" }, { "id": "codeQLQueryHistory", diff --git a/extensions/ql-vscode/src/databases/db-module.ts b/extensions/ql-vscode/src/databases/db-module.ts index f81b42d25de..ceb46779aec 100644 --- a/extensions/ql-vscode/src/databases/db-module.ts +++ b/extensions/ql-vscode/src/databases/db-module.ts @@ -1,12 +1,11 @@ import { window } from "vscode"; -import { App, AppMode } from "../common/app"; +import { App } from "../common/app"; import { extLogger } from "../common"; import { DisposableObject } from "../pure/disposable-object"; import { DbConfigStore } from "./config/db-config-store"; import { DbManager } from "./db-manager"; import { DbPanel } from "./ui/db-panel"; import { DbSelectionDecorationProvider } from "./ui/db-selection-decoration-provider"; -import { isCanary } from "../config"; export class DbModule extends DisposableObject { public readonly dbManager: DbManager; @@ -19,24 +18,12 @@ export class DbModule extends DisposableObject { this.dbManager = new DbManager(app, this.dbConfigStore); } - public static async initialize(app: App): Promise { - if (DbModule.shouldEnableModule(app.mode)) { - const dbModule = new DbModule(app); - app.subscriptions.push(dbModule); + public static async initialize(app: App): Promise { + const dbModule = new DbModule(app); + app.subscriptions.push(dbModule); - await dbModule.initialize(app); - return dbModule; - } - - return undefined; - } - - private static shouldEnableModule(app: AppMode): boolean { - if (app === AppMode.Development || app === AppMode.Test) { - return true; - } - - return isCanary(); + await dbModule.initialize(app); + return dbModule; } private async initialize(app: App): Promise { diff --git a/extensions/ql-vscode/src/extension.ts b/extensions/ql-vscode/src/extension.ts index 5960da4dccc..b502b0d9023 100644 --- a/extensions/ql-vscode/src/extension.ts +++ b/extensions/ql-vscode/src/extension.ts @@ -637,7 +637,7 @@ async function activateWithInstalledDistribution( cliServer, variantAnalysisStorageDir, variantAnalysisResultsManager, - dbModule?.dbManager, + dbModule.dbManager, ); ctx.subscriptions.push(variantAnalysisManager); ctx.subscriptions.push(variantAnalysisResultsManager); diff --git a/extensions/ql-vscode/src/variant-analysis/repository-selection.ts b/extensions/ql-vscode/src/variant-analysis/repository-selection.ts index c289067de9e..59f0b7b7b7b 100644 --- a/extensions/ql-vscode/src/variant-analysis/repository-selection.ts +++ b/extensions/ql-vscode/src/variant-analysis/repository-selection.ts @@ -13,9 +13,9 @@ export interface RepositorySelection { * @returns The user selection. */ export async function getRepositorySelection( - dbManager?: DbManager, + dbManager: DbManager, ): Promise { - const selectedDbItem = dbManager?.getSelectedDbItem(); + const selectedDbItem = dbManager.getSelectedDbItem(); if (selectedDbItem) { switch (selectedDbItem.kind) { case DbItemKind.LocalDatabase || DbItemKind.LocalList: diff --git a/extensions/ql-vscode/src/variant-analysis/run-remote-query.ts b/extensions/ql-vscode/src/variant-analysis/run-remote-query.ts index ffeb1d89aa7..8b64aa8c7b7 100644 --- a/extensions/ql-vscode/src/variant-analysis/run-remote-query.ts +++ b/extensions/ql-vscode/src/variant-analysis/run-remote-query.ts @@ -223,7 +223,7 @@ export async function prepareRemoteQueryRun( uri: Uri | undefined, progress: ProgressCallback, token: CancellationToken, - dbManager?: DbManager, + dbManager: DbManager, ): Promise { if (!uri?.fsPath.endsWith(".ql")) { throw new UserCancellationException("Not a CodeQL query file."); diff --git a/extensions/ql-vscode/src/variant-analysis/variant-analysis-manager.ts b/extensions/ql-vscode/src/variant-analysis/variant-analysis-manager.ts index 9156617f4d0..af42da85c36 100644 --- a/extensions/ql-vscode/src/variant-analysis/variant-analysis-manager.ts +++ b/extensions/ql-vscode/src/variant-analysis/variant-analysis-manager.ts @@ -105,7 +105,7 @@ export class VariantAnalysisManager private readonly cliServer: CodeQLCliServer, private readonly storagePath: string, private readonly variantAnalysisResultsManager: VariantAnalysisResultsManager, - private readonly dbManager?: DbManager, + private readonly dbManager: DbManager, ) { super(); this.variantAnalysisMonitor = this.push( From 1bf7fc148a29e0866e1238612e43773651a7903a Mon Sep 17 00:00:00 2001 From: Charis Kyriakou Date: Fri, 24 Feb 2023 13:57:18 +0000 Subject: [PATCH 2/4] MRVA execution not behind canary --- extensions/ql-vscode/docs/test-plan.md | 4 --- extensions/ql-vscode/package.json | 7 +++-- extensions/ql-vscode/src/extension.ts | 26 +++++++------------ ...nt-analysis-submission-integration.test.ts | 7 +---- 4 files changed, 14 insertions(+), 30 deletions(-) diff --git a/extensions/ql-vscode/docs/test-plan.md b/extensions/ql-vscode/docs/test-plan.md index c317d4f69a7..788dd0e27ec 100644 --- a/extensions/ql-vscode/docs/test-plan.md +++ b/extensions/ql-vscode/docs/test-plan.md @@ -16,10 +16,6 @@ choose to go through some of the Optional Test Cases. ## Required Test Cases -### Pre-requisites - -- Flip the `codeQL.canary` flag. This will enable MRVA in the extension. - ### Test Case 1: MRVA - Running a problem path query and viewing results 1. Open the [UnsafeJQueryPlugin query](https://github.com/github/codeql/blob/main/javascript/ql/src/Security/CWE-079/UnsafeJQueryPlugin.ql). diff --git a/extensions/ql-vscode/package.json b/extensions/ql-vscode/package.json index 72158a8232c..7dba46a927e 100644 --- a/extensions/ql-vscode/package.json +++ b/extensions/ql-vscode/package.json @@ -978,11 +978,10 @@ }, { "command": "codeQL.runVariantAnalysis", - "when": "config.codeQL.canary && editorLangId == ql && resourceExtname == .ql" + "when": "editorLangId == ql && resourceExtname == .ql" }, { - "command": "codeQL.exportSelectedVariantAnalysisResults", - "when": "config.codeQL.canary" + "command": "codeQL.exportSelectedVariantAnalysisResults" }, { "command": "codeQL.runQueries", @@ -1236,7 +1235,7 @@ }, { "command": "codeQL.runVariantAnalysis", - "when": "config.codeQL.canary && editorLangId == ql && resourceExtname == .ql" + "when": "editorLangId == ql && resourceExtname == .ql" }, { "command": "codeQL.viewAst", diff --git a/extensions/ql-vscode/src/extension.ts b/extensions/ql-vscode/src/extension.ts index b502b0d9023..9be77ab4a84 100644 --- a/extensions/ql-vscode/src/extension.ts +++ b/extensions/ql-vscode/src/extension.ts @@ -1121,23 +1121,17 @@ async function activateWithInstalledDistribution( token: CancellationToken, uri: Uri | undefined, ) => { - if (isCanary()) { - progress({ - maxStep: 5, - step: 0, - message: "Getting credentials", - }); + progress({ + maxStep: 5, + step: 0, + message: "Getting credentials", + }); - await variantAnalysisManager.runVariantAnalysis( - uri || window.activeTextEditor?.document.uri, - progress, - token, - ); - } else { - throw new Error( - "Variant analysis requires the CodeQL Canary version to run.", - ); - } + await variantAnalysisManager.runVariantAnalysis( + uri || window.activeTextEditor?.document.uri, + progress, + token, + ); }, { title: "Run Variant Analysis", diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-submission-integration.test.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-submission-integration.test.ts index 6fbbb3ca2eb..d02b43e4151 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-submission-integration.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-submission-integration.test.ts @@ -3,7 +3,6 @@ import { resolve } from "path"; import { authentication, commands, - ConfigurationTarget, extensions, QuickPickItem, TextDocument, @@ -13,10 +12,7 @@ import { import { CodeQLExtensionInterface } from "../../../../src/extension"; import { MockGitHubApiServer } from "../../../../src/mocks/mock-gh-api-server"; -import { - CANARY_FEATURES, - setRemoteControllerRepo, -} from "../../../../src/config"; +import { setRemoteControllerRepo } from "../../../../src/config"; jest.setTimeout(30_000); @@ -39,7 +35,6 @@ describe("Variant Analysis Submission Integration", () => { let showErrorMessageSpy: jest.SpiedFunction; beforeEach(async () => { - await CANARY_FEATURES.updateValue(true, ConfigurationTarget.Global); await setRemoteControllerRepo("github/vscode-codeql"); jest.spyOn(authentication, "getSession").mockResolvedValue({ From 55761aa4eec9b55caffbd67c3ffc04eb76f2b221 Mon Sep 17 00:00:00 2001 From: Charis Kyriakou Date: Tue, 28 Feb 2023 14:06:26 +0000 Subject: [PATCH 3/4] Update README to include MRVA --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1fce9124738..32d2af24cae 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ To see what has changed in the last few versions of the extension, see the [Chan * Shows the flow of data through the results of path queries, which is essential for triaging security results. * Provides an easy way to run queries from the large, open source repository of [CodeQL security queries](https://github.com/github/codeql). * Adds IntelliSense to support you writing and editing your own CodeQL query and library files. +* Supports you running CodeQL queries against thousands of repositories on GitHub using multi-repository variant analysis. ## Project goals and scope From ff0425d88945d2f18a7768488b0666dbb8fd1aa1 Mon Sep 17 00:00:00 2001 From: Charis Kyriakou Date: Tue, 28 Feb 2023 15:02:37 +0000 Subject: [PATCH 4/4] Update CHANGELOG to include MRVA --- extensions/ql-vscode/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/extensions/ql-vscode/CHANGELOG.md b/extensions/ql-vscode/CHANGELOG.md index fa07fc5159c..4c39ebd1fc0 100644 --- a/extensions/ql-vscode/CHANGELOG.md +++ b/extensions/ql-vscode/CHANGELOG.md @@ -2,6 +2,7 @@ ## [UNRELEASED] +- Enable multi-repository variant analysis. [#2121](https://github.com/github/vscode-codeql/pull/2121) - Enable collection of telemetry concerning interactions with UI elements, including buttons, links, and other inputs. [#2114](https://github.com/github/vscode-codeql/pull/2114) # 1.7.10 - 23 February 2023