|
1 |
| -import { getCodeQL } from "./codeql"; |
| 1 | +import * as core from "@actions/core"; |
| 2 | + |
| 3 | +import { getOptionalInput, getTemporaryDirectory } from "./actions-util"; |
| 4 | +import { getGitHubVersion } from "./api-client"; |
| 5 | +import { CodeQL, getCodeQL } from "./codeql"; |
2 | 6 | import * as configUtils from "./config-utils";
|
3 |
| -import { Language, isTracedLanguage } from "./languages"; |
| 7 | +import { Feature, Features } from "./feature-flags"; |
| 8 | +import { isTracedLanguage, Language } from "./languages"; |
4 | 9 | import { Logger } from "./logging";
|
| 10 | +import { parseRepositoryNwo } from "./repository"; |
| 11 | +import { codeQlVersionAbove, getRequiredEnvParam } from "./util"; |
5 | 12 |
|
6 | 13 | export async function determineAutobuildLanguages(
|
7 | 14 | config: configUtils.Config,
|
@@ -91,13 +98,60 @@ export async function determineAutobuildLanguages(
|
91 | 98 | return languages;
|
92 | 99 | }
|
93 | 100 |
|
| 101 | +async function setupCppAutobuild(codeql: CodeQL, logger: Logger) { |
| 102 | + const envVar = "CODEQL_EXTRACTOR_CPP_AUTOINSTALL_DEPENDENCIES"; |
| 103 | + const actionInput = getOptionalInput("cpp-autoinstall-dependencies"); |
| 104 | + const featureName = "C++ automatic installation of dependencies"; |
| 105 | + if (actionInput === "true") { |
| 106 | + if (!(await codeQlVersionAbove(codeql, "2.15.0"))) { |
| 107 | + logger.warning( |
| 108 | + `${featureName} was explicitly requested but is only available starting from CodeQL version 2.15.0, disabling it`, |
| 109 | + ); |
| 110 | + core.exportVariable(envVar, "false"); |
| 111 | + } else { |
| 112 | + logger.info( |
| 113 | + `${ |
| 114 | + actionInput === "true" ? "Enabling" : "Disabling" |
| 115 | + } ${featureName} explicitly requested`, |
| 116 | + ); |
| 117 | + core.exportVariable(envVar, actionInput); |
| 118 | + } |
| 119 | + } else if (process.env["RUNNER_ENVIRONMENT"] === "self-hosted") { |
| 120 | + logger.info( |
| 121 | + `Disabling ${featureName} which is the default for self-hosted runners`, |
| 122 | + ); |
| 123 | + core.exportVariable(envVar, "false"); |
| 124 | + } else { |
| 125 | + const gitHubVersion = await getGitHubVersion(); |
| 126 | + const repositoryNwo = parseRepositoryNwo( |
| 127 | + getRequiredEnvParam("GITHUB_REPOSITORY"), |
| 128 | + ); |
| 129 | + const features = new Features( |
| 130 | + gitHubVersion, |
| 131 | + repositoryNwo, |
| 132 | + getTemporaryDirectory(), |
| 133 | + logger, |
| 134 | + ); |
| 135 | + if (await features.getValue(Feature.CppDependencyInstallation, codeql)) { |
| 136 | + logger.info(`Enabling ${featureName}`); |
| 137 | + core.exportVariable(envVar, "true"); |
| 138 | + } else { |
| 139 | + logger.info(`Disabling ${featureName}`); |
| 140 | + core.exportVariable(envVar, "false"); |
| 141 | + } |
| 142 | + } |
| 143 | +} |
| 144 | + |
94 | 145 | export async function runAutobuild(
|
95 | 146 | language: Language,
|
96 | 147 | config: configUtils.Config,
|
97 | 148 | logger: Logger,
|
98 | 149 | ) {
|
99 | 150 | logger.startGroup(`Attempting to automatically build ${language} code`);
|
100 | 151 | const codeQL = await getCodeQL(config.codeQLCmd);
|
| 152 | + if (language === Language.cpp) { |
| 153 | + await setupCppAutobuild(codeQL, logger); |
| 154 | + } |
101 | 155 | await codeQL.runAutobuild(language);
|
102 | 156 | logger.endGroup();
|
103 | 157 | }
|
0 commit comments