Restart variant analysis monitor when reauthenticating
This commit is contained in:
@@ -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>;
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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> {
|
||||
|
||||
@@ -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> {
|
||||
|
||||
Reference in New Issue
Block a user