Merge pull request #2281 from github/nora/refactor-repo-task

Repo task:  new data model and mapping
This commit is contained in:
Nora
2023-04-06 18:12:19 +02:00
committed by GitHub
6 changed files with 153 additions and 13 deletions

View File

@@ -17,7 +17,7 @@ export async function writeRepoStates(
}),
);
return await outputJson(storagePath, repoStatesData);
await outputJson(storagePath, repoStatesData);
}
export async function readRepoStates(

View File

@@ -0,0 +1,25 @@
export interface VariantAnalysisRepositoryTaskData {
repository: RepositoryData;
analysisStatus: VariantAnalysisRepoStatusData;
resultCount?: number;
artifactSizeInBytes?: number;
failureMessage?: string;
databaseCommitSha?: string;
sourceLocationPrefix?: string;
artifactUrl?: string;
}
interface RepositoryData {
id: number;
fullName: string;
private: boolean;
}
export enum VariantAnalysisRepoStatusData {
Pending = "pending",
InProgress = "inProgress",
Succeeded = "succeeded",
Failed = "failed",
Canceled = "canceled",
TimedOut = "timedOut",
}

View File

@@ -0,0 +1,24 @@
import { outputJson, readJson } from "fs-extra";
import { join } from "path";
import { VariantAnalysisRepositoryTask } from "../shared/variant-analysis";
import { mapRepoTaskToData } from "./repo-task-to-data-mapper";
import { mapRepoTaskToDomain } from "./repo-task-to-domain-mapper";
export const REPO_TASK_FILENAME = "repo_task.json";
export async function writeRepoTask(
storageDirectory: string,
repoTask: VariantAnalysisRepositoryTask,
): Promise<void> {
const repoTaskData = mapRepoTaskToData(repoTask);
await outputJson(join(storageDirectory, REPO_TASK_FILENAME), repoTaskData);
}
export async function readRepoTask(
storageDirectory: string,
): Promise<VariantAnalysisRepositoryTask> {
const repoTaskData = await readJson(
join(storageDirectory, REPO_TASK_FILENAME),
);
return mapRepoTaskToDomain(repoTaskData);
}

View File

@@ -0,0 +1,49 @@
import { assertNever } from "../../pure/helpers-pure";
import {
VariantAnalysisRepositoryTask,
VariantAnalysisRepoStatus,
} from "../shared/variant-analysis";
import {
VariantAnalysisRepositoryTaskData,
VariantAnalysisRepoStatusData,
} from "./repo-task-data-types";
export function mapRepoTaskToData(
repoTask: VariantAnalysisRepositoryTask,
): VariantAnalysisRepositoryTaskData {
return {
repository: {
id: repoTask.repository.id,
fullName: repoTask.repository.fullName,
private: repoTask.repository.private,
},
analysisStatus: mapRepoTaskAnalysisStatusToData(repoTask.analysisStatus),
resultCount: repoTask.resultCount,
artifactSizeInBytes: repoTask.artifactSizeInBytes,
failureMessage: repoTask.failureMessage,
databaseCommitSha: repoTask.databaseCommitSha,
sourceLocationPrefix: repoTask.sourceLocationPrefix,
artifactUrl: repoTask.artifactUrl,
};
}
function mapRepoTaskAnalysisStatusToData(
analysisStatus: VariantAnalysisRepoStatus,
): VariantAnalysisRepoStatusData {
switch (analysisStatus) {
case VariantAnalysisRepoStatus.Pending:
return VariantAnalysisRepoStatusData.Pending;
case VariantAnalysisRepoStatus.InProgress:
return VariantAnalysisRepoStatusData.InProgress;
case VariantAnalysisRepoStatus.Succeeded:
return VariantAnalysisRepoStatusData.Succeeded;
case VariantAnalysisRepoStatus.Failed:
return VariantAnalysisRepoStatusData.Failed;
case VariantAnalysisRepoStatus.Canceled:
return VariantAnalysisRepoStatusData.Canceled;
case VariantAnalysisRepoStatus.TimedOut:
return VariantAnalysisRepoStatusData.TimedOut;
default:
assertNever(analysisStatus);
}
}

View File

@@ -0,0 +1,49 @@
import { assertNever } from "../../pure/helpers-pure";
import {
VariantAnalysisRepositoryTask,
VariantAnalysisRepoStatus,
} from "../shared/variant-analysis";
import {
VariantAnalysisRepositoryTaskData,
VariantAnalysisRepoStatusData,
} from "./repo-task-data-types";
export function mapRepoTaskToDomain(
repoTask: VariantAnalysisRepositoryTaskData,
): VariantAnalysisRepositoryTask {
return {
repository: {
id: repoTask.repository.id,
fullName: repoTask.repository.fullName,
private: repoTask.repository.private,
},
analysisStatus: mapRepoTaskAnalysisStatusToDomain(repoTask.analysisStatus),
resultCount: repoTask.resultCount,
artifactSizeInBytes: repoTask.artifactSizeInBytes,
failureMessage: repoTask.failureMessage,
databaseCommitSha: repoTask.databaseCommitSha,
sourceLocationPrefix: repoTask.sourceLocationPrefix,
artifactUrl: repoTask.artifactUrl,
};
}
function mapRepoTaskAnalysisStatusToDomain(
analysisStatus: VariantAnalysisRepoStatusData,
): VariantAnalysisRepoStatus {
switch (analysisStatus) {
case VariantAnalysisRepoStatusData.Pending:
return VariantAnalysisRepoStatus.Pending;
case VariantAnalysisRepoStatusData.InProgress:
return VariantAnalysisRepoStatus.InProgress;
case VariantAnalysisRepoStatusData.Succeeded:
return VariantAnalysisRepoStatus.Succeeded;
case VariantAnalysisRepoStatusData.Failed:
return VariantAnalysisRepoStatus.Failed;
case VariantAnalysisRepoStatusData.Canceled:
return VariantAnalysisRepoStatus.Canceled;
case VariantAnalysisRepoStatusData.TimedOut:
return VariantAnalysisRepoStatus.TimedOut;
default:
assertNever(analysisStatus);
}
}

View File

@@ -1,4 +1,4 @@
import { appendFile, pathExists, mkdir, outputJson, readJson } from "fs-extra";
import { appendFile, pathExists } from "fs-extra";
import fetch from "node-fetch";
import { EOL } from "os";
import { join } from "path";
@@ -17,6 +17,7 @@ import {
import { DisposableObject, DisposeHandler } from "../pure/disposable-object";
import { EventEmitter } from "vscode";
import { unzipFile } from "../pure/zip";
import { readRepoTask, writeRepoTask } from "./store/repo-task-store";
type CacheKey = `${number}/${string}`;
@@ -37,7 +38,6 @@ export type LoadResultsOptions = {
};
export class VariantAnalysisResultsManager extends DisposableObject {
private static readonly REPO_TASK_FILENAME = "repo_task.json";
private static readonly RESULTS_DIRECTORY = "results";
private readonly cachedResults: Map<
@@ -78,14 +78,7 @@ export class VariantAnalysisResultsManager extends DisposableObject {
repoTask.repository.fullName,
);
if (!(await pathExists(resultDirectory))) {
await mkdir(resultDirectory, { recursive: true });
}
await outputJson(
join(resultDirectory, VariantAnalysisResultsManager.REPO_TASK_FILENAME),
repoTask,
);
await writeRepoTask(resultDirectory, repoTask);
const zipFilePath = join(resultDirectory, "results.zip");
@@ -184,8 +177,8 @@ export class VariantAnalysisResultsManager extends DisposableObject {
repositoryFullName,
);
const repoTask: VariantAnalysisRepositoryTask = await readJson(
join(storageDirectory, VariantAnalysisResultsManager.REPO_TASK_FILENAME),
const repoTask: VariantAnalysisRepositoryTask = await readRepoTask(
storageDirectory,
);
if (!repoTask.databaseCommitSha || !repoTask.sourceLocationPrefix) {