Skip to content

Commit 36f7555

Browse files
authored
Merge pull request #2281 from github/nora/refactor-repo-task
Repo task: new data model and mapping
2 parents fcc9376 + 2cb5928 commit 36f7555

File tree

6 files changed

+153
-13
lines changed

6 files changed

+153
-13
lines changed

extensions/ql-vscode/src/variant-analysis/store/repo-states-store.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export async function writeRepoStates(
1717
}),
1818
);
1919

20-
return await outputJson(storagePath, repoStatesData);
20+
await outputJson(storagePath, repoStatesData);
2121
}
2222

2323
export async function readRepoStates(
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
export interface VariantAnalysisRepositoryTaskData {
2+
repository: RepositoryData;
3+
analysisStatus: VariantAnalysisRepoStatusData;
4+
resultCount?: number;
5+
artifactSizeInBytes?: number;
6+
failureMessage?: string;
7+
databaseCommitSha?: string;
8+
sourceLocationPrefix?: string;
9+
artifactUrl?: string;
10+
}
11+
12+
interface RepositoryData {
13+
id: number;
14+
fullName: string;
15+
private: boolean;
16+
}
17+
18+
export enum VariantAnalysisRepoStatusData {
19+
Pending = "pending",
20+
InProgress = "inProgress",
21+
Succeeded = "succeeded",
22+
Failed = "failed",
23+
Canceled = "canceled",
24+
TimedOut = "timedOut",
25+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { outputJson, readJson } from "fs-extra";
2+
import { join } from "path";
3+
import { VariantAnalysisRepositoryTask } from "../shared/variant-analysis";
4+
import { mapRepoTaskToData } from "./repo-task-to-data-mapper";
5+
import { mapRepoTaskToDomain } from "./repo-task-to-domain-mapper";
6+
7+
export const REPO_TASK_FILENAME = "repo_task.json";
8+
9+
export async function writeRepoTask(
10+
storageDirectory: string,
11+
repoTask: VariantAnalysisRepositoryTask,
12+
): Promise<void> {
13+
const repoTaskData = mapRepoTaskToData(repoTask);
14+
await outputJson(join(storageDirectory, REPO_TASK_FILENAME), repoTaskData);
15+
}
16+
17+
export async function readRepoTask(
18+
storageDirectory: string,
19+
): Promise<VariantAnalysisRepositoryTask> {
20+
const repoTaskData = await readJson(
21+
join(storageDirectory, REPO_TASK_FILENAME),
22+
);
23+
return mapRepoTaskToDomain(repoTaskData);
24+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { assertNever } from "../../pure/helpers-pure";
2+
import {
3+
VariantAnalysisRepositoryTask,
4+
VariantAnalysisRepoStatus,
5+
} from "../shared/variant-analysis";
6+
import {
7+
VariantAnalysisRepositoryTaskData,
8+
VariantAnalysisRepoStatusData,
9+
} from "./repo-task-data-types";
10+
11+
export function mapRepoTaskToData(
12+
repoTask: VariantAnalysisRepositoryTask,
13+
): VariantAnalysisRepositoryTaskData {
14+
return {
15+
repository: {
16+
id: repoTask.repository.id,
17+
fullName: repoTask.repository.fullName,
18+
private: repoTask.repository.private,
19+
},
20+
analysisStatus: mapRepoTaskAnalysisStatusToData(repoTask.analysisStatus),
21+
resultCount: repoTask.resultCount,
22+
artifactSizeInBytes: repoTask.artifactSizeInBytes,
23+
failureMessage: repoTask.failureMessage,
24+
databaseCommitSha: repoTask.databaseCommitSha,
25+
sourceLocationPrefix: repoTask.sourceLocationPrefix,
26+
artifactUrl: repoTask.artifactUrl,
27+
};
28+
}
29+
30+
function mapRepoTaskAnalysisStatusToData(
31+
analysisStatus: VariantAnalysisRepoStatus,
32+
): VariantAnalysisRepoStatusData {
33+
switch (analysisStatus) {
34+
case VariantAnalysisRepoStatus.Pending:
35+
return VariantAnalysisRepoStatusData.Pending;
36+
case VariantAnalysisRepoStatus.InProgress:
37+
return VariantAnalysisRepoStatusData.InProgress;
38+
case VariantAnalysisRepoStatus.Succeeded:
39+
return VariantAnalysisRepoStatusData.Succeeded;
40+
case VariantAnalysisRepoStatus.Failed:
41+
return VariantAnalysisRepoStatusData.Failed;
42+
case VariantAnalysisRepoStatus.Canceled:
43+
return VariantAnalysisRepoStatusData.Canceled;
44+
case VariantAnalysisRepoStatus.TimedOut:
45+
return VariantAnalysisRepoStatusData.TimedOut;
46+
default:
47+
assertNever(analysisStatus);
48+
}
49+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { assertNever } from "../../pure/helpers-pure";
2+
import {
3+
VariantAnalysisRepositoryTask,
4+
VariantAnalysisRepoStatus,
5+
} from "../shared/variant-analysis";
6+
import {
7+
VariantAnalysisRepositoryTaskData,
8+
VariantAnalysisRepoStatusData,
9+
} from "./repo-task-data-types";
10+
11+
export function mapRepoTaskToDomain(
12+
repoTask: VariantAnalysisRepositoryTaskData,
13+
): VariantAnalysisRepositoryTask {
14+
return {
15+
repository: {
16+
id: repoTask.repository.id,
17+
fullName: repoTask.repository.fullName,
18+
private: repoTask.repository.private,
19+
},
20+
analysisStatus: mapRepoTaskAnalysisStatusToDomain(repoTask.analysisStatus),
21+
resultCount: repoTask.resultCount,
22+
artifactSizeInBytes: repoTask.artifactSizeInBytes,
23+
failureMessage: repoTask.failureMessage,
24+
databaseCommitSha: repoTask.databaseCommitSha,
25+
sourceLocationPrefix: repoTask.sourceLocationPrefix,
26+
artifactUrl: repoTask.artifactUrl,
27+
};
28+
}
29+
30+
function mapRepoTaskAnalysisStatusToDomain(
31+
analysisStatus: VariantAnalysisRepoStatusData,
32+
): VariantAnalysisRepoStatus {
33+
switch (analysisStatus) {
34+
case VariantAnalysisRepoStatusData.Pending:
35+
return VariantAnalysisRepoStatus.Pending;
36+
case VariantAnalysisRepoStatusData.InProgress:
37+
return VariantAnalysisRepoStatus.InProgress;
38+
case VariantAnalysisRepoStatusData.Succeeded:
39+
return VariantAnalysisRepoStatus.Succeeded;
40+
case VariantAnalysisRepoStatusData.Failed:
41+
return VariantAnalysisRepoStatus.Failed;
42+
case VariantAnalysisRepoStatusData.Canceled:
43+
return VariantAnalysisRepoStatus.Canceled;
44+
case VariantAnalysisRepoStatusData.TimedOut:
45+
return VariantAnalysisRepoStatus.TimedOut;
46+
default:
47+
assertNever(analysisStatus);
48+
}
49+
}

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

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { appendFile, pathExists, mkdir, outputJson, readJson } from "fs-extra";
1+
import { appendFile, pathExists } from "fs-extra";
22
import fetch from "node-fetch";
33
import { EOL } from "os";
44
import { join } from "path";
@@ -17,6 +17,7 @@ import {
1717
import { DisposableObject, DisposeHandler } from "../pure/disposable-object";
1818
import { EventEmitter } from "vscode";
1919
import { unzipFile } from "../pure/zip";
20+
import { readRepoTask, writeRepoTask } from "./store/repo-task-store";
2021

2122
type CacheKey = `${number}/${string}`;
2223

@@ -37,7 +38,6 @@ export type LoadResultsOptions = {
3738
};
3839

3940
export class VariantAnalysisResultsManager extends DisposableObject {
40-
private static readonly REPO_TASK_FILENAME = "repo_task.json";
4141
private static readonly RESULTS_DIRECTORY = "results";
4242

4343
private readonly cachedResults: Map<
@@ -78,14 +78,7 @@ export class VariantAnalysisResultsManager extends DisposableObject {
7878
repoTask.repository.fullName,
7979
);
8080

81-
if (!(await pathExists(resultDirectory))) {
82-
await mkdir(resultDirectory, { recursive: true });
83-
}
84-
85-
await outputJson(
86-
join(resultDirectory, VariantAnalysisResultsManager.REPO_TASK_FILENAME),
87-
repoTask,
88-
);
81+
await writeRepoTask(resultDirectory, repoTask);
8982

9083
const zipFilePath = join(resultDirectory, "results.zip");
9184

@@ -184,8 +177,8 @@ export class VariantAnalysisResultsManager extends DisposableObject {
184177
repositoryFullName,
185178
);
186179

187-
const repoTask: VariantAnalysisRepositoryTask = await readJson(
188-
join(storageDirectory, VariantAnalysisResultsManager.REPO_TASK_FILENAME),
180+
const repoTask: VariantAnalysisRepositoryTask = await readRepoTask(
181+
storageDirectory,
189182
);
190183

191184
if (!repoTask.databaseCommitSha || !repoTask.sourceLocationPrefix) {

0 commit comments

Comments
 (0)