diff --git a/src/config-utils.test.ts b/src/config-utils.test.ts index 75461b90e..34f15ddc7 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -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, }, ); diff --git a/src/config-utils.ts b/src/config-utils.ts index ff5cd81a7..0c5f36f22 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -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,