Add getPreliminaryOverlayDatabaseMode()

This commit is contained in:
Chuan-kai Lin
2025-09-23 09:13:03 -07:00
parent 25b6845641
commit 57444ccc63
2 changed files with 102 additions and 1 deletions
+46 -1
View File
@@ -1023,6 +1023,8 @@ const getOverlayDatabaseModeMacro = test.macro({
expected: {
overlayDatabaseMode: OverlayDatabaseMode;
useOverlayDatabaseCaching: boolean;
preliminaryOverlayDatabaseMode?: OverlayDatabaseMode;
preliminaryUseOverlayDatabaseCaching?: boolean;
},
) => {
return await withTmpDir(async (tempDir) => {
@@ -1091,7 +1093,44 @@ const getOverlayDatabaseModeMacro = test.macro({
logger,
);
t.deepEqual(result, expected);
const expectedResult = {
overlayDatabaseMode: expected.overlayDatabaseMode,
useOverlayDatabaseCaching: expected.useOverlayDatabaseCaching,
};
t.deepEqual(result, expectedResult);
let configFile: string | undefined;
if (Object.keys(setup.codeScanningConfig).length > 0) {
configFile = createConfigFile(
yaml.dump(setup.codeScanningConfig),
tempDir,
);
}
// Test getPreliminaryOverlayDatabaseMode as well
const preliminaryResult =
await configUtils.getPreliminaryOverlayDatabaseMode(
createTestInitConfigInputs({
languagesInput: setup.languages.join(","),
configFile,
features,
tempDir,
workspacePath: tempDir,
sourceRoot: tempDir,
repository,
logger,
}),
);
const expectedPreliminaryResult = {
overlayDatabaseMode:
expected.preliminaryOverlayDatabaseMode ??
expected.overlayDatabaseMode,
useOverlayDatabaseCaching:
expected.preliminaryUseOverlayDatabaseCaching ??
expected.useOverlayDatabaseCaching,
};
t.deepEqual(preliminaryResult, expectedPreliminaryResult);
} finally {
// Restore the original environment
process.env = originalEnv;
@@ -1597,6 +1636,8 @@ test(
{
overlayDatabaseMode: OverlayDatabaseMode.None,
useOverlayDatabaseCaching: false,
preliminaryOverlayDatabaseMode: OverlayDatabaseMode.Overlay,
preliminaryUseOverlayDatabaseCaching: false,
},
);
@@ -1611,6 +1652,8 @@ test(
{
overlayDatabaseMode: OverlayDatabaseMode.None,
useOverlayDatabaseCaching: false,
preliminaryOverlayDatabaseMode: OverlayDatabaseMode.Overlay,
preliminaryUseOverlayDatabaseCaching: false,
},
);
@@ -1624,6 +1667,8 @@ test(
{
overlayDatabaseMode: OverlayDatabaseMode.None,
useOverlayDatabaseCaching: false,
preliminaryOverlayDatabaseMode: OverlayDatabaseMode.Overlay,
preliminaryUseOverlayDatabaseCaching: false,
},
);
+56
View File
@@ -839,6 +839,62 @@ export async function getOverlayDatabaseMode(
};
}
/**
* Get preliminary overlay database mode using only the information available
* in InitConfigInputs, without depending on CodeQL.
*
* This is a simplified version of getOverlayDatabaseMode that can be called
* before the CodeQL CLI is available.
*
* @param inputs The initialization configuration inputs.
* @returns An object containing the overlay database mode and whether the
* action should perform overlay-base database caching.
*/
export async function getPreliminaryOverlayDatabaseMode(
inputs: InitConfigInputs,
): Promise<{
overlayDatabaseMode: OverlayDatabaseMode;
useOverlayDatabaseCaching: boolean;
}> {
const userConfig = await loadUserConfig(
inputs.configFile,
inputs.workspacePath,
inputs.apiDetails,
inputs.tempDir,
inputs.logger,
);
const languages = await getUnverifiedLanguagesForOverlay(
inputs.languagesInput,
inputs.repository,
inputs.sourceRoot,
inputs.logger,
);
const augmentationProperties = await calculateAugmentation(
inputs.packsInput,
inputs.queriesInput,
inputs.repositoryProperties,
languages,
);
const computedConfig = generateCodeScanningConfig(
inputs.logger,
userConfig,
augmentationProperties,
);
return getOverlayDatabaseMode(
undefined, // codeql
inputs.repository,
inputs.features,
undefined, // languages
inputs.languagesInput,
inputs.sourceRoot,
undefined, // buildMode
computedConfig,
inputs.logger,
);
}
function dbLocationOrDefault(
dbLocation: string | undefined,
tempDir: string,