Skip to content

Commit 5b9ed39

Browse files
committed
Restart variant analysis monitor when reauthenticating
1 parent 9e74ae0 commit 5b9ed39

4 files changed

Lines changed: 49 additions & 1 deletion

File tree

extensions/ql-vscode/src/common/commands.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,9 @@ export type VariantAnalysisCommands = {
251251
"codeQL.monitorRehydratedVariantAnalysis": (
252252
variantAnalysis: VariantAnalysis,
253253
) => Promise<void>;
254+
"codeQL.monitorReauthenticatedVariantAnalysis": (
255+
variantAnalysis: VariantAnalysis,
256+
) => Promise<void>;
254257
"codeQL.openVariantAnalysisLogs": (
255258
variantAnalysisId: number,
256259
) => Promise<void>;

extensions/ql-vscode/src/common/vscode/authentication.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as Octokit from "@octokit/rest";
33
import { retry } from "@octokit/plugin-retry";
44
import { Credentials } from "../authentication";
55

6-
const GITHUB_AUTH_PROVIDER_ID = "github";
6+
export const GITHUB_AUTH_PROVIDER_ID = "github";
77

88
// We need 'repo' scope for triggering workflows, 'gist' scope for exporting results to Gist,
99
// and 'read:packages' for reading private CodeQL packages.

extensions/ql-vscode/src/variant-analysis/variant-analysis-manager.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {
55
getVariantAnalysisRepo,
66
} from "./gh-api/gh-api-client";
77
import {
8+
authentication,
9+
AuthenticationSessionsChangeEvent,
810
CancellationToken,
911
env,
1012
EventEmitter,
@@ -72,6 +74,7 @@ import {
7274
REPO_STATES_FILENAME,
7375
writeRepoStates,
7476
} from "./repo-states-store";
77+
import { GITHUB_AUTH_PROVIDER_ID } from "../common/vscode/authentication";
7578

7679
export class VariantAnalysisManager
7780
extends DisposableObject
@@ -131,6 +134,10 @@ export class VariantAnalysisManager
131134
this.variantAnalysisResultsManager.onResultLoaded(
132135
this.onRepoResultLoaded.bind(this),
133136
);
137+
138+
this.push(
139+
authentication.onDidChangeSessions(this.onDidChangeSessions.bind(this)),
140+
);
134141
}
135142

136143
getCommands(): VariantAnalysisCommands {
@@ -144,6 +151,8 @@ export class VariantAnalysisManager
144151
this.monitorVariantAnalysis.bind(this),
145152
"codeQL.monitorRehydratedVariantAnalysis":
146153
this.monitorVariantAnalysis.bind(this),
154+
"codeQL.monitorReauthenticatedVariantAnalysis":
155+
this.monitorVariantAnalysis.bind(this),
147156
"codeQL.openVariantAnalysisLogs": this.openVariantAnalysisLogs.bind(this),
148157
"codeQL.openVariantAnalysisView": this.showView.bind(this),
149158
"codeQL.runVariantAnalysis":
@@ -504,6 +513,38 @@ export class VariantAnalysisManager
504513
repoStates[repoState.repositoryId] = repoState;
505514
}
506515

516+
private async onDidChangeSessions(
517+
event: AuthenticationSessionsChangeEvent,
518+
): Promise<void> {
519+
if (event.provider.id !== GITHUB_AUTH_PROVIDER_ID) {
520+
return;
521+
}
522+
523+
for (const variantAnalysis of this.variantAnalyses.values()) {
524+
if (
525+
this.variantAnalysisMonitor.isMonitoringVariantAnalysis(
526+
variantAnalysis.id,
527+
)
528+
) {
529+
continue;
530+
}
531+
532+
if (
533+
await isVariantAnalysisComplete(
534+
variantAnalysis,
535+
this.makeResultDownloadChecker(variantAnalysis),
536+
)
537+
) {
538+
continue;
539+
}
540+
541+
void this.app.commands.execute(
542+
"codeQL.monitorReauthenticatedVariantAnalysis",
543+
variantAnalysis,
544+
);
545+
}
546+
}
547+
507548
public async monitorVariantAnalysis(
508549
variantAnalysis: VariantAnalysis,
509550
): Promise<void> {

extensions/ql-vscode/src/variant-analysis/variant-analysis-monitor.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ export class VariantAnalysisMonitor extends DisposableObject {
3939
super();
4040
}
4141

42+
public isMonitoringVariantAnalysis(variantAnalysisId: number): boolean {
43+
return this.monitoringVariantAnalyses.has(variantAnalysisId);
44+
}
45+
4246
public async monitorVariantAnalysis(
4347
variantAnalysis: VariantAnalysis,
4448
): Promise<void> {

0 commit comments

Comments
 (0)