|
1 |
| -import { getCodeQL } from "./codeql"; |
| 1 | +import * as core from "@actions/core"; |
| 2 | + |
| 3 | +import { getTemporaryDirectory, getWorkflowEventName } 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, featureConfig, Features } from "./feature-flags"; |
| 8 | +import { isTracedLanguage, Language } from "./languages"; |
4 | 9 | import { Logger } from "./logging";
|
| 10 | +import { parseRepositoryNwo } from "./repository"; |
| 11 | +import { getRequiredEnvParam } from "./util"; |
5 | 12 |
|
6 | 13 | export async function determineAutobuildLanguages(
|
7 | 14 | config: configUtils.Config,
|
@@ -91,13 +98,57 @@ export async function determineAutobuildLanguages(
|
91 | 98 | return languages;
|
92 | 99 | }
|
93 | 100 |
|
| 101 | +async function setupCppAutobuild(codeql: CodeQL, logger: Logger) { |
| 102 | + const envVar = featureConfig[Feature.CppDependencyInstallation].envVar; |
| 103 | + const featureName = "C++ automatic installation of dependencies"; |
| 104 | + const envDoc = |
| 105 | + "https://docs.github.com/en/actions/learn-github-actions/variables#defining-environment-variables-for-a-single-workflow"; |
| 106 | + const gitHubVersion = await getGitHubVersion(); |
| 107 | + const repositoryNwo = parseRepositoryNwo( |
| 108 | + getRequiredEnvParam("GITHUB_REPOSITORY"), |
| 109 | + ); |
| 110 | + const features = new Features( |
| 111 | + gitHubVersion, |
| 112 | + repositoryNwo, |
| 113 | + getTemporaryDirectory(), |
| 114 | + logger, |
| 115 | + ); |
| 116 | + if (await features.getValue(Feature.CppDependencyInstallation, codeql)) { |
| 117 | + // disable autoinstall on self-hosted runners unless explicitly requested |
| 118 | + if ( |
| 119 | + process.env["RUNNER_ENVIRONMENT"] === "self-hosted" && |
| 120 | + process.env[envVar] !== "true" |
| 121 | + ) { |
| 122 | + logger.info( |
| 123 | + `Disabling ${featureName} as we are on a self-hosted runner.${ |
| 124 | + getWorkflowEventName() !== "dynamic" |
| 125 | + ? ` To override this, set the ${envVar} environment variable to 'true' in your workflow (see ${envDoc}).` |
| 126 | + : "" |
| 127 | + }`, |
| 128 | + ); |
| 129 | + core.exportVariable(envVar, "false"); |
| 130 | + } else { |
| 131 | + logger.info( |
| 132 | + `Enabling ${featureName}. This can be disabled by setting the ${envVar} environment variable to 'false' (see ${envDoc}).`, |
| 133 | + ); |
| 134 | + core.exportVariable(envVar, "true"); |
| 135 | + } |
| 136 | + } else { |
| 137 | + logger.info(`Disabling ${featureName}.`); |
| 138 | + core.exportVariable(envVar, "false"); |
| 139 | + } |
| 140 | +} |
| 141 | + |
94 | 142 | export async function runAutobuild(
|
95 | 143 | language: Language,
|
96 | 144 | config: configUtils.Config,
|
97 | 145 | logger: Logger,
|
98 | 146 | ) {
|
99 | 147 | logger.startGroup(`Attempting to automatically build ${language} code`);
|
100 | 148 | const codeQL = await getCodeQL(config.codeQLCmd);
|
| 149 | + if (language === Language.cpp) { |
| 150 | + await setupCppAutobuild(codeQL, logger); |
| 151 | + } |
101 | 152 | await codeQL.runAutobuild(language);
|
102 | 153 | logger.endGroup();
|
103 | 154 | }
|
0 commit comments