@@ -10,16 +10,21 @@ import { CachingKind, getCachingKind } from "./caching-utils";
10
10
import { CodeQL } from "./codeql" ;
11
11
import { shouldPerformDiffInformedAnalysis } from "./diff-informed-analysis-utils" ;
12
12
import { Feature , FeatureEnablement } from "./feature-flags" ;
13
+ import { getGitRoot } from "./git-utils" ;
13
14
import { Language , parseLanguage } from "./languages" ;
14
15
import { Logger } from "./logging" ;
15
- import { OverlayDatabaseMode } from "./overlay-database-utils" ;
16
+ import {
17
+ CODEQL_OVERLAY_MINIMUM_VERSION ,
18
+ OverlayDatabaseMode ,
19
+ } from "./overlay-database-utils" ;
16
20
import { RepositoryNwo } from "./repository" ;
17
21
import { downloadTrapCaches } from "./trap-caching" ;
18
22
import {
19
23
GitHubVersion ,
20
24
prettyPrintPack ,
21
25
ConfigurationError ,
22
26
BuildMode ,
27
+ codeQlVersionAtLeast ,
23
28
} from "./util" ;
24
29
25
30
// Property names from the user-supplied config file.
@@ -744,6 +749,38 @@ async function getOverlayDatabaseMode(
744
749
buildMode : BuildMode | undefined ,
745
750
logger : Logger ,
746
751
) : Promise < OverlayDatabaseMode > {
752
+ const overlayDatabaseMode = process . env . CODEQL_OVERLAY_DATABASE_MODE ;
753
+
754
+ if (
755
+ overlayDatabaseMode === OverlayDatabaseMode . Overlay ||
756
+ overlayDatabaseMode === OverlayDatabaseMode . OverlayBase
757
+ ) {
758
+ if ( buildMode !== BuildMode . None ) {
759
+ logger . warning (
760
+ `Cannot build an ${ overlayDatabaseMode } database because ` +
761
+ `build-mode is set to "${ buildMode } " instead of "none". ` +
762
+ "Falling back to creating a normal full database instead." ,
763
+ ) ;
764
+ return OverlayDatabaseMode . None ;
765
+ }
766
+ if ( ! ( await codeQlVersionAtLeast ( codeql , CODEQL_OVERLAY_MINIMUM_VERSION ) ) ) {
767
+ logger . warning (
768
+ `Cannot build an ${ overlayDatabaseMode } database because ` +
769
+ `the CodeQL CLI is older than ${ CODEQL_OVERLAY_MINIMUM_VERSION } . ` +
770
+ "Falling back to creating a normal full database instead." ,
771
+ ) ;
772
+ return OverlayDatabaseMode . None ;
773
+ }
774
+ if ( ( await getGitRoot ( sourceRoot ) ) === undefined ) {
775
+ logger . warning (
776
+ `Cannot build an ${ overlayDatabaseMode } database because ` +
777
+ `the source root "${ sourceRoot } " is not inside a git repository. ` +
778
+ "Falling back to creating a normal full database instead." ,
779
+ ) ;
780
+ return OverlayDatabaseMode . None ;
781
+ }
782
+ return overlayDatabaseMode as OverlayDatabaseMode ;
783
+ }
747
784
return OverlayDatabaseMode . None ;
748
785
}
749
786
0 commit comments