in eng/tools/lint-diff/src/correlateResults.ts [7:78]
export async function correlateRuns(
beforePath: string,
beforeChecks: AutorestRunResult[],
afterChecks: AutorestRunResult[],
): Promise<Map<string, BeforeAfter>> {
const runCorrelations = new Map<string, BeforeAfter>();
console.log("\nCorrelating runs...");
for (const results of afterChecks) {
const { readme, tag } = results;
const key = tag ? `${readme}#${tag}` : readme;
if (runCorrelations.has(key)) {
throw new Error(`Duplicate key found correlating autorest runs: ${key}`);
}
// Look for candidates matching readme and tag
const beforeCandidates = beforeChecks.filter((r) => r.readme === readme && r.tag === tag);
if (beforeCandidates.length === 1) {
runCorrelations.set(key, {
before: beforeCandidates[0],
after: results,
});
continue;
} else if (beforeCandidates.length > 1) {
throw new Error(`Multiple before candidates found for key ${key}`);
}
// Look for candidates with a matching default tag from the baseline
const beforeReadmePath = join(beforePath, readme);
if (await pathExists(beforeReadmePath)) {
const readmeContent = await readFile(beforeReadmePath, { encoding: "utf-8" });
const defaultTag = getDefaultTag(readmeContent);
if (!defaultTag) {
throw new Error(`No default tag found for readme ${readme} in before state`);
}
const beforeDefaultTagCandidates = beforeChecks.filter(
(r) => r.readme === readme && r.tag === defaultTag,
);
if (beforeDefaultTagCandidates.length === 1) {
runCorrelations.set(key, {
before: beforeDefaultTagCandidates[0],
after: results,
});
continue;
} else if (beforeDefaultTagCandidates.length > 1) {
throw new Error(
`Multiple before candidates found for key ${key} using default tag ${defaultTag}`,
);
}
// Look for candidates matching just the readme file
const beforeReadmeCandidate = beforeChecks.filter((r) => r.readme === readme);
if (beforeReadmeCandidate.length === 1) {
runCorrelations.set(key, {
before: beforeReadmeCandidate[0],
after: results,
});
continue;
} else if (beforeReadmeCandidate.length > 1) {
throw new Error(`Multiple before candidates found for key ${key} using readme ${readme}`);
}
}
console.log(`No before candidates found for key ${key}, using no baseline`);
runCorrelations.set(key, {
before: null,
after: results,
});
}
return runCorrelations;
}