Compare commits

...

13 Commits

Author SHA1 Message Date
Henry Mercer
81bfc289f5 Merge pull request #989 from github/henrymercer/update-readme
Update README now build tracing is compatible with Windows 2022
2022-03-21 16:03:34 +00:00
Henry Mercer
6de8537e54 Update README now build tracing is compatible with Windows 2022 2022-03-21 15:31:51 +00:00
Henry Mercer
1d81ec489b Merge pull request #984 from github/update-supported-enterprise-server-versions
Update supported GitHub Enterprise Server versions.
2022-03-21 13:43:13 +00:00
Henry Mercer
c592f89989 Merge branch 'main' into update-supported-enterprise-server-versions 2022-03-21 13:12:12 +00:00
Henry Mercer
f71aeef4dc Merge pull request #988 from CommanderRoot/refactor/rm-deprecated-substr
refactor: replace deprecated String.prototype.substr()
2022-03-21 10:52:17 +00:00
Tobias Speicher
0a713019c3 refactor: replace deprecated String.prototype.substr()
.substr() is deprecated so we replace it with .slice() which works similarily but isn't deprecated
Signed-off-by: Tobias Speicher <rootcommander@gmail.com>
2022-03-20 17:08:43 +01:00
GitHub
243ebf6e35 Update supported GitHub Enterprise Server versions. 2022-03-18 00:09:57 +00:00
Chuan-kai Lin
3886398541 Merge pull request #987 from cklin/report-versions
Include CodeQL CLI and action versions in status reports
2022-03-17 10:46:34 -07:00
Chuan-kai Lin
f60bb5cc38 Include CodeQL CLI and action versions in status reports 2022-03-17 10:07:29 -07:00
Chuan-kai Lin
d0ee2b4276 Merge pull request #983 from github/mergeback/v1.1.5-to-main-88347664
Mergeback v1.1.5 refs/heads/v1 into main
2022-03-15 14:51:17 -07:00
github-actions[bot]
34905f691e Update checked-in dependencies 2022-03-15 19:57:13 +00:00
github-actions[bot]
ac7bd44c3b 1.1.6 2022-03-15 19:39:33 +00:00
github-actions[bot]
1457c164a9 Update changelog and version after v1.1.5 2022-03-15 19:39:31 +00:00
27 changed files with 145 additions and 35 deletions

View File

@@ -1,5 +1,9 @@
# CodeQL Action Changelog # CodeQL Action Changelog
## [UNRELEASED]
No user facing changes.
## 1.1.5 - 15 Mar 2022 ## 1.1.5 - 15 Mar 2022
- Update default CodeQL bundle version to 2.8.3. - Update default CodeQL bundle version to 2.8.3.

View File

@@ -39,8 +39,7 @@ on:
jobs: jobs:
CodeQL-Build: CodeQL-Build:
# If you're only analyzing JavaScript or Python, CodeQL runs on ubuntu-latest, windows-latest, and macos-latest. # CodeQL runs on ubuntu-latest, windows-latest, and macos-latest
# If you're analyzing C/C++, C#, Go, or Java, CodeQL runs on ubuntu-latest, windows-2019, and macos-latest.
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:

9
lib/actions-util.js generated
View File

@@ -30,6 +30,8 @@ const yaml = __importStar(require("js-yaml"));
const api = __importStar(require("./api-client")); const api = __importStar(require("./api-client"));
const sharedEnv = __importStar(require("./shared-environment")); const sharedEnv = __importStar(require("./shared-environment"));
const util_1 = require("./util"); const util_1 = require("./util");
// eslint-disable-next-line import/no-commonjs
const pkg = require("../package.json");
/** /**
* The utils in this module are meant to be run inside of the action only. * The utils in this module are meant to be run inside of the action only.
* Code paths from the runner should not enter this module. * Code paths from the runner should not enter this module.
@@ -500,6 +502,7 @@ async function createStatusReportBase(actionName, status, actionStartedAt, cause
core.exportVariable(sharedEnv.CODEQL_WORKFLOW_STARTED_AT, workflowStartedAt); core.exportVariable(sharedEnv.CODEQL_WORKFLOW_STARTED_AT, workflowStartedAt);
} }
const runnerOs = (0, util_1.getRequiredEnvParam)("RUNNER_OS"); const runnerOs = (0, util_1.getRequiredEnvParam)("RUNNER_OS");
const codeQlCliVersion = (0, util_1.getCachedCodeQlVersion)();
// If running locally then the GITHUB_ACTION_REF cannot be trusted as it may be for the previous action // If running locally then the GITHUB_ACTION_REF cannot be trusted as it may be for the previous action
// See https://github.com/actions/runner/issues/803 // See https://github.com/actions/runner/issues/803
const actionRef = isRunningLocalAction() const actionRef = isRunningLocalAction()
@@ -519,6 +522,7 @@ async function createStatusReportBase(actionName, status, actionStartedAt, cause
action_started_at: actionStartedAt.toISOString(), action_started_at: actionStartedAt.toISOString(),
status, status,
runner_os: runnerOs, runner_os: runnerOs,
action_version: pkg.version,
}; };
// Add optional parameters // Add optional parameters
if (cause) { if (cause) {
@@ -545,6 +549,9 @@ async function createStatusReportBase(actionName, status, actionStartedAt, cause
if (runnerOs === "Windows" || runnerOs === "macOS") { if (runnerOs === "Windows" || runnerOs === "macOS") {
statusReport.runner_os_release = os.release(); statusReport.runner_os_release = os.release();
} }
if (codeQlCliVersion !== undefined) {
statusReport.codeql_cli_version = codeQlCliVersion;
}
return statusReport; return statusReport;
} }
exports.createStatusReportBase = createStatusReportBase; exports.createStatusReportBase = createStatusReportBase;
@@ -666,7 +673,7 @@ async function isAnalyzingDefaultBranch() {
// Get the current ref and trim and refs/heads/ prefix // Get the current ref and trim and refs/heads/ prefix
let currentRef = await getRef(); let currentRef = await getRef();
currentRef = currentRef.startsWith("refs/heads/") currentRef = currentRef.startsWith("refs/heads/")
? currentRef.substr("refs/heads/".length) ? currentRef.slice("refs/heads/".length)
: currentRef; : currentRef;
const event = getWorkflowEvent(); const event = getWorkflowEvent();
const defaultBranch = (_a = event === null || event === void 0 ? void 0 : event.repository) === null || _a === void 0 ? void 0 : _a.default_branch; const defaultBranch = (_a = event === null || event === void 0 ? void 0 : event.repository) === null || _a === void 0 ? void 0 : _a.default_branch;

File diff suppressed because one or more lines are too long

4
lib/api-client.js generated
View File

@@ -81,8 +81,8 @@ let cachedGitHubVersion = undefined;
* @returns GitHub version * @returns GitHub version
*/ */
async function getGitHubVersionActionsOnly() { async function getGitHubVersionActionsOnly() {
if (!util.isActions) { if (!util.isActions()) {
throw new Error("This getGitHubVersion() function works only in an action"); throw new Error("getGitHubVersionActionsOnly() works only in an action");
} }
if (cachedGitHubVersion === undefined) { if (cachedGitHubVersion === undefined) {
cachedGitHubVersion = await util.getGitHubVersion(getApiDetails()); cachedGitHubVersion = await util.getGitHubVersion(getApiDetails());

View File

@@ -1 +1 @@
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B,uEAAyD;AACzD,6DAA+C;AAC/C,0EAAgD;AAEhD,iDAAkD;AAClD,6CAA+B;AAC/B,iCAAqE;AAErE,8CAA8C;AAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,IAAY,0BAGX;AAHD,WAAY,0BAA0B;IACpC,+FAAc,CAAA;IACd,+FAAc,CAAA;AAChB,CAAC,EAHW,0BAA0B,GAA1B,kCAA0B,KAA1B,kCAA0B,QAGrC;AAeM,MAAM,YAAY,GAAG,UAC1B,UAAoC,EACpC,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,EAAE;IAE9B,MAAM,IAAI,GACR,CAAC,aAAa,IAAI,UAAU,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC;IACpE,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,IAAI,eAAe,CACxB,WAAW,CAAC,iBAAiB,CAAC,IAAI,EAAE;QAClC,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;QAClC,SAAS,EAAE,UAAU,IAAA,cAAO,GAAE,IAAI,GAAG,CAAC,OAAO,EAAE;QAC/C,GAAG,EAAE,IAAA,2BAAe,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;KACzC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAdW,QAAA,YAAY,gBAcvB;AAEF,SAAS,SAAS,CAAC,SAAiB;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAE/B,uDAAuD;IACvD,0CAA0C;IAC1C,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,EAAE;QACtE,OAAO,wBAAwB,CAAC;KACjC;IAED,6BAA6B;IAC7B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,aAAa;IACpB,OAAO;QACL,IAAI,EAAE,IAAA,+BAAgB,EAAC,OAAO,CAAC;QAC/B,GAAG,EAAE,IAAA,0BAAmB,EAAC,mBAAmB,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,qFAAqF;AACrF,+CAA+C;AAC/C,SAAgB,mBAAmB;IACjC,OAAO,IAAA,oBAAY,EAAC,aAAa,EAAE,CAAC,CAAC;AACvC,CAAC;AAFD,kDAEC;AAED,IAAI,mBAAmB,GAA8B,SAAS,CAAC;AAE/D;;;;;;;GAOG;AACI,KAAK,UAAU,2BAA2B;IAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;KAC7E;IACD,IAAI,mBAAmB,KAAK,SAAS,EAAE;QACrC,mBAAmB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC;KACpE;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AARD,kEAQC"} {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B,uEAAyD;AACzD,6DAA+C;AAC/C,0EAAgD;AAEhD,iDAAkD;AAClD,6CAA+B;AAC/B,iCAAqE;AAErE,8CAA8C;AAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,IAAY,0BAGX;AAHD,WAAY,0BAA0B;IACpC,+FAAc,CAAA;IACd,+FAAc,CAAA;AAChB,CAAC,EAHW,0BAA0B,GAA1B,kCAA0B,KAA1B,kCAA0B,QAGrC;AAeM,MAAM,YAAY,GAAG,UAC1B,UAAoC,EACpC,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,EAAE;IAE9B,MAAM,IAAI,GACR,CAAC,aAAa,IAAI,UAAU,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC;IACpE,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,IAAI,eAAe,CACxB,WAAW,CAAC,iBAAiB,CAAC,IAAI,EAAE;QAClC,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;QAClC,SAAS,EAAE,UAAU,IAAA,cAAO,GAAE,IAAI,GAAG,CAAC,OAAO,EAAE;QAC/C,GAAG,EAAE,IAAA,2BAAe,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;KACzC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAdW,QAAA,YAAY,gBAcvB;AAEF,SAAS,SAAS,CAAC,SAAiB;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAE/B,uDAAuD;IACvD,0CAA0C;IAC1C,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,EAAE;QACtE,OAAO,wBAAwB,CAAC;KACjC;IAED,6BAA6B;IAC7B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,aAAa;IACpB,OAAO;QACL,IAAI,EAAE,IAAA,+BAAgB,EAAC,OAAO,CAAC;QAC/B,GAAG,EAAE,IAAA,0BAAmB,EAAC,mBAAmB,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,qFAAqF;AACrF,+CAA+C;AAC/C,SAAgB,mBAAmB;IACjC,OAAO,IAAA,oBAAY,EAAC,aAAa,EAAE,CAAC,CAAC;AACvC,CAAC;AAFD,kDAEC;AAED,IAAI,mBAAmB,GAA8B,SAAS,CAAC;AAE/D;;;;;;;GAOG;AACI,KAAK,UAAU,2BAA2B;IAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;KAC1E;IACD,IAAI,mBAAmB,KAAK,SAAS,EAAE;QACrC,mBAAmB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC;KACpE;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AARD,kEAQC"}

View File

@@ -1 +1 @@
{ "maximumVersion": "3.4", "minimumVersion": "3.1" } { "maximumVersion": "3.5", "minimumVersion": "3.1" }

39
lib/codeql.js generated
View File

@@ -196,6 +196,19 @@ async function getCodeQLBundleDownloadURL(apiDetails, variant, logger) {
} }
return `https://github.com/${CODEQL_DEFAULT_ACTION_REPOSITORY}/releases/download/${CODEQL_BUNDLE_VERSION}/${codeQLBundleName}`; return `https://github.com/${CODEQL_DEFAULT_ACTION_REPOSITORY}/releases/download/${CODEQL_BUNDLE_VERSION}/${codeQLBundleName}`;
} }
/**
* Set up CodeQL CLI access.
*
* @param codeqlURL
* @param apiDetails
* @param tempDir
* @param toolCacheDir
* @param variant
* @param logger
* @param checkVersion Whether to check that CodeQL CLI meets the minimum
* version requirement. Must be set to true outside tests.
* @returns
*/
async function setupCodeQL(codeqlURL, apiDetails, tempDir, toolCacheDir, variant, logger, checkVersion) { async function setupCodeQL(codeqlURL, apiDetails, tempDir, toolCacheDir, variant, logger, checkVersion) {
try { try {
// We use the special value of 'latest' to prioritize the version in the // We use the special value of 'latest' to prioritize the version in the
@@ -367,16 +380,26 @@ async function getCodeQLForTesting() {
return getCodeQLForCmd("codeql-for-testing", false); return getCodeQLForCmd("codeql-for-testing", false);
} }
exports.getCodeQLForTesting = getCodeQLForTesting; exports.getCodeQLForTesting = getCodeQLForTesting;
/**
* Return a CodeQL object for CodeQL CLI access.
*
* @param cmd Path to CodeQL CLI
* @param checkVersion Whether to check that CodeQL CLI meets the minimum
* version requirement. Must be set to true outside tests.
* @returns A new CodeQL object
*/
async function getCodeQLForCmd(cmd, checkVersion) { async function getCodeQLForCmd(cmd, checkVersion) {
let cachedVersion = undefined;
const codeql = { const codeql = {
getPath() { getPath() {
return cmd; return cmd;
}, },
async getVersion() { async getVersion() {
if (cachedVersion === undefined) let result = util.getCachedCodeQlVersion();
cachedVersion = runTool(cmd, ["version", "--format=terse"]); if (result === undefined) {
return await cachedVersion; result = await runTool(cmd, ["version", "--format=terse"]);
util.cacheCodeQlVersion(result);
}
return result;
}, },
async printVersion() { async printVersion() {
await runTool(cmd, ["version", "--format=json"]); await runTool(cmd, ["version", "--format=json"]);
@@ -672,6 +695,14 @@ async function getCodeQLForCmd(cmd, checkVersion) {
await new toolrunner.ToolRunner(cmd, args).exec(); await new toolrunner.ToolRunner(cmd, args).exec();
}, },
}; };
// To ensure that status reports include the CodeQL CLI version whereever
// possbile, we want to call getVersion(), which populates the version value
// used by status reporting, at the earliest opportunity. But invoking
// getVersion() directly here breaks tests that only pretend to create a
// CodeQL object. So instead we rely on the assumption that all non-test
// callers would set checkVersion to true, and util.codeQlVersionAbove()
// would call getVersion(), so the CLI version would be cached as soon as the
// CodeQL object is created.
if (checkVersion && if (checkVersion &&
!(await util.codeQlVersionAbove(codeql, CODEQL_MINIMUM_VERSION))) { !(await util.codeQlVersionAbove(codeql, CODEQL_MINIMUM_VERSION))) {
throw new Error(`Expected a CodeQL CLI with version at least ${CODEQL_MINIMUM_VERSION} but got version ${await codeql.getVersion()}`); throw new Error(`Expected a CodeQL CLI with version at least ${CODEQL_MINIMUM_VERSION} but got version ${await codeql.getVersion()}`);

File diff suppressed because one or more lines are too long

2
lib/config-utils.js generated
View File

@@ -435,7 +435,7 @@ async function addQueriesAndPacksFromWorkflow(codeQL, queriesInput, languages, r
// should instead be added in addition // should instead be added in addition
function shouldAddConfigFileQueries(queriesInput) { function shouldAddConfigFileQueries(queriesInput) {
if (queriesInput) { if (queriesInput) {
return queriesInput.trimStart().substr(0, 1) === "+"; return queriesInput.trimStart().slice(0, 1) === "+";
} }
return true; return true;
} }

File diff suppressed because one or more lines are too long

2
lib/init-action.js generated
View File

@@ -49,7 +49,7 @@ async function sendSuccessStatusReport(startedAt, config, toolsVersion) {
} }
if (queriesInput !== undefined) { if (queriesInput !== undefined) {
queriesInput = queriesInput.startsWith("+") queriesInput = queriesInput.startsWith("+")
? queriesInput.substr(1) ? queriesInput.slice(1)
: queriesInput; : queriesInput;
queries.push(...queriesInput.split(",")); queries.push(...queriesInput.split(","));
} }

File diff suppressed because one or more lines are too long

14
lib/util.js generated
View File

@@ -22,7 +22,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod }; return (mod && mod.__esModule) ? mod : { "default": mod };
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.getMlPoweredJsQueriesStatus = exports.ML_POWERED_JS_QUERIES_PACK = exports.isGoodVersion = exports.delay = exports.bundleDb = exports.codeQlVersionAbove = exports.isGitHubGhesVersionBelow = exports.isHTTPError = exports.UserError = exports.HTTPError = exports.getRequiredEnvParam = exports.isActions = exports.getMode = exports.enrichEnvironment = exports.initializeEnvironment = exports.Mode = exports.assertNever = exports.getGitHubAuth = exports.apiVersionInRange = exports.DisallowedAPIVersionReason = exports.checkGitHubVersionInRange = exports.getGitHubVersion = exports.GitHubVariant = exports.parseGitHubUrl = exports.getCodeQLDatabasePath = exports.getThreadsFlag = exports.getThreadsFlagValue = exports.getAddSnippetsFlag = exports.getMemoryFlag = exports.getMemoryFlagValue = exports.withTmpDir = exports.getToolNames = exports.getExtraOptionsEnvParam = exports.DEFAULT_DEBUG_DATABASE_NAME = exports.DEFAULT_DEBUG_ARTIFACT_NAME = exports.GITHUB_DOTCOM_URL = void 0; exports.getMlPoweredJsQueriesStatus = exports.ML_POWERED_JS_QUERIES_PACK = exports.isGoodVersion = exports.delay = exports.bundleDb = exports.codeQlVersionAbove = exports.getCachedCodeQlVersion = exports.cacheCodeQlVersion = exports.isGitHubGhesVersionBelow = exports.isHTTPError = exports.UserError = exports.HTTPError = exports.getRequiredEnvParam = exports.isActions = exports.getMode = exports.enrichEnvironment = exports.initializeEnvironment = exports.Mode = exports.assertNever = exports.getGitHubAuth = exports.apiVersionInRange = exports.DisallowedAPIVersionReason = exports.checkGitHubVersionInRange = exports.getGitHubVersion = exports.GitHubVariant = exports.parseGitHubUrl = exports.getCodeQLDatabasePath = exports.getThreadsFlag = exports.getThreadsFlagValue = exports.getAddSnippetsFlag = exports.getMemoryFlag = exports.getMemoryFlagValue = exports.withTmpDir = exports.getToolNames = exports.getExtraOptionsEnvParam = exports.DEFAULT_DEBUG_DATABASE_NAME = exports.DEFAULT_DEBUG_ARTIFACT_NAME = exports.GITHUB_DOTCOM_URL = void 0;
const fs = __importStar(require("fs")); const fs = __importStar(require("fs"));
const os = __importStar(require("os")); const os = __importStar(require("os"));
const path = __importStar(require("path")); const path = __importStar(require("path"));
@@ -505,6 +505,18 @@ function isGitHubGhesVersionBelow(gitHubVersion, expectedVersion) {
semver.lt(gitHubVersion.version, expectedVersion)); semver.lt(gitHubVersion.version, expectedVersion));
} }
exports.isGitHubGhesVersionBelow = isGitHubGhesVersionBelow; exports.isGitHubGhesVersionBelow = isGitHubGhesVersionBelow;
let cachedCodeQlVersion = undefined;
function cacheCodeQlVersion(version) {
if (cachedCodeQlVersion !== undefined) {
throw new Error("cacheCodeQlVersion() should be called only once");
}
cachedCodeQlVersion = version;
}
exports.cacheCodeQlVersion = cacheCodeQlVersion;
function getCachedCodeQlVersion() {
return cachedCodeQlVersion;
}
exports.getCachedCodeQlVersion = getCachedCodeQlVersion;
async function codeQlVersionAbove(codeql, requiredVersion) { async function codeQlVersionAbove(codeql, requiredVersion) {
return semver.gte(await codeql.getVersion(), requiredVersion); return semver.gte(await codeql.getVersion(), requiredVersion);
} }

File diff suppressed because one or more lines are too long

2
node_modules/.package-lock.json generated vendored
View File

@@ -1,6 +1,6 @@
{ {
"name": "codeql", "name": "codeql",
"version": "1.1.5", "version": "1.1.6",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "codeql", "name": "codeql",
"version": "1.1.5", "version": "1.1.6",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "codeql", "name": "codeql",
"version": "1.1.5", "version": "1.1.6",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/artifact": "^1.0.0", "@actions/artifact": "^1.0.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "codeql", "name": "codeql",
"version": "1.1.5", "version": "1.1.6",
"private": true, "private": true,
"description": "CodeQL action", "description": "CodeQL action",
"scripts": { "scripts": {

View File

@@ -1,6 +1,6 @@
{ {
"name": "codeql-runner", "name": "codeql-runner",
"version": "1.1.5", "version": "1.1.6",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

View File

@@ -1,6 +1,6 @@
{ {
"name": "codeql-runner", "name": "codeql-runner",
"version": "1.1.5", "version": "1.1.6",
"private": true, "private": true,
"description": "CodeQL runner", "description": "CodeQL runner",
"scripts": { "scripts": {

View File

@@ -10,6 +10,7 @@ import * as yaml from "js-yaml";
import * as api from "./api-client"; import * as api from "./api-client";
import * as sharedEnv from "./shared-environment"; import * as sharedEnv from "./shared-environment";
import { import {
getCachedCodeQlVersion,
getRequiredEnvParam, getRequiredEnvParam,
GITHUB_DOTCOM_URL, GITHUB_DOTCOM_URL,
isGitHubGhesVersionBelow, isGitHubGhesVersionBelow,
@@ -17,6 +18,9 @@ import {
UserError, UserError,
} from "./util"; } from "./util";
// eslint-disable-next-line import/no-commonjs
const pkg = require("../package.json");
/** /**
* The utils in this module are meant to be run inside of the action only. * The utils in this module are meant to be run inside of the action only.
* Code paths from the runner should not enter this module. * Code paths from the runner should not enter this module.
@@ -604,6 +608,10 @@ export interface StatusReportBase {
runner_arch?: string; runner_arch?: string;
/** Action runner operating system release (x.y.z from os.release()). */ /** Action runner operating system release (x.y.z from os.release()). */
runner_os_release?: string; runner_os_release?: string;
/** Action version (x.y.z from package.json). */
action_version: string;
/** CodeQL CLI version (x.y.z from the CLI). */
codeql_cli_version?: string;
} }
export function getActionsStatus( export function getActionsStatus(
@@ -652,6 +660,7 @@ export async function createStatusReportBase(
); );
} }
const runnerOs = getRequiredEnvParam("RUNNER_OS"); const runnerOs = getRequiredEnvParam("RUNNER_OS");
const codeQlCliVersion = getCachedCodeQlVersion();
// If running locally then the GITHUB_ACTION_REF cannot be trusted as it may be for the previous action // If running locally then the GITHUB_ACTION_REF cannot be trusted as it may be for the previous action
// See https://github.com/actions/runner/issues/803 // See https://github.com/actions/runner/issues/803
@@ -673,6 +682,7 @@ export async function createStatusReportBase(
action_started_at: actionStartedAt.toISOString(), action_started_at: actionStartedAt.toISOString(),
status, status,
runner_os: runnerOs, runner_os: runnerOs,
action_version: pkg.version,
}; };
// Add optional parameters // Add optional parameters
@@ -702,6 +712,9 @@ export async function createStatusReportBase(
if (runnerOs === "Windows" || runnerOs === "macOS") { if (runnerOs === "Windows" || runnerOs === "macOS") {
statusReport.runner_os_release = os.release(); statusReport.runner_os_release = os.release();
} }
if (codeQlCliVersion !== undefined) {
statusReport.codeql_cli_version = codeQlCliVersion;
}
return statusReport; return statusReport;
} }
@@ -845,7 +858,7 @@ export async function isAnalyzingDefaultBranch(): Promise<boolean> {
// Get the current ref and trim and refs/heads/ prefix // Get the current ref and trim and refs/heads/ prefix
let currentRef = await getRef(); let currentRef = await getRef();
currentRef = currentRef.startsWith("refs/heads/") currentRef = currentRef.startsWith("refs/heads/")
? currentRef.substr("refs/heads/".length) ? currentRef.slice("refs/heads/".length)
: currentRef; : currentRef;
const event = getWorkflowEvent(); const event = getWorkflowEvent();

View File

@@ -84,8 +84,8 @@ let cachedGitHubVersion: GitHubVersion | undefined = undefined;
* @returns GitHub version * @returns GitHub version
*/ */
export async function getGitHubVersionActionsOnly(): Promise<GitHubVersion> { export async function getGitHubVersionActionsOnly(): Promise<GitHubVersion> {
if (!util.isActions) { if (!util.isActions()) {
throw new Error("This getGitHubVersion() function works only in an action"); throw new Error("getGitHubVersionActionsOnly() works only in an action");
} }
if (cachedGitHubVersion === undefined) { if (cachedGitHubVersion === undefined) {
cachedGitHubVersion = await util.getGitHubVersion(getApiDetails()); cachedGitHubVersion = await util.getGitHubVersion(getApiDetails());

View File

@@ -1 +1 @@
{"maximumVersion": "3.4", "minimumVersion": "3.1"} {"maximumVersion": "3.5", "minimumVersion": "3.1"}

View File

@@ -367,6 +367,19 @@ async function getCodeQLBundleDownloadURL(
return `https://github.com/${CODEQL_DEFAULT_ACTION_REPOSITORY}/releases/download/${CODEQL_BUNDLE_VERSION}/${codeQLBundleName}`; return `https://github.com/${CODEQL_DEFAULT_ACTION_REPOSITORY}/releases/download/${CODEQL_BUNDLE_VERSION}/${codeQLBundleName}`;
} }
/**
* Set up CodeQL CLI access.
*
* @param codeqlURL
* @param apiDetails
* @param tempDir
* @param toolCacheDir
* @param variant
* @param logger
* @param checkVersion Whether to check that CodeQL CLI meets the minimum
* version requirement. Must be set to true outside tests.
* @returns
*/
export async function setupCodeQL( export async function setupCodeQL(
codeqlURL: string | undefined, codeqlURL: string | undefined,
apiDetails: api.GitHubApiDetails, apiDetails: api.GitHubApiDetails,
@@ -611,19 +624,29 @@ export async function getCodeQLForTesting(): Promise<CodeQL> {
return getCodeQLForCmd("codeql-for-testing", false); return getCodeQLForCmd("codeql-for-testing", false);
} }
/**
* Return a CodeQL object for CodeQL CLI access.
*
* @param cmd Path to CodeQL CLI
* @param checkVersion Whether to check that CodeQL CLI meets the minimum
* version requirement. Must be set to true outside tests.
* @returns A new CodeQL object
*/
async function getCodeQLForCmd( async function getCodeQLForCmd(
cmd: string, cmd: string,
checkVersion: boolean checkVersion: boolean
): Promise<CodeQL> { ): Promise<CodeQL> {
let cachedVersion: undefined | Promise<string> = undefined;
const codeql = { const codeql = {
getPath() { getPath() {
return cmd; return cmd;
}, },
async getVersion() { async getVersion() {
if (cachedVersion === undefined) let result = util.getCachedCodeQlVersion();
cachedVersion = runTool(cmd, ["version", "--format=terse"]); if (result === undefined) {
return await cachedVersion; result = await runTool(cmd, ["version", "--format=terse"]);
util.cacheCodeQlVersion(result);
}
return result;
}, },
async printVersion() { async printVersion() {
await runTool(cmd, ["version", "--format=json"]); await runTool(cmd, ["version", "--format=json"]);
@@ -997,6 +1020,14 @@ async function getCodeQLForCmd(
await new toolrunner.ToolRunner(cmd, args).exec(); await new toolrunner.ToolRunner(cmd, args).exec();
}, },
}; };
// To ensure that status reports include the CodeQL CLI version whereever
// possbile, we want to call getVersion(), which populates the version value
// used by status reporting, at the earliest opportunity. But invoking
// getVersion() directly here breaks tests that only pretend to create a
// CodeQL object. So instead we rely on the assumption that all non-test
// callers would set checkVersion to true, and util.codeQlVersionAbove()
// would call getVersion(), so the CLI version would be cached as soon as the
// CodeQL object is created.
if ( if (
checkVersion && checkVersion &&
!(await util.codeQlVersionAbove(codeql, CODEQL_MINIMUM_VERSION)) !(await util.codeQlVersionAbove(codeql, CODEQL_MINIMUM_VERSION))

View File

@@ -849,7 +849,7 @@ async function addQueriesAndPacksFromWorkflow(
// should instead be added in addition // should instead be added in addition
function shouldAddConfigFileQueries(queriesInput: string | undefined): boolean { function shouldAddConfigFileQueries(queriesInput: string | undefined): boolean {
if (queriesInput) { if (queriesInput) {
return queriesInput.trimStart().substr(0, 1) === "+"; return queriesInput.trimStart().slice(0, 1) === "+";
} }
return true; return true;

View File

@@ -99,7 +99,7 @@ async function sendSuccessStatusReport(
} }
if (queriesInput !== undefined) { if (queriesInput !== undefined) {
queriesInput = queriesInput.startsWith("+") queriesInput = queriesInput.startsWith("+")
? queriesInput.substr(1) ? queriesInput.slice(1)
: queriesInput; : queriesInput;
queries.push(...queriesInput.split(",")); queries.push(...queriesInput.split(","));
} }

View File

@@ -604,6 +604,19 @@ export function isGitHubGhesVersionBelow(
); );
} }
let cachedCodeQlVersion: undefined | string = undefined;
export function cacheCodeQlVersion(version: string): void {
if (cachedCodeQlVersion !== undefined) {
throw new Error("cacheCodeQlVersion() should be called only once");
}
cachedCodeQlVersion = version;
}
export function getCachedCodeQlVersion(): undefined | string {
return cachedCodeQlVersion;
}
export async function codeQlVersionAbove( export async function codeQlVersionAbove(
codeql: CodeQL, codeql: CodeQL,
requiredVersion: string requiredVersion: string