Skip to content

Commit 457afd5

Browse files
committed
Overlay: Check database metadata for overlayBaseSpecifier
1 parent 1f520aa commit 457afd5

File tree

4 files changed

+52
-9
lines changed

4 files changed

+52
-9
lines changed

lib/analyze-action.js

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/init-action.js

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/overlay-database-utils.test.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ interface DownloadOverlayBaseDatabaseTestCase {
9595
hasBaseDatabaseOidsFile: boolean;
9696
tryGetFolderBytesSucceeds: boolean;
9797
codeQLVersion: string;
98+
resolveDatabaseOutput?: { [key: string]: string | [string] };
9899
}
99100

100101
const defaultDownloadTestCase: DownloadOverlayBaseDatabaseTestCase = {
@@ -105,6 +106,7 @@ const defaultDownloadTestCase: DownloadOverlayBaseDatabaseTestCase = {
105106
hasBaseDatabaseOidsFile: true,
106107
tryGetFolderBytesSucceeds: true,
107108
codeQLVersion: "2.20.5",
109+
resolveDatabaseOutput: { overlayBaseSpecifier: "20250626:XXX" },
108110
};
109111

110112
const testDownloadOverlayBaseDatabaseFromCache = test.macro({
@@ -163,9 +165,16 @@ const testDownloadOverlayBaseDatabaseFromCache = test.macro({
163165
.resolves(testCase.tryGetFolderBytesSucceeds ? 1024 * 1024 : undefined);
164166
stubs.push(tryGetFolderBytesStub);
165167

168+
const codeql = mockCodeQLVersion(testCase.codeQLVersion);
169+
170+
const resolveDatabaseStub = sinon
171+
.stub(codeql, "resolveDatabase")
172+
.resolves(testCase.resolveDatabaseOutput);
173+
stubs.push(resolveDatabaseStub);
174+
166175
try {
167176
const result = await downloadOverlayBaseDatabaseFromCache(
168-
mockCodeQLVersion(testCase.codeQLVersion),
177+
codeql,
169178
config,
170179
logger,
171180
);
@@ -255,6 +264,15 @@ test(
255264
false,
256265
);
257266

267+
test(
268+
testDownloadOverlayBaseDatabaseFromCache,
269+
"returns undefined when downloaded database doesn't have an overlayBaseSpecifier",
270+
{
271+
resolveDatabaseOutput: {},
272+
},
273+
false,
274+
);
275+
258276
test(
259277
testDownloadOverlayBaseDatabaseFromCache,
260278
"returns undefined when filesystem error occurs",

src/overlay-database-utils.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,11 +176,12 @@ const MAX_CACHE_OPERATION_MS = 600_000;
176176
* @param warningPrefix Prefix for the check failure warning message
177177
* @returns True if the verification succeeded, false otherwise
178178
*/
179-
function checkOverlayBaseDatabase(
179+
async function checkOverlayBaseDatabase(
180+
codeql: CodeQL,
180181
config: Config,
181182
logger: Logger,
182183
warningPrefix: string,
183-
): boolean {
184+
): Promise<boolean> {
184185
// An overlay-base database should contain the base database OIDs file.
185186
const baseDatabaseOidsFilePath = getBaseDatabaseOidsFilePath(config);
186187
if (!fs.existsSync(baseDatabaseOidsFilePath)) {
@@ -189,6 +190,16 @@ function checkOverlayBaseDatabase(
189190
);
190191
return false;
191192
}
193+
194+
const resolveDatabaseOutput = await codeql.resolveDatabase(config);
195+
if (
196+
resolveDatabaseOutput === undefined ||
197+
!("overlayBaseSpecifier" in resolveDatabaseOutput)
198+
) {
199+
logger.info(`${warningPrefix}: no overlayBaseSpecifier defined`);
200+
return false;
201+
}
202+
192203
return true;
193204
}
194205

@@ -232,7 +243,8 @@ export async function cleanupAndUploadOverlayBaseDatabaseToCache(
232243
return false;
233244
}
234245

235-
const databaseIsValid = checkOverlayBaseDatabase(
246+
const databaseIsValid = await checkOverlayBaseDatabase(
247+
codeql,
236248
config,
237249
logger,
238250
"Abort uploading overlay-base database to cache",
@@ -415,7 +427,8 @@ export async function downloadOverlayBaseDatabaseFromCache(
415427
return undefined;
416428
}
417429

418-
const databaseIsValid = checkOverlayBaseDatabase(
430+
const databaseIsValid = await checkOverlayBaseDatabase(
431+
codeql,
419432
config,
420433
logger,
421434
"Downloaded overlay-base database is invalid",

0 commit comments

Comments
 (0)