Restart variant analysis monitor when reauthenticating

This commit is contained in:
Koen Vlaswinkel
2023-05-15 15:06:34 +02:00
parent 9e74ae0bbf
commit 5b9ed39f4f
4 changed files with 49 additions and 1 deletions

View File

@@ -251,6 +251,9 @@ export type VariantAnalysisCommands = {
"codeQL.monitorRehydratedVariantAnalysis": (
variantAnalysis: VariantAnalysis,
) => Promise<void>;
"codeQL.monitorReauthenticatedVariantAnalysis": (
variantAnalysis: VariantAnalysis,
) => Promise<void>;
"codeQL.openVariantAnalysisLogs": (
variantAnalysisId: number,
) => Promise<void>;

View File

@@ -3,7 +3,7 @@ import * as Octokit from "@octokit/rest";
import { retry } from "@octokit/plugin-retry";
import { Credentials } from "../authentication";
const GITHUB_AUTH_PROVIDER_ID = "github";
export const GITHUB_AUTH_PROVIDER_ID = "github";
// We need 'repo' scope for triggering workflows, 'gist' scope for exporting results to Gist,
// and 'read:packages' for reading private CodeQL packages.

View File

@@ -5,6 +5,8 @@ import {
getVariantAnalysisRepo,
} from "./gh-api/gh-api-client";
import {
authentication,
AuthenticationSessionsChangeEvent,
CancellationToken,
env,
EventEmitter,
@@ -72,6 +74,7 @@ import {
REPO_STATES_FILENAME,
writeRepoStates,
} from "./repo-states-store";
import { GITHUB_AUTH_PROVIDER_ID } from "../common/vscode/authentication";
export class VariantAnalysisManager
extends DisposableObject
@@ -131,6 +134,10 @@ export class VariantAnalysisManager
this.variantAnalysisResultsManager.onResultLoaded(
this.onRepoResultLoaded.bind(this),
);
this.push(
authentication.onDidChangeSessions(this.onDidChangeSessions.bind(this)),
);
}
getCommands(): VariantAnalysisCommands {
@@ -144,6 +151,8 @@ export class VariantAnalysisManager
this.monitorVariantAnalysis.bind(this),
"codeQL.monitorRehydratedVariantAnalysis":
this.monitorVariantAnalysis.bind(this),
"codeQL.monitorReauthenticatedVariantAnalysis":
this.monitorVariantAnalysis.bind(this),
"codeQL.openVariantAnalysisLogs": this.openVariantAnalysisLogs.bind(this),
"codeQL.openVariantAnalysisView": this.showView.bind(this),
"codeQL.runVariantAnalysis":
@@ -504,6 +513,38 @@ export class VariantAnalysisManager
repoStates[repoState.repositoryId] = repoState;
}
private async onDidChangeSessions(
event: AuthenticationSessionsChangeEvent,
): Promise<void> {
if (event.provider.id !== GITHUB_AUTH_PROVIDER_ID) {
return;
}
for (const variantAnalysis of this.variantAnalyses.values()) {
if (
this.variantAnalysisMonitor.isMonitoringVariantAnalysis(
variantAnalysis.id,
)
) {
continue;
}
if (
await isVariantAnalysisComplete(
variantAnalysis,
this.makeResultDownloadChecker(variantAnalysis),
)
) {
continue;
}
void this.app.commands.execute(
"codeQL.monitorReauthenticatedVariantAnalysis",
variantAnalysis,
);
}
}
public async monitorVariantAnalysis(
variantAnalysis: VariantAnalysis,
): Promise<void> {

View File

@@ -39,6 +39,10 @@ export class VariantAnalysisMonitor extends DisposableObject {
super();
}
public isMonitoringVariantAnalysis(variantAnalysisId: number): boolean {
return this.monitoringVariantAnalyses.has(variantAnalysisId);
}
public async monitorVariantAnalysis(
variantAnalysis: VariantAnalysis,
): Promise<void> {