mirror of
https://github.com/github/codeql-action.git
synced 2025-12-24 08:10:06 +08:00
Send tools telemetry to init status report (#1497)
Co-authored-by: Henry Mercer <henry.mercer@me.com>
This commit is contained in:
9
lib/codeql.js
generated
9
lib/codeql.js
generated
@@ -110,7 +110,7 @@ exports.CODEQL_VERSION_BETTER_RESOLVE_LANGUAGES = "2.10.3";
|
|||||||
*/
|
*/
|
||||||
async function setupCodeQL(toolsInput, apiDetails, tempDir, variant, bypassToolcache, defaultCliVersion, logger, checkVersion) {
|
async function setupCodeQL(toolsInput, apiDetails, tempDir, variant, bypassToolcache, defaultCliVersion, logger, checkVersion) {
|
||||||
try {
|
try {
|
||||||
const { codeqlFolder, toolsVersion } = await setupCodeql.setupCodeQLBundle(toolsInput, apiDetails, tempDir, variant, bypassToolcache, defaultCliVersion, logger);
|
const { codeqlFolder, toolsDownloadDurationMs, toolsSource, toolsVersion } = await setupCodeql.setupCodeQLBundle(toolsInput, apiDetails, tempDir, variant, bypassToolcache, defaultCliVersion, logger);
|
||||||
let codeqlCmd = path.join(codeqlFolder, "codeql", "codeql");
|
let codeqlCmd = path.join(codeqlFolder, "codeql", "codeql");
|
||||||
if (process.platform === "win32") {
|
if (process.platform === "win32") {
|
||||||
codeqlCmd += ".exe";
|
codeqlCmd += ".exe";
|
||||||
@@ -119,7 +119,12 @@ async function setupCodeQL(toolsInput, apiDetails, tempDir, variant, bypassToolc
|
|||||||
throw new Error(`Unsupported platform: ${process.platform}`);
|
throw new Error(`Unsupported platform: ${process.platform}`);
|
||||||
}
|
}
|
||||||
cachedCodeQL = await getCodeQLForCmd(codeqlCmd, checkVersion);
|
cachedCodeQL = await getCodeQLForCmd(codeqlCmd, checkVersion);
|
||||||
return { codeql: cachedCodeQL, toolsVersion };
|
return {
|
||||||
|
codeql: cachedCodeQL,
|
||||||
|
toolsDownloadDurationMs,
|
||||||
|
toolsSource,
|
||||||
|
toolsVersion,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
logger.error(e instanceof Error ? e : new Error(String(e)));
|
logger.error(e instanceof Error ? e : new Error(String(e)));
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
25
lib/codeql.test.js
generated
25
lib/codeql.test.js
generated
@@ -42,6 +42,7 @@ const api = __importStar(require("./api-client"));
|
|||||||
const codeql = __importStar(require("./codeql"));
|
const codeql = __importStar(require("./codeql"));
|
||||||
const defaults = __importStar(require("./defaults.json"));
|
const defaults = __importStar(require("./defaults.json"));
|
||||||
const feature_flags_1 = require("./feature-flags");
|
const feature_flags_1 = require("./feature-flags");
|
||||||
|
const init_1 = require("./init");
|
||||||
const languages_1 = require("./languages");
|
const languages_1 = require("./languages");
|
||||||
const logging_1 = require("./logging");
|
const logging_1 = require("./logging");
|
||||||
const testing_utils_1 = require("./testing-utils");
|
const testing_utils_1 = require("./testing-utils");
|
||||||
@@ -155,6 +156,8 @@ function mockApiDetails(apiDetails) {
|
|||||||
const result = await codeql.setupCodeQL(url, sampleApiDetails, tmpDir, util.GitHubVariant.DOTCOM, false, SAMPLE_DEFAULT_CLI_VERSION, (0, logging_1.getRunnerLogger)(true), false);
|
const result = await codeql.setupCodeQL(url, sampleApiDetails, tmpDir, util.GitHubVariant.DOTCOM, false, SAMPLE_DEFAULT_CLI_VERSION, (0, logging_1.getRunnerLogger)(true), false);
|
||||||
t.assert(toolcache.find("CodeQL", `0.0.0-${version}`));
|
t.assert(toolcache.find("CodeQL", `0.0.0-${version}`));
|
||||||
t.is(result.toolsVersion, `0.0.0-${version}`);
|
t.is(result.toolsVersion, `0.0.0-${version}`);
|
||||||
|
t.is(result.toolsSource, init_1.ToolsSource.Download);
|
||||||
|
t.is(typeof result.toolsDownloadDurationMs, "number");
|
||||||
}
|
}
|
||||||
t.is(toolcache.findAllVersions("CodeQL").length, 2);
|
t.is(toolcache.findAllVersions("CodeQL").length, 2);
|
||||||
});
|
});
|
||||||
@@ -173,6 +176,8 @@ function mockApiDetails(apiDetails) {
|
|||||||
const result = await codeql.setupCodeQL(url, sampleApiDetails, tmpDir, util.GitHubVariant.DOTCOM, false, SAMPLE_DEFAULT_CLI_VERSION, (0, logging_1.getRunnerLogger)(true), false);
|
const result = await codeql.setupCodeQL(url, sampleApiDetails, tmpDir, util.GitHubVariant.DOTCOM, false, SAMPLE_DEFAULT_CLI_VERSION, (0, logging_1.getRunnerLogger)(true), false);
|
||||||
t.assert(toolcache.find("CodeQL", "0.0.0-20200610"));
|
t.assert(toolcache.find("CodeQL", "0.0.0-20200610"));
|
||||||
t.deepEqual(result.toolsVersion, "0.0.0-20200610");
|
t.deepEqual(result.toolsVersion, "0.0.0-20200610");
|
||||||
|
t.is(result.toolsSource, init_1.ToolsSource.Download);
|
||||||
|
t.not(result.toolsDownloadDurationMs, undefined);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
const EXPLICITLY_REQUESTED_BUNDLE_TEST_CASES = [
|
const EXPLICITLY_REQUESTED_BUNDLE_TEST_CASES = [
|
||||||
@@ -206,6 +211,8 @@ for (const { cliVersion, expectedToolcacheVersion, } of EXPLICITLY_REQUESTED_BUN
|
|||||||
t.assert(releaseApiMock.isDone(), "Releases API should have been called");
|
t.assert(releaseApiMock.isDone(), "Releases API should have been called");
|
||||||
t.assert(toolcache.find("CodeQL", expectedToolcacheVersion));
|
t.assert(toolcache.find("CodeQL", expectedToolcacheVersion));
|
||||||
t.deepEqual(result.toolsVersion, cliVersion);
|
t.deepEqual(result.toolsVersion, cliVersion);
|
||||||
|
t.is(result.toolsSource, init_1.ToolsSource.Download);
|
||||||
|
t.not(result.toolsDownloadDurationMs, undefined);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -261,6 +268,14 @@ for (const { isCached, tagName, toolcacheCliVersion } of [
|
|||||||
}
|
}
|
||||||
const result = await codeql.setupCodeQL(undefined, sampleApiDetails, tmpDir, util.GitHubVariant.DOTCOM, false, SAMPLE_DEFAULT_CLI_VERSION, (0, logging_1.getRunnerLogger)(true), false);
|
const result = await codeql.setupCodeQL(undefined, sampleApiDetails, tmpDir, util.GitHubVariant.DOTCOM, false, SAMPLE_DEFAULT_CLI_VERSION, (0, logging_1.getRunnerLogger)(true), false);
|
||||||
t.is(result.toolsVersion, SAMPLE_DEFAULT_CLI_VERSION.cliVersion);
|
t.is(result.toolsVersion, SAMPLE_DEFAULT_CLI_VERSION.cliVersion);
|
||||||
|
if (isCached) {
|
||||||
|
t.is(result.toolsSource, init_1.ToolsSource.Toolcache);
|
||||||
|
t.is(result.toolsDownloadDurationMs, undefined);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
t.is(result.toolsSource, init_1.ToolsSource.Download);
|
||||||
|
t.is(typeof result.toolsDownloadDurationMs, "number");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -279,6 +294,8 @@ for (const variant of [util.GitHubVariant.GHAE, util.GitHubVariant.GHES]) {
|
|||||||
variant,
|
variant,
|
||||||
}, (0, logging_1.getRunnerLogger)(true), false);
|
}, (0, logging_1.getRunnerLogger)(true), false);
|
||||||
t.deepEqual(result.toolsVersion, "0.0.0-20200601");
|
t.deepEqual(result.toolsVersion, "0.0.0-20200601");
|
||||||
|
t.is(result.toolsSource, init_1.ToolsSource.Toolcache);
|
||||||
|
t.is(result.toolsDownloadDurationMs, undefined);
|
||||||
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
||||||
t.is(cachedVersions.length, 1);
|
t.is(cachedVersions.length, 1);
|
||||||
});
|
});
|
||||||
@@ -300,6 +317,8 @@ for (const variant of [util.GitHubVariant.GHAE, util.GitHubVariant.GHES]) {
|
|||||||
variant,
|
variant,
|
||||||
}, (0, logging_1.getRunnerLogger)(true), false);
|
}, (0, logging_1.getRunnerLogger)(true), false);
|
||||||
t.deepEqual(result.toolsVersion, defaults.cliVersion);
|
t.deepEqual(result.toolsVersion, defaults.cliVersion);
|
||||||
|
t.is(result.toolsSource, init_1.ToolsSource.Download);
|
||||||
|
t.is(typeof result.toolsDownloadDurationMs, "number");
|
||||||
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
||||||
t.is(cachedVersions.length, 2);
|
t.is(cachedVersions.length, 2);
|
||||||
});
|
});
|
||||||
@@ -318,6 +337,8 @@ for (const variant of [util.GitHubVariant.GHAE, util.GitHubVariant.GHES]) {
|
|||||||
});
|
});
|
||||||
const result = await codeql.setupCodeQL("latest", sampleApiDetails, tmpDir, util.GitHubVariant.DOTCOM, false, SAMPLE_DEFAULT_CLI_VERSION, (0, logging_1.getRunnerLogger)(true), false);
|
const result = await codeql.setupCodeQL("latest", sampleApiDetails, tmpDir, util.GitHubVariant.DOTCOM, false, SAMPLE_DEFAULT_CLI_VERSION, (0, logging_1.getRunnerLogger)(true), false);
|
||||||
t.deepEqual(result.toolsVersion, defaults.cliVersion);
|
t.deepEqual(result.toolsVersion, defaults.cliVersion);
|
||||||
|
t.is(result.toolsSource, init_1.ToolsSource.Download);
|
||||||
|
t.is(typeof result.toolsDownloadDurationMs, "number");
|
||||||
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
||||||
t.is(cachedVersions.length, 2);
|
t.is(cachedVersions.length, 2);
|
||||||
});
|
});
|
||||||
@@ -348,11 +369,13 @@ for (const variant of [util.GitHubVariant.GHAE, util.GitHubVariant.GHES]) {
|
|||||||
mockApiDetails(sampleGHAEApiDetails);
|
mockApiDetails(sampleGHAEApiDetails);
|
||||||
sinon.stub(actionsUtil, "isRunningLocalAction").returns(false);
|
sinon.stub(actionsUtil, "isRunningLocalAction").returns(false);
|
||||||
process.env["GITHUB_ACTION_REPOSITORY"] = "github/codeql-action";
|
process.env["GITHUB_ACTION_REPOSITORY"] = "github/codeql-action";
|
||||||
await codeql.setupCodeQL(undefined, sampleGHAEApiDetails, tmpDir, util.GitHubVariant.GHAE, false, {
|
const result = await codeql.setupCodeQL(undefined, sampleGHAEApiDetails, tmpDir, util.GitHubVariant.GHAE, false, {
|
||||||
cliVersion: defaults.cliVersion,
|
cliVersion: defaults.cliVersion,
|
||||||
tagName: defaults.bundleVersion,
|
tagName: defaults.bundleVersion,
|
||||||
variant: util.GitHubVariant.GHAE,
|
variant: util.GitHubVariant.GHAE,
|
||||||
}, (0, logging_1.getRunnerLogger)(true), false);
|
}, (0, logging_1.getRunnerLogger)(true), false);
|
||||||
|
t.is(result.toolsSource, init_1.ToolsSource.Download);
|
||||||
|
t.is(typeof result.toolsDownloadDurationMs, "number");
|
||||||
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
||||||
t.is(cachedVersions.length, 1);
|
t.is(cachedVersions.length, 1);
|
||||||
});
|
});
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
11
lib/feature-flags.js
generated
11
lib/feature-flags.js
generated
@@ -154,8 +154,10 @@ class GitHubFeatureFlags {
|
|||||||
}
|
}
|
||||||
async getDefaultCliVersion(variant) {
|
async getDefaultCliVersion(variant) {
|
||||||
if (variant === util.GitHubVariant.DOTCOM) {
|
if (variant === util.GitHubVariant.DOTCOM) {
|
||||||
|
const defaultDotComCliVersion = await this.getDefaultDotcomCliVersion();
|
||||||
return {
|
return {
|
||||||
cliVersion: await this.getDefaultDotcomCliVersion(),
|
cliVersion: defaultDotComCliVersion.version,
|
||||||
|
toolsFeatureFlagsValid: defaultDotComCliVersion.toolsFeatureFlagsValid,
|
||||||
variant,
|
variant,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -184,11 +186,14 @@ class GitHubFeatureFlags {
|
|||||||
// version that would have been specified by the feature flags before they were misconfigured.
|
// version that would have been specified by the feature flags before they were misconfigured.
|
||||||
this.logger.warning("Feature flags do not specify a default CLI version. Falling back to the CLI version " +
|
this.logger.warning("Feature flags do not specify a default CLI version. Falling back to the CLI version " +
|
||||||
`shipped with the Action. This is ${defaults.cliVersion}.`);
|
`shipped with the Action. This is ${defaults.cliVersion}.`);
|
||||||
return defaults.cliVersion;
|
return {
|
||||||
|
version: defaults.cliVersion,
|
||||||
|
toolsFeatureFlagsValid: false,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
const maxCliVersion = enabledFeatureFlagCliVersions.reduce((maxVersion, currentVersion) => currentVersion > maxVersion ? currentVersion : maxVersion, enabledFeatureFlagCliVersions[0]);
|
const maxCliVersion = enabledFeatureFlagCliVersions.reduce((maxVersion, currentVersion) => currentVersion > maxVersion ? currentVersion : maxVersion, enabledFeatureFlagCliVersions[0]);
|
||||||
this.logger.debug(`Derived default CLI version of ${maxCliVersion} from feature flags.`);
|
this.logger.debug(`Derived default CLI version of ${maxCliVersion} from feature flags.`);
|
||||||
return maxCliVersion;
|
return { version: maxCliVersion, toolsFeatureFlagsValid: true };
|
||||||
}
|
}
|
||||||
async getValue(feature) {
|
async getValue(feature) {
|
||||||
const response = await this.getAllFeatures();
|
const response = await this.getAllFeatures();
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
15
lib/feature-flags.test.js
generated
15
lib/feature-flags.test.js
generated
@@ -217,7 +217,8 @@ for (const variant of [util_1.GitHubVariant.GHAE, util_1.GitHubVariant.GHES]) {
|
|||||||
(0, ava_1.default)(`selects CLI from defaults.json on ${util_1.GitHubVariant[variant]}`, async (t) => {
|
(0, ava_1.default)(`selects CLI from defaults.json on ${util_1.GitHubVariant[variant]}`, async (t) => {
|
||||||
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
||||||
const features = setUpFeatureFlagTests(tmpDir);
|
const features = setUpFeatureFlagTests(tmpDir);
|
||||||
t.deepEqual(await features.getDefaultCliVersion(variant), {
|
const defaultCliVersion = await features.getDefaultCliVersion(variant);
|
||||||
|
t.deepEqual(defaultCliVersion, {
|
||||||
cliVersion: defaults.cliVersion,
|
cliVersion: defaults.cliVersion,
|
||||||
tagName: defaults.bundleVersion,
|
tagName: defaults.bundleVersion,
|
||||||
variant,
|
variant,
|
||||||
@@ -236,8 +237,10 @@ for (const variant of [util_1.GitHubVariant.GHAE, util_1.GitHubVariant.GHES]) {
|
|||||||
expectedFeatureEnablement["default_codeql_version_2_12_4_enabled"] = false;
|
expectedFeatureEnablement["default_codeql_version_2_12_4_enabled"] = false;
|
||||||
expectedFeatureEnablement["default_codeql_version_2_12_5_enabled"] = false;
|
expectedFeatureEnablement["default_codeql_version_2_12_5_enabled"] = false;
|
||||||
(0, testing_utils_1.mockFeatureFlagApiEndpoint)(200, expectedFeatureEnablement);
|
(0, testing_utils_1.mockFeatureFlagApiEndpoint)(200, expectedFeatureEnablement);
|
||||||
t.deepEqual(await featureEnablement.getDefaultCliVersion(util_1.GitHubVariant.DOTCOM), {
|
const defaultCliVersion = await featureEnablement.getDefaultCliVersion(util_1.GitHubVariant.DOTCOM);
|
||||||
|
t.deepEqual(defaultCliVersion, {
|
||||||
cliVersion: "2.12.1",
|
cliVersion: "2.12.1",
|
||||||
|
toolsFeatureFlagsValid: true,
|
||||||
variant: util_1.GitHubVariant.DOTCOM,
|
variant: util_1.GitHubVariant.DOTCOM,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -247,8 +250,10 @@ for (const variant of [util_1.GitHubVariant.GHAE, util_1.GitHubVariant.GHES]) {
|
|||||||
const featureEnablement = setUpFeatureFlagTests(tmpDir);
|
const featureEnablement = setUpFeatureFlagTests(tmpDir);
|
||||||
const expectedFeatureEnablement = initializeFeatures(true);
|
const expectedFeatureEnablement = initializeFeatures(true);
|
||||||
(0, testing_utils_1.mockFeatureFlagApiEndpoint)(200, expectedFeatureEnablement);
|
(0, testing_utils_1.mockFeatureFlagApiEndpoint)(200, expectedFeatureEnablement);
|
||||||
t.deepEqual(await featureEnablement.getDefaultCliVersion(util_1.GitHubVariant.DOTCOM), {
|
const defaultCliVersion = await featureEnablement.getDefaultCliVersion(util_1.GitHubVariant.DOTCOM);
|
||||||
|
t.deepEqual(defaultCliVersion, {
|
||||||
cliVersion: defaults.cliVersion,
|
cliVersion: defaults.cliVersion,
|
||||||
|
toolsFeatureFlagsValid: false,
|
||||||
variant: util_1.GitHubVariant.DOTCOM,
|
variant: util_1.GitHubVariant.DOTCOM,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -263,8 +268,10 @@ for (const variant of [util_1.GitHubVariant.GHAE, util_1.GitHubVariant.GHES]) {
|
|||||||
expectedFeatureEnablement["default_codeql_version_2_12_invalid_enabled"] =
|
expectedFeatureEnablement["default_codeql_version_2_12_invalid_enabled"] =
|
||||||
true;
|
true;
|
||||||
(0, testing_utils_1.mockFeatureFlagApiEndpoint)(200, expectedFeatureEnablement);
|
(0, testing_utils_1.mockFeatureFlagApiEndpoint)(200, expectedFeatureEnablement);
|
||||||
t.deepEqual(await featureEnablement.getDefaultCliVersion(util_1.GitHubVariant.DOTCOM), {
|
const defaultCliVersion = await featureEnablement.getDefaultCliVersion(util_1.GitHubVariant.DOTCOM);
|
||||||
|
t.deepEqual(defaultCliVersion, {
|
||||||
cliVersion: "2.12.1",
|
cliVersion: "2.12.1",
|
||||||
|
toolsFeatureFlagsValid: true,
|
||||||
variant: util_1.GitHubVariant.DOTCOM,
|
variant: util_1.GitHubVariant.DOTCOM,
|
||||||
});
|
});
|
||||||
t.assert(loggedMessages.find((v) => v.type === "warning" &&
|
t.assert(loggedMessages.find((v) => v.type === "warning" &&
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
96
lib/init-action.js
generated
96
lib/init-action.js
generated
@@ -36,42 +36,62 @@ const repository_1 = require("./repository");
|
|||||||
const trap_caching_1 = require("./trap-caching");
|
const trap_caching_1 = require("./trap-caching");
|
||||||
const util_1 = require("./util");
|
const util_1 = require("./util");
|
||||||
const workflow_1 = require("./workflow");
|
const workflow_1 = require("./workflow");
|
||||||
async function sendSuccessStatusReport(startedAt, config, toolsVersion, logger) {
|
async function sendInitStatusReport(actionStatus, startedAt, config, toolsDownloadDurationMs, toolsFeatureFlagsValid, toolsSource, toolsVersion, logger) {
|
||||||
const statusReportBase = await (0, actions_util_1.createStatusReportBase)("init", "success", startedAt);
|
const statusReportBase = await (0, actions_util_1.createStatusReportBase)("init", actionStatus, startedAt);
|
||||||
const languages = config.languages.join(",");
|
|
||||||
const workflowLanguages = (0, actions_util_1.getOptionalInput)("languages");
|
const workflowLanguages = (0, actions_util_1.getOptionalInput)("languages");
|
||||||
const paths = (config.originalUserInput.paths || []).join(",");
|
const initStatusReport = {
|
||||||
const pathsIgnore = (config.originalUserInput["paths-ignore"] || []).join(",");
|
|
||||||
const disableDefaultQueries = config.originalUserInput["disable-default-queries"]
|
|
||||||
? languages
|
|
||||||
: "";
|
|
||||||
const queries = [];
|
|
||||||
let queriesInput = (0, actions_util_1.getOptionalInput)("queries")?.trim();
|
|
||||||
if (queriesInput === undefined || queriesInput.startsWith("+")) {
|
|
||||||
queries.push(...(config.originalUserInput.queries || []).map((q) => q.uses));
|
|
||||||
}
|
|
||||||
if (queriesInput !== undefined) {
|
|
||||||
queriesInput = queriesInput.startsWith("+")
|
|
||||||
? queriesInput.slice(1)
|
|
||||||
: queriesInput;
|
|
||||||
queries.push(...queriesInput.split(","));
|
|
||||||
}
|
|
||||||
const statusReport = {
|
|
||||||
...statusReportBase,
|
...statusReportBase,
|
||||||
disable_default_queries: disableDefaultQueries,
|
|
||||||
languages,
|
|
||||||
ml_powered_javascript_queries: (0, util_1.getMlPoweredJsQueriesStatus)(config),
|
|
||||||
paths,
|
|
||||||
paths_ignore: pathsIgnore,
|
|
||||||
queries: queries.join(","),
|
|
||||||
tools_input: (0, actions_util_1.getOptionalInput)("tools") || "",
|
tools_input: (0, actions_util_1.getOptionalInput)("tools") || "",
|
||||||
tools_resolved_version: toolsVersion,
|
tools_resolved_version: toolsVersion,
|
||||||
|
tools_source: toolsSource || init_1.ToolsSource.Unknown,
|
||||||
workflow_languages: workflowLanguages || "",
|
workflow_languages: workflowLanguages || "",
|
||||||
trap_cache_languages: Object.keys(config.trapCaches).join(","),
|
|
||||||
trap_cache_download_size_bytes: Math.round(await (0, trap_caching_1.getTotalCacheSize)(config.trapCaches, logger)),
|
|
||||||
trap_cache_download_duration_ms: Math.round(config.trapCacheDownloadTime),
|
|
||||||
};
|
};
|
||||||
await (0, actions_util_1.sendStatusReport)(statusReport);
|
let initToolsDownloadFields = {};
|
||||||
|
if (toolsSource === init_1.ToolsSource.Download) {
|
||||||
|
initToolsDownloadFields = {
|
||||||
|
tools_download_duration_ms: toolsDownloadDurationMs,
|
||||||
|
tools_feature_flags_valid: toolsFeatureFlagsValid,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (config !== undefined) {
|
||||||
|
const languages = config.languages.join(",");
|
||||||
|
const paths = (config.originalUserInput.paths || []).join(",");
|
||||||
|
const pathsIgnore = (config.originalUserInput["paths-ignore"] || []).join(",");
|
||||||
|
const disableDefaultQueries = config.originalUserInput["disable-default-queries"]
|
||||||
|
? languages
|
||||||
|
: "";
|
||||||
|
const queries = [];
|
||||||
|
let queriesInput = (0, actions_util_1.getOptionalInput)("queries")?.trim();
|
||||||
|
if (queriesInput === undefined || queriesInput.startsWith("+")) {
|
||||||
|
queries.push(...(config.originalUserInput.queries || []).map((q) => q.uses));
|
||||||
|
}
|
||||||
|
if (queriesInput !== undefined) {
|
||||||
|
queriesInput = queriesInput.startsWith("+")
|
||||||
|
? queriesInput.slice(1)
|
||||||
|
: queriesInput;
|
||||||
|
queries.push(...queriesInput.split(","));
|
||||||
|
}
|
||||||
|
// Append fields that are dependent on `config`
|
||||||
|
const initWithConfigStatusReport = {
|
||||||
|
...initStatusReport,
|
||||||
|
disable_default_queries: disableDefaultQueries,
|
||||||
|
languages,
|
||||||
|
ml_powered_javascript_queries: (0, util_1.getMlPoweredJsQueriesStatus)(config),
|
||||||
|
paths,
|
||||||
|
paths_ignore: pathsIgnore,
|
||||||
|
queries: queries.join(","),
|
||||||
|
trap_cache_languages: Object.keys(config.trapCaches).join(","),
|
||||||
|
trap_cache_download_size_bytes: Math.round(await (0, trap_caching_1.getTotalCacheSize)(config.trapCaches, logger)),
|
||||||
|
trap_cache_download_duration_ms: Math.round(config.trapCacheDownloadTime),
|
||||||
|
};
|
||||||
|
await (0, actions_util_1.sendStatusReport)({
|
||||||
|
...initWithConfigStatusReport,
|
||||||
|
...initToolsDownloadFields,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
await (0, actions_util_1.sendStatusReport)({ ...initStatusReport, ...initToolsDownloadFields });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
async function run() {
|
async function run() {
|
||||||
const startedAt = new Date();
|
const startedAt = new Date();
|
||||||
@@ -79,6 +99,9 @@ async function run() {
|
|||||||
(0, util_1.initializeEnvironment)((0, actions_util_1.getActionVersion)());
|
(0, util_1.initializeEnvironment)((0, actions_util_1.getActionVersion)());
|
||||||
let config;
|
let config;
|
||||||
let codeql;
|
let codeql;
|
||||||
|
let toolsDownloadDurationMs;
|
||||||
|
let toolsFeatureFlagsValid;
|
||||||
|
let toolsSource;
|
||||||
let toolsVersion;
|
let toolsVersion;
|
||||||
const apiDetails = {
|
const apiDetails = {
|
||||||
auth: (0, actions_util_1.getRequiredInput)("token"),
|
auth: (0, actions_util_1.getRequiredInput)("token"),
|
||||||
@@ -95,10 +118,15 @@ async function run() {
|
|||||||
if (!(await (0, actions_util_1.sendStatusReport)(await (0, actions_util_1.createStatusReportBase)("init", "starting", startedAt, workflowErrors)))) {
|
if (!(await (0, actions_util_1.sendStatusReport)(await (0, actions_util_1.createStatusReportBase)("init", "starting", startedAt, workflowErrors)))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const defaultCliVersion = await features.getDefaultCliVersion(gitHubVersion.type);
|
const codeQLDefaultVersionInfo = await features.getDefaultCliVersion(gitHubVersion.type);
|
||||||
const initCodeQLResult = await (0, init_1.initCodeQL)((0, actions_util_1.getOptionalInput)("tools"), apiDetails, (0, actions_util_1.getTemporaryDirectory)(), gitHubVersion.type, await (0, util_1.shouldBypassToolcache)(features, (0, actions_util_1.getOptionalInput)("tools"), (0, actions_util_1.getOptionalInput)("languages"), repositoryNwo, logger), defaultCliVersion, logger);
|
if (codeQLDefaultVersionInfo.variant === util_1.GitHubVariant.DOTCOM) {
|
||||||
|
toolsFeatureFlagsValid = codeQLDefaultVersionInfo.toolsFeatureFlagsValid;
|
||||||
|
}
|
||||||
|
const initCodeQLResult = await (0, init_1.initCodeQL)((0, actions_util_1.getOptionalInput)("tools"), apiDetails, (0, actions_util_1.getTemporaryDirectory)(), gitHubVersion.type, await (0, util_1.shouldBypassToolcache)(features, (0, actions_util_1.getOptionalInput)("tools"), (0, actions_util_1.getOptionalInput)("languages"), repositoryNwo, logger), codeQLDefaultVersionInfo, logger);
|
||||||
codeql = initCodeQLResult.codeql;
|
codeql = initCodeQLResult.codeql;
|
||||||
|
toolsDownloadDurationMs = initCodeQLResult.toolsDownloadDurationMs;
|
||||||
toolsVersion = initCodeQLResult.toolsVersion;
|
toolsVersion = initCodeQLResult.toolsVersion;
|
||||||
|
toolsSource = initCodeQLResult.toolsSource;
|
||||||
await (0, util_1.enrichEnvironment)(codeql);
|
await (0, util_1.enrichEnvironment)(codeql);
|
||||||
config = await (0, init_1.initConfig)((0, actions_util_1.getOptionalInput)("languages"), (0, actions_util_1.getOptionalInput)("queries"), (0, actions_util_1.getOptionalInput)("packs"), (0, actions_util_1.getOptionalInput)("registries"), (0, actions_util_1.getOptionalInput)("config-file"), (0, actions_util_1.getOptionalInput)("db-location"), await getTrapCachingEnabled(features),
|
config = await (0, init_1.initConfig)((0, actions_util_1.getOptionalInput)("languages"), (0, actions_util_1.getOptionalInput)("queries"), (0, actions_util_1.getOptionalInput)("packs"), (0, actions_util_1.getOptionalInput)("registries"), (0, actions_util_1.getOptionalInput)("config-file"), (0, actions_util_1.getOptionalInput)("db-location"), await getTrapCachingEnabled(features),
|
||||||
// Debug mode is enabled if:
|
// Debug mode is enabled if:
|
||||||
@@ -159,10 +187,10 @@ async function run() {
|
|||||||
catch (error) {
|
catch (error) {
|
||||||
core.setFailed(String(error));
|
core.setFailed(String(error));
|
||||||
console.log(error);
|
console.log(error);
|
||||||
await (0, actions_util_1.sendStatusReport)(await (0, actions_util_1.createStatusReportBase)("init", (0, actions_util_1.getActionsStatus)(error), startedAt, String(error), error instanceof Error ? error.stack : undefined));
|
await sendInitStatusReport((0, actions_util_1.getActionsStatus)(error), startedAt, config, toolsDownloadDurationMs, toolsFeatureFlagsValid, toolsSource, toolsVersion, logger);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await sendSuccessStatusReport(startedAt, config, toolsVersion, logger);
|
await sendInitStatusReport("success", startedAt, config, toolsDownloadDurationMs, toolsFeatureFlagsValid, toolsSource, toolsVersion, logger);
|
||||||
}
|
}
|
||||||
async function getTrapCachingEnabled(featureEnablement) {
|
async function getTrapCachingEnabled(featureEnablement) {
|
||||||
// If the workflow specified something always respect that
|
// If the workflow specified something always respect that
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
13
lib/init.js
generated
13
lib/init.js
generated
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.installPythonDeps = exports.injectWindowsTracer = exports.runInit = exports.initConfig = exports.initCodeQL = void 0;
|
exports.installPythonDeps = exports.injectWindowsTracer = exports.runInit = exports.initConfig = exports.initCodeQL = exports.ToolsSource = void 0;
|
||||||
const fs = __importStar(require("fs"));
|
const fs = __importStar(require("fs"));
|
||||||
const path = __importStar(require("path"));
|
const path = __importStar(require("path"));
|
||||||
const toolrunner = __importStar(require("@actions/exec/lib/toolrunner"));
|
const toolrunner = __importStar(require("@actions/exec/lib/toolrunner"));
|
||||||
@@ -34,12 +34,19 @@ const configUtils = __importStar(require("./config-utils"));
|
|||||||
const tracer_config_1 = require("./tracer-config");
|
const tracer_config_1 = require("./tracer-config");
|
||||||
const util = __importStar(require("./util"));
|
const util = __importStar(require("./util"));
|
||||||
const util_1 = require("./util");
|
const util_1 = require("./util");
|
||||||
|
var ToolsSource;
|
||||||
|
(function (ToolsSource) {
|
||||||
|
ToolsSource["Unknown"] = "UNKNOWN";
|
||||||
|
ToolsSource["Local"] = "LOCAL";
|
||||||
|
ToolsSource["Toolcache"] = "TOOLCACHE";
|
||||||
|
ToolsSource["Download"] = "DOWNLOAD";
|
||||||
|
})(ToolsSource = exports.ToolsSource || (exports.ToolsSource = {}));
|
||||||
async function initCodeQL(toolsInput, apiDetails, tempDir, variant, bypassToolcache, defaultCliVersion, logger) {
|
async function initCodeQL(toolsInput, apiDetails, tempDir, variant, bypassToolcache, defaultCliVersion, logger) {
|
||||||
logger.startGroup("Setup CodeQL tools");
|
logger.startGroup("Setup CodeQL tools");
|
||||||
const { codeql, toolsVersion } = await (0, codeql_1.setupCodeQL)(toolsInput, apiDetails, tempDir, variant, bypassToolcache, defaultCliVersion, logger, true);
|
const { codeql, toolsDownloadDurationMs, toolsSource, toolsVersion } = await (0, codeql_1.setupCodeQL)(toolsInput, apiDetails, tempDir, variant, bypassToolcache, defaultCliVersion, logger, true);
|
||||||
await codeql.printVersion();
|
await codeql.printVersion();
|
||||||
logger.endGroup();
|
logger.endGroup();
|
||||||
return { codeql, toolsVersion };
|
return { codeql, toolsDownloadDurationMs, toolsSource, toolsVersion };
|
||||||
}
|
}
|
||||||
exports.initCodeQL = initCodeQL;
|
exports.initCodeQL = initCodeQL;
|
||||||
async function initConfig(languagesInput, queriesInput, packsInput, registriesInput, configFile, dbLocation, trapCachingEnabled, debugMode, debugArtifactName, debugDatabaseName, repository, tempDir, codeQL, workspacePath, gitHubVersion, apiDetails, featureEnablement, logger) {
|
async function initConfig(languagesInput, queriesInput, packsInput, registriesInput, configFile, dbLocation, trapCachingEnabled, debugMode, debugArtifactName, debugDatabaseName, repository, tempDir, codeQL, workspacePath, gitHubVersion, apiDetails, featureEnablement, logger) {
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
||||||
13
lib/setup-codeql.js
generated
13
lib/setup-codeql.js
generated
@@ -29,6 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||||||
exports.setupCodeQLBundle = exports.getCodeQLURLVersion = exports.downloadCodeQL = exports.getCodeQLSource = exports.convertToSemVer = exports.getBundleVersionFromUrl = exports.tryFindCliVersionDotcomOnly = exports.findCodeQLBundleTagDotcomOnly = exports.getCodeQLActionRepository = exports.CODEQL_DEFAULT_ACTION_REPOSITORY = void 0;
|
exports.setupCodeQLBundle = exports.getCodeQLURLVersion = exports.downloadCodeQL = exports.getCodeQLSource = exports.convertToSemVer = exports.getBundleVersionFromUrl = exports.tryFindCliVersionDotcomOnly = exports.findCodeQLBundleTagDotcomOnly = exports.getCodeQLActionRepository = exports.CODEQL_DEFAULT_ACTION_REPOSITORY = void 0;
|
||||||
const fs = __importStar(require("fs"));
|
const fs = __importStar(require("fs"));
|
||||||
const path = __importStar(require("path"));
|
const path = __importStar(require("path"));
|
||||||
|
const perf_hooks_1 = require("perf_hooks");
|
||||||
const toolcache = __importStar(require("@actions/tool-cache"));
|
const toolcache = __importStar(require("@actions/tool-cache"));
|
||||||
const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
|
const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
|
||||||
const semver = __importStar(require("semver"));
|
const semver = __importStar(require("semver"));
|
||||||
@@ -39,6 +40,7 @@ const api = __importStar(require("./api-client"));
|
|||||||
// creation scripts. Ensure that any changes to the format of this file are compatible with both of
|
// creation scripts. Ensure that any changes to the format of this file are compatible with both of
|
||||||
// these dependents.
|
// these dependents.
|
||||||
const defaults = __importStar(require("./defaults.json"));
|
const defaults = __importStar(require("./defaults.json"));
|
||||||
|
const init_1 = require("./init");
|
||||||
const util = __importStar(require("./util"));
|
const util = __importStar(require("./util"));
|
||||||
const util_1 = require("./util");
|
const util_1 = require("./util");
|
||||||
exports.CODEQL_DEFAULT_ACTION_REPOSITORY = "github/codeql-action";
|
exports.CODEQL_DEFAULT_ACTION_REPOSITORY = "github/codeql-action";
|
||||||
@@ -415,7 +417,9 @@ async function downloadCodeQL(codeqlURL, maybeCliVersion, apiDetails, variant, t
|
|||||||
logger.info(`Downloading CodeQL tools from ${codeqlURL}. This may take a while.`);
|
logger.info(`Downloading CodeQL tools from ${codeqlURL}. This may take a while.`);
|
||||||
const dest = path.join(tempDir, (0, uuid_1.v4)());
|
const dest = path.join(tempDir, (0, uuid_1.v4)());
|
||||||
const finalHeaders = Object.assign({ "User-Agent": "CodeQL Action" }, headers);
|
const finalHeaders = Object.assign({ "User-Agent": "CodeQL Action" }, headers);
|
||||||
|
const toolsDownloadStart = perf_hooks_1.performance.now();
|
||||||
const codeqlPath = await toolcache.downloadTool(codeqlURL, dest, undefined, finalHeaders);
|
const codeqlPath = await toolcache.downloadTool(codeqlURL, dest, undefined, finalHeaders);
|
||||||
|
const toolsDownloadDurationMs = perf_hooks_1.performance.now() - toolsDownloadStart;
|
||||||
logger.debug(`CodeQL bundle download to ${codeqlPath} complete.`);
|
logger.debug(`CodeQL bundle download to ${codeqlPath} complete.`);
|
||||||
const codeqlExtracted = await toolcache.extractTar(codeqlPath);
|
const codeqlExtracted = await toolcache.extractTar(codeqlPath);
|
||||||
const bundleVersion = getBundleVersionFromUrl(codeqlURL);
|
const bundleVersion = getBundleVersionFromUrl(codeqlURL);
|
||||||
@@ -439,6 +443,7 @@ async function downloadCodeQL(codeqlURL, maybeCliVersion, apiDetails, variant, t
|
|||||||
return {
|
return {
|
||||||
toolsVersion: cliVersion || toolcacheVersion,
|
toolsVersion: cliVersion || toolcacheVersion,
|
||||||
codeqlFolder: await toolcache.cacheDir(codeqlExtracted, "CodeQL", toolcacheVersion),
|
codeqlFolder: await toolcache.cacheDir(codeqlExtracted, "CodeQL", toolcacheVersion),
|
||||||
|
toolsDownloadDurationMs,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
exports.downloadCodeQL = downloadCodeQL;
|
exports.downloadCodeQL = downloadCodeQL;
|
||||||
@@ -468,24 +473,30 @@ async function setupCodeQLBundle(toolsInput, apiDetails, tempDir, variant, bypas
|
|||||||
const source = await getCodeQLSource(toolsInput, bypassToolcache, defaultCliVersion, apiDetails, variant, logger);
|
const source = await getCodeQLSource(toolsInput, bypassToolcache, defaultCliVersion, apiDetails, variant, logger);
|
||||||
let codeqlFolder;
|
let codeqlFolder;
|
||||||
let toolsVersion = source.toolsVersion;
|
let toolsVersion = source.toolsVersion;
|
||||||
|
let toolsDownloadDurationMs;
|
||||||
|
let toolsSource;
|
||||||
switch (source.sourceType) {
|
switch (source.sourceType) {
|
||||||
case "local":
|
case "local":
|
||||||
codeqlFolder = await toolcache.extractTar(source.codeqlTarPath);
|
codeqlFolder = await toolcache.extractTar(source.codeqlTarPath);
|
||||||
|
toolsSource = init_1.ToolsSource.Local;
|
||||||
break;
|
break;
|
||||||
case "toolcache":
|
case "toolcache":
|
||||||
codeqlFolder = source.codeqlFolder;
|
codeqlFolder = source.codeqlFolder;
|
||||||
logger.debug(`CodeQL found in cache ${codeqlFolder}`);
|
logger.debug(`CodeQL found in cache ${codeqlFolder}`);
|
||||||
|
toolsSource = init_1.ToolsSource.Toolcache;
|
||||||
break;
|
break;
|
||||||
case "download": {
|
case "download": {
|
||||||
const result = await downloadCodeQL(source.codeqlURL, source.cliVersion, apiDetails, variant, tempDir, logger);
|
const result = await downloadCodeQL(source.codeqlURL, source.cliVersion, apiDetails, variant, tempDir, logger);
|
||||||
toolsVersion = result.toolsVersion;
|
toolsVersion = result.toolsVersion;
|
||||||
codeqlFolder = result.codeqlFolder;
|
codeqlFolder = result.codeqlFolder;
|
||||||
|
toolsDownloadDurationMs = result.toolsDownloadDurationMs;
|
||||||
|
toolsSource = init_1.ToolsSource.Download;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
util.assertNever(source);
|
util.assertNever(source);
|
||||||
}
|
}
|
||||||
return { codeqlFolder, toolsVersion };
|
return { codeqlFolder, toolsDownloadDurationMs, toolsSource, toolsVersion };
|
||||||
}
|
}
|
||||||
exports.setupCodeQLBundle = setupCodeQLBundle;
|
exports.setupCodeQLBundle = setupCodeQLBundle;
|
||||||
//# sourceMappingURL=setup-codeql.js.map
|
//# sourceMappingURL=setup-codeql.js.map
|
||||||
File diff suppressed because one or more lines are too long
@@ -303,7 +303,7 @@ type ActionName =
|
|||||||
| "finish"
|
| "finish"
|
||||||
| "upload-sarif"
|
| "upload-sarif"
|
||||||
| "init-post";
|
| "init-post";
|
||||||
type ActionStatus =
|
export type ActionStatus =
|
||||||
| "starting"
|
| "starting"
|
||||||
| "aborted"
|
| "aborted"
|
||||||
| "success"
|
| "success"
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import {
|
|||||||
Feature,
|
Feature,
|
||||||
featureConfig,
|
featureConfig,
|
||||||
} from "./feature-flags";
|
} from "./feature-flags";
|
||||||
|
import { ToolsSource } from "./init";
|
||||||
import { Language } from "./languages";
|
import { Language } from "./languages";
|
||||||
import { getRunnerLogger } from "./logging";
|
import { getRunnerLogger } from "./logging";
|
||||||
import { setupTests, createFeatures, setupActionsVars } from "./testing-utils";
|
import { setupTests, createFeatures, setupActionsVars } from "./testing-utils";
|
||||||
@@ -203,8 +204,11 @@ test("downloads and caches explicitly requested bundles that aren't in the toolc
|
|||||||
getRunnerLogger(true),
|
getRunnerLogger(true),
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
t.assert(toolcache.find("CodeQL", `0.0.0-${version}`));
|
t.assert(toolcache.find("CodeQL", `0.0.0-${version}`));
|
||||||
t.is(result.toolsVersion, `0.0.0-${version}`);
|
t.is(result.toolsVersion, `0.0.0-${version}`);
|
||||||
|
t.is(result.toolsSource, ToolsSource.Download);
|
||||||
|
t.is(typeof result.toolsDownloadDurationMs, "number");
|
||||||
}
|
}
|
||||||
|
|
||||||
t.is(toolcache.findAllVersions("CodeQL").length, 2);
|
t.is(toolcache.findAllVersions("CodeQL").length, 2);
|
||||||
@@ -236,6 +240,8 @@ test("downloads an explicitly requested bundle even if a different version is ca
|
|||||||
);
|
);
|
||||||
t.assert(toolcache.find("CodeQL", "0.0.0-20200610"));
|
t.assert(toolcache.find("CodeQL", "0.0.0-20200610"));
|
||||||
t.deepEqual(result.toolsVersion, "0.0.0-20200610");
|
t.deepEqual(result.toolsVersion, "0.0.0-20200610");
|
||||||
|
t.is(result.toolsSource, ToolsSource.Download);
|
||||||
|
t.not(result.toolsDownloadDurationMs, undefined);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -286,6 +292,8 @@ for (const {
|
|||||||
t.assert(releaseApiMock.isDone(), "Releases API should have been called");
|
t.assert(releaseApiMock.isDone(), "Releases API should have been called");
|
||||||
t.assert(toolcache.find("CodeQL", expectedToolcacheVersion));
|
t.assert(toolcache.find("CodeQL", expectedToolcacheVersion));
|
||||||
t.deepEqual(result.toolsVersion, cliVersion);
|
t.deepEqual(result.toolsVersion, cliVersion);
|
||||||
|
t.is(result.toolsSource, ToolsSource.Download);
|
||||||
|
t.not(result.toolsDownloadDurationMs, undefined);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -354,6 +362,14 @@ for (const { isCached, tagName, toolcacheCliVersion } of [
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
t.is(result.toolsVersion, SAMPLE_DEFAULT_CLI_VERSION.cliVersion);
|
t.is(result.toolsVersion, SAMPLE_DEFAULT_CLI_VERSION.cliVersion);
|
||||||
|
|
||||||
|
if (isCached) {
|
||||||
|
t.is(result.toolsSource, ToolsSource.Toolcache);
|
||||||
|
t.is(result.toolsDownloadDurationMs, undefined);
|
||||||
|
} else {
|
||||||
|
t.is(result.toolsSource, ToolsSource.Download);
|
||||||
|
t.is(typeof result.toolsDownloadDurationMs, "number");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -384,6 +400,8 @@ for (const variant of [util.GitHubVariant.GHAE, util.GitHubVariant.GHES]) {
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
t.deepEqual(result.toolsVersion, "0.0.0-20200601");
|
t.deepEqual(result.toolsVersion, "0.0.0-20200601");
|
||||||
|
t.is(result.toolsSource, ToolsSource.Toolcache);
|
||||||
|
t.is(result.toolsDownloadDurationMs, undefined);
|
||||||
|
|
||||||
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
||||||
t.is(cachedVersions.length, 1);
|
t.is(cachedVersions.length, 1);
|
||||||
@@ -418,6 +436,8 @@ for (const variant of [util.GitHubVariant.GHAE, util.GitHubVariant.GHES]) {
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
t.deepEqual(result.toolsVersion, defaults.cliVersion);
|
t.deepEqual(result.toolsVersion, defaults.cliVersion);
|
||||||
|
t.is(result.toolsSource, ToolsSource.Download);
|
||||||
|
t.is(typeof result.toolsDownloadDurationMs, "number");
|
||||||
|
|
||||||
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
||||||
t.is(cachedVersions.length, 2);
|
t.is(cachedVersions.length, 2);
|
||||||
@@ -449,6 +469,8 @@ test('downloads bundle if "latest" tools specified but not cached', async (t) =>
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
t.deepEqual(result.toolsVersion, defaults.cliVersion);
|
t.deepEqual(result.toolsVersion, defaults.cliVersion);
|
||||||
|
t.is(result.toolsSource, ToolsSource.Download);
|
||||||
|
t.is(typeof result.toolsDownloadDurationMs, "number");
|
||||||
|
|
||||||
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
||||||
t.is(cachedVersions.length, 2);
|
t.is(cachedVersions.length, 2);
|
||||||
@@ -498,7 +520,7 @@ test("download codeql bundle from github ae endpoint", async (t) => {
|
|||||||
sinon.stub(actionsUtil, "isRunningLocalAction").returns(false);
|
sinon.stub(actionsUtil, "isRunningLocalAction").returns(false);
|
||||||
process.env["GITHUB_ACTION_REPOSITORY"] = "github/codeql-action";
|
process.env["GITHUB_ACTION_REPOSITORY"] = "github/codeql-action";
|
||||||
|
|
||||||
await codeql.setupCodeQL(
|
const result = await codeql.setupCodeQL(
|
||||||
undefined,
|
undefined,
|
||||||
sampleGHAEApiDetails,
|
sampleGHAEApiDetails,
|
||||||
tmpDir,
|
tmpDir,
|
||||||
@@ -513,6 +535,9 @@ test("download codeql bundle from github ae endpoint", async (t) => {
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
t.is(result.toolsSource, ToolsSource.Download);
|
||||||
|
t.is(typeof result.toolsDownloadDurationMs, "number");
|
||||||
|
|
||||||
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
const cachedVersions = toolcache.findAllVersions("CodeQL");
|
||||||
t.is(cachedVersions.length, 1);
|
t.is(cachedVersions.length, 1);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import * as api from "./api-client";
|
|||||||
import { Config } from "./config-utils";
|
import { Config } from "./config-utils";
|
||||||
import { errorMatchers } from "./error-matcher";
|
import { errorMatchers } from "./error-matcher";
|
||||||
import { CodeQLDefaultVersionInfo, FeatureEnablement } from "./feature-flags";
|
import { CodeQLDefaultVersionInfo, FeatureEnablement } from "./feature-flags";
|
||||||
|
import { ToolsSource } from "./init";
|
||||||
import { isTracedLanguage, Language } from "./languages";
|
import { isTracedLanguage, Language } from "./languages";
|
||||||
import { Logger } from "./logging";
|
import { Logger } from "./logging";
|
||||||
import * as setupCodeql from "./setup-codeql";
|
import * as setupCodeql from "./setup-codeql";
|
||||||
@@ -300,17 +301,23 @@ export async function setupCodeQL(
|
|||||||
defaultCliVersion: CodeQLDefaultVersionInfo,
|
defaultCliVersion: CodeQLDefaultVersionInfo,
|
||||||
logger: Logger,
|
logger: Logger,
|
||||||
checkVersion: boolean
|
checkVersion: boolean
|
||||||
): Promise<{ codeql: CodeQL; toolsVersion: string }> {
|
): Promise<{
|
||||||
|
codeql: CodeQL;
|
||||||
|
toolsDownloadDurationMs?: number;
|
||||||
|
toolsSource: ToolsSource;
|
||||||
|
toolsVersion: string;
|
||||||
|
}> {
|
||||||
try {
|
try {
|
||||||
const { codeqlFolder, toolsVersion } = await setupCodeql.setupCodeQLBundle(
|
const { codeqlFolder, toolsDownloadDurationMs, toolsSource, toolsVersion } =
|
||||||
toolsInput,
|
await setupCodeql.setupCodeQLBundle(
|
||||||
apiDetails,
|
toolsInput,
|
||||||
tempDir,
|
apiDetails,
|
||||||
variant,
|
tempDir,
|
||||||
bypassToolcache,
|
variant,
|
||||||
defaultCliVersion,
|
bypassToolcache,
|
||||||
logger
|
defaultCliVersion,
|
||||||
);
|
logger
|
||||||
|
);
|
||||||
let codeqlCmd = path.join(codeqlFolder, "codeql", "codeql");
|
let codeqlCmd = path.join(codeqlFolder, "codeql", "codeql");
|
||||||
if (process.platform === "win32") {
|
if (process.platform === "win32") {
|
||||||
codeqlCmd += ".exe";
|
codeqlCmd += ".exe";
|
||||||
@@ -319,7 +326,12 @@ export async function setupCodeQL(
|
|||||||
}
|
}
|
||||||
|
|
||||||
cachedCodeQL = await getCodeQLForCmd(codeqlCmd, checkVersion);
|
cachedCodeQL = await getCodeQLForCmd(codeqlCmd, checkVersion);
|
||||||
return { codeql: cachedCodeQL, toolsVersion };
|
return {
|
||||||
|
codeql: cachedCodeQL,
|
||||||
|
toolsDownloadDurationMs,
|
||||||
|
toolsSource,
|
||||||
|
toolsVersion,
|
||||||
|
};
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.error(e instanceof Error ? e : new Error(String(e)));
|
logger.error(e instanceof Error ? e : new Error(String(e)));
|
||||||
throw new Error("Unable to download and extract CodeQL CLI");
|
throw new Error("Unable to download and extract CodeQL CLI");
|
||||||
|
|||||||
@@ -376,7 +376,9 @@ for (const variant of [GitHubVariant.GHAE, GitHubVariant.GHES]) {
|
|||||||
test(`selects CLI from defaults.json on ${GitHubVariant[variant]}`, async (t) => {
|
test(`selects CLI from defaults.json on ${GitHubVariant[variant]}`, async (t) => {
|
||||||
await withTmpDir(async (tmpDir) => {
|
await withTmpDir(async (tmpDir) => {
|
||||||
const features = setUpFeatureFlagTests(tmpDir);
|
const features = setUpFeatureFlagTests(tmpDir);
|
||||||
t.deepEqual(await features.getDefaultCliVersion(variant), {
|
|
||||||
|
const defaultCliVersion = await features.getDefaultCliVersion(variant);
|
||||||
|
t.deepEqual(defaultCliVersion, {
|
||||||
cliVersion: defaults.cliVersion,
|
cliVersion: defaults.cliVersion,
|
||||||
tagName: defaults.bundleVersion,
|
tagName: defaults.bundleVersion,
|
||||||
variant,
|
variant,
|
||||||
@@ -397,13 +399,14 @@ test("selects CLI v2.12.1 on Dotcom when feature flags enable v2.12.0 and v2.12.
|
|||||||
expectedFeatureEnablement["default_codeql_version_2_12_5_enabled"] = false;
|
expectedFeatureEnablement["default_codeql_version_2_12_5_enabled"] = false;
|
||||||
mockFeatureFlagApiEndpoint(200, expectedFeatureEnablement);
|
mockFeatureFlagApiEndpoint(200, expectedFeatureEnablement);
|
||||||
|
|
||||||
t.deepEqual(
|
const defaultCliVersion = await featureEnablement.getDefaultCliVersion(
|
||||||
await featureEnablement.getDefaultCliVersion(GitHubVariant.DOTCOM),
|
GitHubVariant.DOTCOM
|
||||||
{
|
|
||||||
cliVersion: "2.12.1",
|
|
||||||
variant: GitHubVariant.DOTCOM,
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
t.deepEqual(defaultCliVersion, {
|
||||||
|
cliVersion: "2.12.1",
|
||||||
|
toolsFeatureFlagsValid: true,
|
||||||
|
variant: GitHubVariant.DOTCOM,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -413,13 +416,14 @@ test(`selects CLI from defaults.json on Dotcom when no default version feature f
|
|||||||
const expectedFeatureEnablement = initializeFeatures(true);
|
const expectedFeatureEnablement = initializeFeatures(true);
|
||||||
mockFeatureFlagApiEndpoint(200, expectedFeatureEnablement);
|
mockFeatureFlagApiEndpoint(200, expectedFeatureEnablement);
|
||||||
|
|
||||||
t.deepEqual(
|
const defaultCliVersion = await featureEnablement.getDefaultCliVersion(
|
||||||
await featureEnablement.getDefaultCliVersion(GitHubVariant.DOTCOM),
|
GitHubVariant.DOTCOM
|
||||||
{
|
|
||||||
cliVersion: defaults.cliVersion,
|
|
||||||
variant: GitHubVariant.DOTCOM,
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
t.deepEqual(defaultCliVersion, {
|
||||||
|
cliVersion: defaults.cliVersion,
|
||||||
|
toolsFeatureFlagsValid: false,
|
||||||
|
variant: GitHubVariant.DOTCOM,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -437,13 +441,15 @@ test("ignores invalid version numbers in default version feature flags", async (
|
|||||||
true;
|
true;
|
||||||
mockFeatureFlagApiEndpoint(200, expectedFeatureEnablement);
|
mockFeatureFlagApiEndpoint(200, expectedFeatureEnablement);
|
||||||
|
|
||||||
t.deepEqual(
|
const defaultCliVersion = await featureEnablement.getDefaultCliVersion(
|
||||||
await featureEnablement.getDefaultCliVersion(GitHubVariant.DOTCOM),
|
GitHubVariant.DOTCOM
|
||||||
{
|
|
||||||
cliVersion: "2.12.1",
|
|
||||||
variant: GitHubVariant.DOTCOM,
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
t.deepEqual(defaultCliVersion, {
|
||||||
|
cliVersion: "2.12.1",
|
||||||
|
toolsFeatureFlagsValid: true,
|
||||||
|
variant: GitHubVariant.DOTCOM,
|
||||||
|
});
|
||||||
|
|
||||||
t.assert(
|
t.assert(
|
||||||
loggedMessages.find(
|
loggedMessages.find(
|
||||||
(v: LoggedMessage) =>
|
(v: LoggedMessage) =>
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ const DEFAULT_VERSION_FEATURE_FLAG_SUFFIX = "_enabled";
|
|||||||
export type CodeQLDefaultVersionInfo =
|
export type CodeQLDefaultVersionInfo =
|
||||||
| {
|
| {
|
||||||
cliVersion: string;
|
cliVersion: string;
|
||||||
|
toolsFeatureFlagsValid?: boolean;
|
||||||
variant: util.GitHubVariant.DOTCOM;
|
variant: util.GitHubVariant.DOTCOM;
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
@@ -207,8 +208,10 @@ class GitHubFeatureFlags implements FeatureEnablement {
|
|||||||
variant: util.GitHubVariant
|
variant: util.GitHubVariant
|
||||||
): Promise<CodeQLDefaultVersionInfo> {
|
): Promise<CodeQLDefaultVersionInfo> {
|
||||||
if (variant === util.GitHubVariant.DOTCOM) {
|
if (variant === util.GitHubVariant.DOTCOM) {
|
||||||
|
const defaultDotComCliVersion = await this.getDefaultDotcomCliVersion();
|
||||||
return {
|
return {
|
||||||
cliVersion: await this.getDefaultDotcomCliVersion(),
|
cliVersion: defaultDotComCliVersion.version,
|
||||||
|
toolsFeatureFlagsValid: defaultDotComCliVersion.toolsFeatureFlagsValid,
|
||||||
variant,
|
variant,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -219,7 +222,10 @@ class GitHubFeatureFlags implements FeatureEnablement {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
async getDefaultDotcomCliVersion(): Promise<string> {
|
async getDefaultDotcomCliVersion(): Promise<{
|
||||||
|
version: string;
|
||||||
|
toolsFeatureFlagsValid: boolean;
|
||||||
|
}> {
|
||||||
const response = await this.getAllFeatures();
|
const response = await this.getAllFeatures();
|
||||||
|
|
||||||
const enabledFeatureFlagCliVersions = Object.entries(response)
|
const enabledFeatureFlagCliVersions = Object.entries(response)
|
||||||
@@ -244,7 +250,10 @@ class GitHubFeatureFlags implements FeatureEnablement {
|
|||||||
"Feature flags do not specify a default CLI version. Falling back to the CLI version " +
|
"Feature flags do not specify a default CLI version. Falling back to the CLI version " +
|
||||||
`shipped with the Action. This is ${defaults.cliVersion}.`
|
`shipped with the Action. This is ${defaults.cliVersion}.`
|
||||||
);
|
);
|
||||||
return defaults.cliVersion;
|
return {
|
||||||
|
version: defaults.cliVersion,
|
||||||
|
toolsFeatureFlagsValid: false,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const maxCliVersion = enabledFeatureFlagCliVersions.reduce(
|
const maxCliVersion = enabledFeatureFlagCliVersions.reduce(
|
||||||
@@ -255,7 +264,7 @@ class GitHubFeatureFlags implements FeatureEnablement {
|
|||||||
this.logger.debug(
|
this.logger.debug(
|
||||||
`Derived default CLI version of ${maxCliVersion} from feature flags.`
|
`Derived default CLI version of ${maxCliVersion} from feature flags.`
|
||||||
);
|
);
|
||||||
return maxCliVersion;
|
return { version: maxCliVersion, toolsFeatureFlagsValid: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
async getValue(feature: Feature): Promise<boolean> {
|
async getValue(feature: Feature): Promise<boolean> {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import * as path from "path";
|
|||||||
import * as core from "@actions/core";
|
import * as core from "@actions/core";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
ActionStatus,
|
||||||
createStatusReportBase,
|
createStatusReportBase,
|
||||||
getActionsStatus,
|
getActionsStatus,
|
||||||
getActionVersion,
|
getActionVersion,
|
||||||
@@ -22,6 +23,7 @@ import {
|
|||||||
injectWindowsTracer,
|
injectWindowsTracer,
|
||||||
installPythonDeps,
|
installPythonDeps,
|
||||||
runInit,
|
runInit,
|
||||||
|
ToolsSource,
|
||||||
} from "./init";
|
} from "./init";
|
||||||
import { Language } from "./languages";
|
import { Language } from "./languages";
|
||||||
import { getActionsLogger, Logger } from "./logging";
|
import { getActionsLogger, Logger } from "./logging";
|
||||||
@@ -38,13 +40,27 @@ import {
|
|||||||
getMlPoweredJsQueriesStatus,
|
getMlPoweredJsQueriesStatus,
|
||||||
getRequiredEnvParam,
|
getRequiredEnvParam,
|
||||||
getThreadsFlagValue,
|
getThreadsFlagValue,
|
||||||
|
GitHubVariant,
|
||||||
initializeEnvironment,
|
initializeEnvironment,
|
||||||
isHostedRunner,
|
isHostedRunner,
|
||||||
shouldBypassToolcache,
|
shouldBypassToolcache,
|
||||||
} from "./util";
|
} from "./util";
|
||||||
import { validateWorkflow } from "./workflow";
|
import { validateWorkflow } from "./workflow";
|
||||||
|
|
||||||
interface InitSuccessStatusReport extends StatusReportBase {
|
/** Fields of the init status report that can be sent before `config` is populated. */
|
||||||
|
interface InitStatusReport extends StatusReportBase {
|
||||||
|
/** Value given by the user as the "tools" input. */
|
||||||
|
tools_input: string;
|
||||||
|
/** Version of the bundle used. */
|
||||||
|
tools_resolved_version: string;
|
||||||
|
/** Where the bundle originated from. */
|
||||||
|
tools_source: ToolsSource;
|
||||||
|
/** Comma-separated list of languages specified explicitly in the workflow file. */
|
||||||
|
workflow_languages: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Fields of the init status report that are populated using values from `config`. */
|
||||||
|
interface InitWithConfigStatusReport extends InitStatusReport {
|
||||||
/** Comma-separated list of languages where the default queries are disabled. */
|
/** Comma-separated list of languages where the default queries are disabled. */
|
||||||
disable_default_queries: string;
|
disable_default_queries: string;
|
||||||
/**
|
/**
|
||||||
@@ -59,12 +75,6 @@ interface InitSuccessStatusReport extends StatusReportBase {
|
|||||||
paths_ignore: string;
|
paths_ignore: string;
|
||||||
/** Comma-separated list of queries sources, from the 'queries' config field or workflow input. */
|
/** Comma-separated list of queries sources, from the 'queries' config field or workflow input. */
|
||||||
queries: string;
|
queries: string;
|
||||||
/** Value given by the user as the "tools" input. */
|
|
||||||
tools_input: string;
|
|
||||||
/** Version of the bundle used. */
|
|
||||||
tools_resolved_version: string;
|
|
||||||
/** Comma-separated list of languages specified explicitly in the workflow file. */
|
|
||||||
workflow_languages: string;
|
|
||||||
/** Comma-separated list of languages for which we are using TRAP caching. */
|
/** Comma-separated list of languages for which we are using TRAP caching. */
|
||||||
trap_cache_languages: string;
|
trap_cache_languages: string;
|
||||||
/** Size of TRAP caches that we downloaded, in bytes. */
|
/** Size of TRAP caches that we downloaded, in bytes. */
|
||||||
@@ -73,63 +83,97 @@ interface InitSuccessStatusReport extends StatusReportBase {
|
|||||||
trap_cache_download_duration_ms: number;
|
trap_cache_download_duration_ms: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function sendSuccessStatusReport(
|
/** Fields of the init status report populated when the tools source is `download`. */
|
||||||
|
interface InitToolsDownloadFields {
|
||||||
|
/** Time taken to download the bundle, in milliseconds. */
|
||||||
|
tools_download_duration_ms?: number;
|
||||||
|
/** Whether the relevant tools dotcom feature flags have been misconfigured. Only populated if we attempt to determine the default version based on the dotcom feature flags. */
|
||||||
|
tools_feature_flags_valid?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function sendInitStatusReport(
|
||||||
|
actionStatus: ActionStatus,
|
||||||
startedAt: Date,
|
startedAt: Date,
|
||||||
config: configUtils.Config,
|
config: configUtils.Config | undefined,
|
||||||
|
toolsDownloadDurationMs: number | undefined,
|
||||||
|
toolsFeatureFlagsValid: boolean | undefined,
|
||||||
|
toolsSource: ToolsSource,
|
||||||
toolsVersion: string,
|
toolsVersion: string,
|
||||||
logger: Logger
|
logger: Logger
|
||||||
) {
|
) {
|
||||||
const statusReportBase = await createStatusReportBase(
|
const statusReportBase = await createStatusReportBase(
|
||||||
"init",
|
"init",
|
||||||
"success",
|
actionStatus,
|
||||||
startedAt
|
startedAt
|
||||||
);
|
);
|
||||||
|
|
||||||
const languages = config.languages.join(",");
|
|
||||||
const workflowLanguages = getOptionalInput("languages");
|
const workflowLanguages = getOptionalInput("languages");
|
||||||
const paths = (config.originalUserInput.paths || []).join(",");
|
|
||||||
const pathsIgnore = (config.originalUserInput["paths-ignore"] || []).join(
|
|
||||||
","
|
|
||||||
);
|
|
||||||
const disableDefaultQueries = config.originalUserInput[
|
|
||||||
"disable-default-queries"
|
|
||||||
]
|
|
||||||
? languages
|
|
||||||
: "";
|
|
||||||
|
|
||||||
const queries: string[] = [];
|
const initStatusReport: InitStatusReport = {
|
||||||
let queriesInput = getOptionalInput("queries")?.trim();
|
|
||||||
if (queriesInput === undefined || queriesInput.startsWith("+")) {
|
|
||||||
queries.push(
|
|
||||||
...(config.originalUserInput.queries || []).map((q) => q.uses)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (queriesInput !== undefined) {
|
|
||||||
queriesInput = queriesInput.startsWith("+")
|
|
||||||
? queriesInput.slice(1)
|
|
||||||
: queriesInput;
|
|
||||||
queries.push(...queriesInput.split(","));
|
|
||||||
}
|
|
||||||
|
|
||||||
const statusReport: InitSuccessStatusReport = {
|
|
||||||
...statusReportBase,
|
...statusReportBase,
|
||||||
disable_default_queries: disableDefaultQueries,
|
|
||||||
languages,
|
|
||||||
ml_powered_javascript_queries: getMlPoweredJsQueriesStatus(config),
|
|
||||||
paths,
|
|
||||||
paths_ignore: pathsIgnore,
|
|
||||||
queries: queries.join(","),
|
|
||||||
tools_input: getOptionalInput("tools") || "",
|
tools_input: getOptionalInput("tools") || "",
|
||||||
tools_resolved_version: toolsVersion,
|
tools_resolved_version: toolsVersion,
|
||||||
|
tools_source: toolsSource || ToolsSource.Unknown,
|
||||||
workflow_languages: workflowLanguages || "",
|
workflow_languages: workflowLanguages || "",
|
||||||
trap_cache_languages: Object.keys(config.trapCaches).join(","),
|
|
||||||
trap_cache_download_size_bytes: Math.round(
|
|
||||||
await getTotalCacheSize(config.trapCaches, logger)
|
|
||||||
),
|
|
||||||
trap_cache_download_duration_ms: Math.round(config.trapCacheDownloadTime),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
await sendStatusReport(statusReport);
|
let initToolsDownloadFields: InitToolsDownloadFields = {};
|
||||||
|
|
||||||
|
if (toolsSource === ToolsSource.Download) {
|
||||||
|
initToolsDownloadFields = {
|
||||||
|
tools_download_duration_ms: toolsDownloadDurationMs,
|
||||||
|
tools_feature_flags_valid: toolsFeatureFlagsValid,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config !== undefined) {
|
||||||
|
const languages = config.languages.join(",");
|
||||||
|
const paths = (config.originalUserInput.paths || []).join(",");
|
||||||
|
const pathsIgnore = (config.originalUserInput["paths-ignore"] || []).join(
|
||||||
|
","
|
||||||
|
);
|
||||||
|
const disableDefaultQueries = config.originalUserInput[
|
||||||
|
"disable-default-queries"
|
||||||
|
]
|
||||||
|
? languages
|
||||||
|
: "";
|
||||||
|
|
||||||
|
const queries: string[] = [];
|
||||||
|
let queriesInput = getOptionalInput("queries")?.trim();
|
||||||
|
if (queriesInput === undefined || queriesInput.startsWith("+")) {
|
||||||
|
queries.push(
|
||||||
|
...(config.originalUserInput.queries || []).map((q) => q.uses)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (queriesInput !== undefined) {
|
||||||
|
queriesInput = queriesInput.startsWith("+")
|
||||||
|
? queriesInput.slice(1)
|
||||||
|
: queriesInput;
|
||||||
|
queries.push(...queriesInput.split(","));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append fields that are dependent on `config`
|
||||||
|
const initWithConfigStatusReport: InitWithConfigStatusReport = {
|
||||||
|
...initStatusReport,
|
||||||
|
disable_default_queries: disableDefaultQueries,
|
||||||
|
languages,
|
||||||
|
ml_powered_javascript_queries: getMlPoweredJsQueriesStatus(config),
|
||||||
|
paths,
|
||||||
|
paths_ignore: pathsIgnore,
|
||||||
|
queries: queries.join(","),
|
||||||
|
trap_cache_languages: Object.keys(config.trapCaches).join(","),
|
||||||
|
trap_cache_download_size_bytes: Math.round(
|
||||||
|
await getTotalCacheSize(config.trapCaches, logger)
|
||||||
|
),
|
||||||
|
trap_cache_download_duration_ms: Math.round(config.trapCacheDownloadTime),
|
||||||
|
};
|
||||||
|
await sendStatusReport({
|
||||||
|
...initWithConfigStatusReport,
|
||||||
|
...initToolsDownloadFields,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
await sendStatusReport({ ...initStatusReport, ...initToolsDownloadFields });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
@@ -139,6 +183,9 @@ async function run() {
|
|||||||
|
|
||||||
let config: configUtils.Config;
|
let config: configUtils.Config;
|
||||||
let codeql: CodeQL;
|
let codeql: CodeQL;
|
||||||
|
let toolsDownloadDurationMs: number | undefined;
|
||||||
|
let toolsFeatureFlagsValid: boolean | undefined;
|
||||||
|
let toolsSource: ToolsSource;
|
||||||
let toolsVersion: string;
|
let toolsVersion: string;
|
||||||
|
|
||||||
const apiDetails = {
|
const apiDetails = {
|
||||||
@@ -178,9 +225,12 @@ async function run() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultCliVersion = await features.getDefaultCliVersion(
|
const codeQLDefaultVersionInfo = await features.getDefaultCliVersion(
|
||||||
gitHubVersion.type
|
gitHubVersion.type
|
||||||
);
|
);
|
||||||
|
if (codeQLDefaultVersionInfo.variant === GitHubVariant.DOTCOM) {
|
||||||
|
toolsFeatureFlagsValid = codeQLDefaultVersionInfo.toolsFeatureFlagsValid;
|
||||||
|
}
|
||||||
const initCodeQLResult = await initCodeQL(
|
const initCodeQLResult = await initCodeQL(
|
||||||
getOptionalInput("tools"),
|
getOptionalInput("tools"),
|
||||||
apiDetails,
|
apiDetails,
|
||||||
@@ -193,11 +243,13 @@ async function run() {
|
|||||||
repositoryNwo,
|
repositoryNwo,
|
||||||
logger
|
logger
|
||||||
),
|
),
|
||||||
defaultCliVersion,
|
codeQLDefaultVersionInfo,
|
||||||
logger
|
logger
|
||||||
);
|
);
|
||||||
codeql = initCodeQLResult.codeql;
|
codeql = initCodeQLResult.codeql;
|
||||||
|
toolsDownloadDurationMs = initCodeQLResult.toolsDownloadDurationMs;
|
||||||
toolsVersion = initCodeQLResult.toolsVersion;
|
toolsVersion = initCodeQLResult.toolsVersion;
|
||||||
|
toolsSource = initCodeQLResult.toolsSource;
|
||||||
await enrichEnvironment(codeql);
|
await enrichEnvironment(codeql);
|
||||||
|
|
||||||
config = await initConfig(
|
config = await initConfig(
|
||||||
@@ -315,18 +367,28 @@ async function run() {
|
|||||||
core.setFailed(String(error));
|
core.setFailed(String(error));
|
||||||
|
|
||||||
console.log(error);
|
console.log(error);
|
||||||
await sendStatusReport(
|
await sendInitStatusReport(
|
||||||
await createStatusReportBase(
|
getActionsStatus(error),
|
||||||
"init",
|
startedAt,
|
||||||
getActionsStatus(error),
|
config,
|
||||||
startedAt,
|
toolsDownloadDurationMs,
|
||||||
String(error),
|
toolsFeatureFlagsValid,
|
||||||
error instanceof Error ? error.stack : undefined
|
toolsSource,
|
||||||
)
|
toolsVersion,
|
||||||
|
logger
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await sendSuccessStatusReport(startedAt, config, toolsVersion, logger);
|
await sendInitStatusReport(
|
||||||
|
"success",
|
||||||
|
startedAt,
|
||||||
|
config,
|
||||||
|
toolsDownloadDurationMs,
|
||||||
|
toolsFeatureFlagsValid,
|
||||||
|
toolsSource,
|
||||||
|
toolsVersion,
|
||||||
|
logger
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getTrapCachingEnabled(
|
async function getTrapCachingEnabled(
|
||||||
|
|||||||
37
src/init.ts
37
src/init.ts
@@ -15,6 +15,13 @@ import { TracerConfig, getCombinedTracerConfig } from "./tracer-config";
|
|||||||
import * as util from "./util";
|
import * as util from "./util";
|
||||||
import { codeQlVersionAbove } from "./util";
|
import { codeQlVersionAbove } from "./util";
|
||||||
|
|
||||||
|
export enum ToolsSource {
|
||||||
|
Unknown = "UNKNOWN",
|
||||||
|
Local = "LOCAL",
|
||||||
|
Toolcache = "TOOLCACHE",
|
||||||
|
Download = "DOWNLOAD",
|
||||||
|
}
|
||||||
|
|
||||||
export async function initCodeQL(
|
export async function initCodeQL(
|
||||||
toolsInput: string | undefined,
|
toolsInput: string | undefined,
|
||||||
apiDetails: GitHubApiDetails,
|
apiDetails: GitHubApiDetails,
|
||||||
@@ -23,21 +30,27 @@ export async function initCodeQL(
|
|||||||
bypassToolcache: boolean,
|
bypassToolcache: boolean,
|
||||||
defaultCliVersion: CodeQLDefaultVersionInfo,
|
defaultCliVersion: CodeQLDefaultVersionInfo,
|
||||||
logger: Logger
|
logger: Logger
|
||||||
): Promise<{ codeql: CodeQL; toolsVersion: string }> {
|
): Promise<{
|
||||||
|
codeql: CodeQL;
|
||||||
|
toolsDownloadDurationMs?: number;
|
||||||
|
toolsSource: ToolsSource;
|
||||||
|
toolsVersion: string;
|
||||||
|
}> {
|
||||||
logger.startGroup("Setup CodeQL tools");
|
logger.startGroup("Setup CodeQL tools");
|
||||||
const { codeql, toolsVersion } = await setupCodeQL(
|
const { codeql, toolsDownloadDurationMs, toolsSource, toolsVersion } =
|
||||||
toolsInput,
|
await setupCodeQL(
|
||||||
apiDetails,
|
toolsInput,
|
||||||
tempDir,
|
apiDetails,
|
||||||
variant,
|
tempDir,
|
||||||
bypassToolcache,
|
variant,
|
||||||
defaultCliVersion,
|
bypassToolcache,
|
||||||
logger,
|
defaultCliVersion,
|
||||||
true
|
logger,
|
||||||
);
|
true
|
||||||
|
);
|
||||||
await codeql.printVersion();
|
await codeql.printVersion();
|
||||||
logger.endGroup();
|
logger.endGroup();
|
||||||
return { codeql, toolsVersion };
|
return { codeql, toolsDownloadDurationMs, toolsSource, toolsVersion };
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function initConfig(
|
export async function initConfig(
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import { OutgoingHttpHeaders } from "http";
|
import { OutgoingHttpHeaders } from "http";
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
|
import { performance } from "perf_hooks";
|
||||||
|
|
||||||
import * as toolcache from "@actions/tool-cache";
|
import * as toolcache from "@actions/tool-cache";
|
||||||
import { default as deepEqual } from "fast-deep-equal";
|
import { default as deepEqual } from "fast-deep-equal";
|
||||||
@@ -14,6 +15,7 @@ import * as api from "./api-client";
|
|||||||
// these dependents.
|
// these dependents.
|
||||||
import * as defaults from "./defaults.json";
|
import * as defaults from "./defaults.json";
|
||||||
import { CodeQLDefaultVersionInfo } from "./feature-flags";
|
import { CodeQLDefaultVersionInfo } from "./feature-flags";
|
||||||
|
import { ToolsSource } from "./init";
|
||||||
import { Logger } from "./logging";
|
import { Logger } from "./logging";
|
||||||
import * as util from "./util";
|
import * as util from "./util";
|
||||||
import { isGoodVersion } from "./util";
|
import { isGoodVersion } from "./util";
|
||||||
@@ -514,7 +516,11 @@ export async function downloadCodeQL(
|
|||||||
variant: util.GitHubVariant,
|
variant: util.GitHubVariant,
|
||||||
tempDir: string,
|
tempDir: string,
|
||||||
logger: Logger
|
logger: Logger
|
||||||
): Promise<{ toolsVersion: string; codeqlFolder: string }> {
|
): Promise<{
|
||||||
|
toolsVersion: string;
|
||||||
|
codeqlFolder: string;
|
||||||
|
toolsDownloadDurationMs: number;
|
||||||
|
}> {
|
||||||
const parsedCodeQLURL = new URL(codeqlURL);
|
const parsedCodeQLURL = new URL(codeqlURL);
|
||||||
const searchParams = new URLSearchParams(parsedCodeQLURL.search);
|
const searchParams = new URLSearchParams(parsedCodeQLURL.search);
|
||||||
const headers: OutgoingHttpHeaders = {
|
const headers: OutgoingHttpHeaders = {
|
||||||
@@ -541,12 +547,16 @@ export async function downloadCodeQL(
|
|||||||
{ "User-Agent": "CodeQL Action" },
|
{ "User-Agent": "CodeQL Action" },
|
||||||
headers
|
headers
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const toolsDownloadStart = performance.now();
|
||||||
const codeqlPath = await toolcache.downloadTool(
|
const codeqlPath = await toolcache.downloadTool(
|
||||||
codeqlURL,
|
codeqlURL,
|
||||||
dest,
|
dest,
|
||||||
undefined,
|
undefined,
|
||||||
finalHeaders
|
finalHeaders
|
||||||
);
|
);
|
||||||
|
const toolsDownloadDurationMs = performance.now() - toolsDownloadStart;
|
||||||
|
|
||||||
logger.debug(`CodeQL bundle download to ${codeqlPath} complete.`);
|
logger.debug(`CodeQL bundle download to ${codeqlPath} complete.`);
|
||||||
|
|
||||||
const codeqlExtracted = await toolcache.extractTar(codeqlPath);
|
const codeqlExtracted = await toolcache.extractTar(codeqlPath);
|
||||||
@@ -581,6 +591,7 @@ export async function downloadCodeQL(
|
|||||||
"CodeQL",
|
"CodeQL",
|
||||||
toolcacheVersion
|
toolcacheVersion
|
||||||
),
|
),
|
||||||
|
toolsDownloadDurationMs,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -616,7 +627,12 @@ export async function setupCodeQLBundle(
|
|||||||
bypassToolcache: boolean,
|
bypassToolcache: boolean,
|
||||||
defaultCliVersion: CodeQLDefaultVersionInfo,
|
defaultCliVersion: CodeQLDefaultVersionInfo,
|
||||||
logger: Logger
|
logger: Logger
|
||||||
): Promise<{ codeqlFolder: string; toolsVersion: string }> {
|
): Promise<{
|
||||||
|
codeqlFolder: string;
|
||||||
|
toolsDownloadDurationMs?: number;
|
||||||
|
toolsSource: ToolsSource;
|
||||||
|
toolsVersion: string;
|
||||||
|
}> {
|
||||||
const source = await getCodeQLSource(
|
const source = await getCodeQLSource(
|
||||||
toolsInput,
|
toolsInput,
|
||||||
bypassToolcache,
|
bypassToolcache,
|
||||||
@@ -628,13 +644,17 @@ export async function setupCodeQLBundle(
|
|||||||
|
|
||||||
let codeqlFolder: string;
|
let codeqlFolder: string;
|
||||||
let toolsVersion = source.toolsVersion;
|
let toolsVersion = source.toolsVersion;
|
||||||
|
let toolsDownloadDurationMs: number | undefined;
|
||||||
|
let toolsSource: ToolsSource;
|
||||||
switch (source.sourceType) {
|
switch (source.sourceType) {
|
||||||
case "local":
|
case "local":
|
||||||
codeqlFolder = await toolcache.extractTar(source.codeqlTarPath);
|
codeqlFolder = await toolcache.extractTar(source.codeqlTarPath);
|
||||||
|
toolsSource = ToolsSource.Local;
|
||||||
break;
|
break;
|
||||||
case "toolcache":
|
case "toolcache":
|
||||||
codeqlFolder = source.codeqlFolder;
|
codeqlFolder = source.codeqlFolder;
|
||||||
logger.debug(`CodeQL found in cache ${codeqlFolder}`);
|
logger.debug(`CodeQL found in cache ${codeqlFolder}`);
|
||||||
|
toolsSource = ToolsSource.Toolcache;
|
||||||
break;
|
break;
|
||||||
case "download": {
|
case "download": {
|
||||||
const result = await downloadCodeQL(
|
const result = await downloadCodeQL(
|
||||||
@@ -647,10 +667,12 @@ export async function setupCodeQLBundle(
|
|||||||
);
|
);
|
||||||
toolsVersion = result.toolsVersion;
|
toolsVersion = result.toolsVersion;
|
||||||
codeqlFolder = result.codeqlFolder;
|
codeqlFolder = result.codeqlFolder;
|
||||||
|
toolsDownloadDurationMs = result.toolsDownloadDurationMs;
|
||||||
|
toolsSource = ToolsSource.Download;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
util.assertNever(source);
|
util.assertNever(source);
|
||||||
}
|
}
|
||||||
return { codeqlFolder, toolsVersion };
|
return { codeqlFolder, toolsDownloadDurationMs, toolsSource, toolsVersion };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user