@@ -3,14 +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" ;
16+ import {
17+ CODEQL_OVERLAY_MINIMUM_VERSION ,
18+ OverlayDatabaseMode ,
19+ } from "./overlay-database-utils" ;
1420import { ToolsSource } from "./setup-codeql" ;
1521import { ZstdAvailability } from "./tar" ;
1622import { ToolsDownloadStatusReport } from "./tools-download" ;
@@ -79,13 +85,55 @@ export async function initConfig(
7985 return config ;
8086}
8187
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+
82129export async function runInit (
83130 codeql : CodeQL ,
84131 config : configUtils . Config ,
85132 sourceRoot : string ,
86133 processName : string | undefined ,
87134 registriesInput : string | undefined ,
88135 apiDetails : GitHubApiCombinedDetails ,
136+ overlayDatabaseMode : OverlayDatabaseMode ,
89137 logger : Logger ,
90138) : Promise < TracerConfig | undefined > {
91139 fs . mkdirSync ( config . dbLocation , { recursive : true } ) ;
@@ -109,6 +157,7 @@ export async function runInit(
109157 sourceRoot ,
110158 processName ,
111159 qlconfigFile ,
160+ overlayDatabaseMode ,
112161 logger ,
113162 ) ,
114163 ) ;
0 commit comments