Skip to content

Commit 6391bd0

Browse files
committed
Overlay: Check database metadata for overlayBaseSpecifier
1 parent 1f520aa commit 6391bd0

File tree

4 files changed

+53
-9
lines changed

4 files changed

+53
-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: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import * as sinon from "sinon";
77

88
import * as actionsUtil from "./actions-util";
99
import * as apiClient from "./api-client";
10+
import { ResolveDatabaseOutput } from "./codeql";
1011
import * as gitUtils from "./git-utils";
1112
import { getRunnerLogger } from "./logging";
1213
import {
@@ -95,6 +96,7 @@ interface DownloadOverlayBaseDatabaseTestCase {
9596
hasBaseDatabaseOidsFile: boolean;
9697
tryGetFolderBytesSucceeds: boolean;
9798
codeQLVersion: string;
99+
resolveDatabaseOutput: ResolveDatabaseOutput;
98100
}
99101

100102
const defaultDownloadTestCase: DownloadOverlayBaseDatabaseTestCase = {
@@ -105,6 +107,7 @@ const defaultDownloadTestCase: DownloadOverlayBaseDatabaseTestCase = {
105107
hasBaseDatabaseOidsFile: true,
106108
tryGetFolderBytesSucceeds: true,
107109
codeQLVersion: "2.20.5",
110+
resolveDatabaseOutput: { overlayBaseSpecifier: "20250626:XXX" },
108111
};
109112

110113
const testDownloadOverlayBaseDatabaseFromCache = test.macro({
@@ -163,9 +166,16 @@ const testDownloadOverlayBaseDatabaseFromCache = test.macro({
163166
.resolves(testCase.tryGetFolderBytesSucceeds ? 1024 * 1024 : undefined);
164167
stubs.push(tryGetFolderBytesStub);
165168

169+
const codeql = mockCodeQLVersion(testCase.codeQLVersion);
170+
171+
const resolveDatabaseStub = sinon
172+
.stub(codeql, "resolveDatabase")
173+
.resolves(testCase.resolveDatabaseOutput);
174+
stubs.push(resolveDatabaseStub);
175+
166176
try {
167177
const result = await downloadOverlayBaseDatabaseFromCache(
168-
mockCodeQLVersion(testCase.codeQLVersion),
178+
codeql,
169179
config,
170180
logger,
171181
);
@@ -255,6 +265,15 @@ test(
255265
false,
256266
);
257267

268+
test(
269+
testDownloadOverlayBaseDatabaseFromCache,
270+
"returns undefined when downloaded database doesn't have an overlayBaseSpecifier",
271+
{
272+
resolveDatabaseOutput: {},
273+
},
274+
false,
275+
);
276+
258277
test(
259278
testDownloadOverlayBaseDatabaseFromCache,
260279
"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)