@@ -3,15 +3,20 @@ import * as path from "path";
33
44import * as toolrunner from "@actions/exec/lib/toolrunner" ;
55import * as io from "@actions/io" ;
6+ import * as semver from "semver" ;
67
78import { getOptionalInput , isSelfHostedRunner } from "./actions-util" ;
89import { GitHubApiCombinedDetails , GitHubApiDetails } from "./api-client" ;
910import { CodeQL , setupCodeQL } from "./codeql" ;
1011import * as configUtils from "./config-utils" ;
1112import { CodeQLDefaultVersionInfo , FeatureEnablement } from "./feature-flags" ;
13+ import { getGitRoot } from "./git-utils" ;
1214import { Language , isScannedLanguage } from "./languages" ;
1315import { Logger } from "./logging" ;
14- import { OverlayDatabaseMode } from "./overlay-database-utils" ;
16+ import {
17+ CODEQL_OVERLAY_MINIMUM_VERSION ,
18+ OverlayDatabaseMode ,
19+ } from "./overlay-database-utils" ;
1520import { ToolsSource } from "./setup-codeql" ;
1621import { ZstdAvailability } from "./tar" ;
1722import { ToolsDownloadStatusReport } from "./tools-download" ;
@@ -80,6 +85,47 @@ export async function initConfig(
8085 return config ;
8186}
8287
88+ export async function getOverlayDatabaseMode (
89+ codeqlVersion : string ,
90+ config : configUtils . Config ,
91+ sourceRoot : string ,
92+ logger : Logger ,
93+ ) : Promise < OverlayDatabaseMode > {
94+ const overlayDatabaseMode = process . env . CODEQL_OVERLAY_DATABASE_MODE ;
95+
96+ if (
97+ overlayDatabaseMode === OverlayDatabaseMode . Overlay ||
98+ overlayDatabaseMode === OverlayDatabaseMode . OverlayBase
99+ ) {
100+ if ( config . buildMode !== util . BuildMode . None ) {
101+ logger . warning (
102+ `Cannot build an ${ overlayDatabaseMode } database because ` +
103+ `build-mode is set to "${ config . buildMode } " instead of "none". ` +
104+ "Falling back to creating a normal full database instead." ,
105+ ) ;
106+ return OverlayDatabaseMode . None ;
107+ }
108+ if ( semver . lt ( codeqlVersion , CODEQL_OVERLAY_MINIMUM_VERSION ) ) {
109+ logger . warning (
110+ `Cannot build an ${ overlayDatabaseMode } database because ` +
111+ `the CodeQL CLI is older than ${ CODEQL_OVERLAY_MINIMUM_VERSION } . ` +
112+ "Falling back to creating a normal full database instead." ,
113+ ) ;
114+ return OverlayDatabaseMode . None ;
115+ }
116+ if ( ( await getGitRoot ( sourceRoot ) ) === undefined ) {
117+ logger . warning (
118+ `Cannot build an ${ overlayDatabaseMode } database because ` +
119+ `the source root "${ sourceRoot } " is not inside a git repository. ` +
120+ "Falling back to creating a normal full database instead." ,
121+ ) ;
122+ return OverlayDatabaseMode . None ;
123+ }
124+ return overlayDatabaseMode as OverlayDatabaseMode ;
125+ }
126+ return OverlayDatabaseMode . None ;
127+ }
128+
83129export async function runInit (
84130 codeql : CodeQL ,
85131 config : configUtils . Config ,
0 commit comments