diff --git a/lib/autobuild.js b/lib/autobuild.js index e97669fc0..f851a4007 100644 --- a/lib/autobuild.js +++ b/lib/autobuild.js @@ -10,6 +10,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const core = __importStar(require("@actions/core")); const exec = __importStar(require("@actions/exec")); const path = __importStar(require("path")); +const codeql_1 = require("./codeql"); const sharedEnv = __importStar(require("./shared-environment")); const util = __importStar(require("./util")); async function run() { @@ -33,10 +34,9 @@ async function run() { core.warning(`We will only automatically build ${language} code. If you wish to scan ${autobuildLanguages.slice(1).join(' and ')}, you must replace this block with custom build steps.`); } core.startGroup(`Attempting to automatically build ${language} code`); - // TODO: share config accross actions better via env variables - const codeqlCmd = util.getRequiredEnvParam(sharedEnv.CODEQL_ACTION_CMD); + const codeQL = codeql_1.getCodeQL(); const cmdName = process.platform === 'win32' ? 'autobuild.cmd' : 'autobuild.sh'; - const autobuildCmd = path.join(path.dirname(codeqlCmd), language, 'tools', cmdName); + const autobuildCmd = path.join(codeQL.getDir(), language, 'tools', cmdName); // Update JAVA_TOOL_OPTIONS to contain '-Dhttp.keepAlive=false' // This is because of an issue with Azure pipelines timing out connections after 4 minutes // and Maven not properly handling closed connections diff --git a/lib/autobuild.js.map b/lib/autobuild.js.map index 4b29ea857..a22fcdf44 100644 --- a/lib/autobuild.js.map +++ b/lib/autobuild.js.map @@ -1 +1 @@ -{"version":3,"file":"autobuild.js","sourceRoot":"","sources":["../src/autobuild.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAsC;AACtC,oDAAsC;AACtC,2CAA6B;AAE7B,gEAAkD;AAClD,6CAA+B;AAE/B,KAAK,UAAU,GAAG;;IAChB,IAAI;QACF,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE;YACzF,OAAO;SACR;QAED,0CAA0C;QAC1C,mFAAmF;QACnF,oFAAoF;QACpF,4EAA4E;QAC5E,MAAM,kBAAkB,GAAG,OAAA,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,8BAA8B,CAAC,0CAAE,KAAK,CAAC,GAAG,MAAK,EAAE,CAAC;QACnG,MAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;YAC7E,OAAO;SACR;QAED,IAAI,CAAC,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;QAE7D,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,IAAI,CAAC,OAAO,CAAC,oCAAoC,QAAQ,8BAA8B,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC;SAC3L;QAED,IAAI,CAAC,UAAU,CAAC,qCAAqC,QAAQ,OAAO,CAAC,CAAC;QACtE,8DAA8D;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAExE,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;QAChF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAGpF,+DAA+D;QAC/D,0FAA0F;QAC1F,qDAAqD;QACrD,8EAA8E;QAC9E,gHAAgH;QAChH,IAAI,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,wBAAwB,EAAE,+BAA+B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE1I,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;KAEjB;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,CAAC,SAAS,CAAC,kIAAkI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QACnK,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;KACR;IAED,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACd,IAAI,CAAC,SAAS,CAAC,4BAA4B,GAAG,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"autobuild.js","sourceRoot":"","sources":["../src/autobuild.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAsC;AACtC,oDAAsC;AACtC,2CAA6B;AAE7B,qCAAqC;AACrC,gEAAkD;AAClD,6CAA+B;AAE/B,KAAK,UAAU,GAAG;;IAChB,IAAI;QACF,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE;YACzF,OAAO;SACR;QAED,0CAA0C;QAC1C,mFAAmF;QACnF,oFAAoF;QACpF,4EAA4E;QAC5E,MAAM,kBAAkB,GAAG,OAAA,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,8BAA8B,CAAC,0CAAE,KAAK,CAAC,GAAG,MAAK,EAAE,CAAC;QACnG,MAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;YAC7E,OAAO;SACR;QAED,IAAI,CAAC,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;QAE7D,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,IAAI,CAAC,OAAO,CAAC,oCAAoC,QAAQ,8BAA8B,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC;SAC3L;QAED,IAAI,CAAC,UAAU,CAAC,qCAAqC,QAAQ,OAAO,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,kBAAS,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;QAChF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE5E,+DAA+D;QAC/D,0FAA0F;QAC1F,qDAAqD;QACrD,8EAA8E;QAC9E,gHAAgH;QAChH,IAAI,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,wBAAwB,EAAE,+BAA+B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE1I,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;KAEjB;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,CAAC,SAAS,CAAC,kIAAkI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QACnK,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;KACR;IAED,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACd,IAAI,CAAC,SAAS,CAAC,4BAA4B,GAAG,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/lib/codeql.js b/lib/codeql.js new file mode 100644 index 000000000..ed41cc853 --- /dev/null +++ b/lib/codeql.js @@ -0,0 +1,172 @@ +"use strict"; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const core = __importStar(require("@actions/core")); +const exec = __importStar(require("@actions/exec")); +const toolcache = __importStar(require("@actions/tool-cache")); +const fs = __importStar(require("fs")); +const path = __importStar(require("path")); +const semver = __importStar(require("semver")); +const util = __importStar(require("./util")); +/** + * Environment variable used to store the location of the CodeQL CLI executable. + * Value is set by setupCodeQL and read by getCodeQL. + */ +const CODEQL_ACTION_CMD = "CODEQL_ACTION_CMD"; +async function setupCodeQL() { + try { + const codeqlURL = core.getInput('tools', { required: true }); + const codeqlURLVersion = getCodeQLURLVersion(codeqlURL); + let codeqlFolder = toolcache.find('CodeQL', codeqlURLVersion); + if (codeqlFolder) { + core.debug(`CodeQL found in cache ${codeqlFolder}`); + } + else { + const codeqlPath = await toolcache.downloadTool(codeqlURL); + const codeqlExtracted = await toolcache.extractTar(codeqlPath); + codeqlFolder = await toolcache.cacheDir(codeqlExtracted, 'CodeQL', codeqlURLVersion); + } + let codeqlCmd = path.join(codeqlFolder, 'codeql', 'codeql'); + if (process.platform === 'win32') { + codeqlCmd += ".exe"; + } + else if (process.platform !== 'linux' && process.platform !== 'darwin') { + throw new Error("Unsupported plaform: " + process.platform); + } + core.exportVariable(CODEQL_ACTION_CMD, codeqlCmd); + return getCodeQLForCmd(codeqlCmd); + } + catch (e) { + core.error(e); + throw new Error("Unable to download and extract CodeQL CLI"); + } +} +exports.setupCodeQL = setupCodeQL; +function getCodeQLURLVersion(url) { + const match = url.match(/\/codeql-bundle-(.*)\//); + if (match === null || match.length < 2) { + throw new Error(`Malformed tools url: ${url}. Version could not be inferred`); + } + let version = match[1]; + if (!semver.valid(version)) { + core.debug(`Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.`); + version = '0.0.0-' + version; + } + const s = semver.clean(version); + if (!s) { + throw new Error(`Malformed tools url ${url}. Version should be in SemVer format but have ${version} instead`); + } + return s; +} +exports.getCodeQLURLVersion = getCodeQLURLVersion; +function getCodeQL() { + const codeqlCmd = util.getRequiredEnvParam(CODEQL_ACTION_CMD); + return getCodeQLForCmd(codeqlCmd); +} +exports.getCodeQL = getCodeQL; +function getCodeQLForCmd(cmd) { + return { + getDir: function () { + return path.dirname(cmd); + }, + printVersion: async function () { + await exec.exec(cmd, [ + 'version', + '--format=json' + ]); + }, + getTracerEnv: async function (database, compilerSpec) { + let envFile = path.resolve(database, 'working', 'env.tmp'); + const compilerSpecArg = compilerSpec ? "--compiler-spec=" + compilerSpec : []; + await exec.exec(cmd, [ + 'database', + 'trace-command', + database, + ...compilerSpecArg, + process.execPath, + path.resolve(__dirname, 'tracer-env.js'), + envFile + ]); + return JSON.parse(fs.readFileSync(envFile, 'utf-8')); + }, + databaseInit: async function (database, language, sourceRoot) { + await exec.exec(cmd, [ + 'database', + 'init', + database, + '--language=' + language, + '--source-root=' + sourceRoot, + ]); + }, + extractScannedLanguage: async function (database, language) { + // Get extractor location + let extractorPath = ''; + await exec.exec(cmd, [ + 'resolve', + 'extractor', + '--format=json', + '--language=' + language + ], { + silent: true, + listeners: { + stdout: (data) => { extractorPath += data.toString(); }, + stderr: (data) => { process.stderr.write(data); } + } + }); + // Set trace command + const ext = process.platform === 'win32' ? '.cmd' : '.sh'; + const traceCommand = path.resolve(JSON.parse(extractorPath), 'tools', 'autobuild' + ext); + // Run trace command + await exec.exec(cmd, [ + 'database', + 'trace-command', + path.join(database, language), + '--', + traceCommand + ]); + }, + finalizeDatabase: async function (database, language) { + await exec.exec(cmd, [ + 'database', + 'finalize', + path.join(database, language) + ]); + }, + resolveQueries: async function (queries) { + let output = ''; + await exec.exec(cmd, [ + 'resolve', + 'queries', + ...queries, + '--format=bylanguage' + ], { + listeners: { + stdout: (data) => { + output += data.toString(); + } + } + }); + return JSON.parse(output); + }, + databaseAnalyze: async function (database, sarifFile, querySuite) { + await exec.exec(cmd, [ + 'database', + 'analyze', + util.getMemoryFlag(), + util.getThreadsFlag(), + database, + '--format=sarif-latest', + '--output=' + sarifFile, + '--no-sarif-add-snippets', + querySuite + ]); + } + }; +} +//# sourceMappingURL=codeql.js.map \ No newline at end of file diff --git a/lib/codeql.js.map b/lib/codeql.js.map new file mode 100644 index 000000000..c540e7a8d --- /dev/null +++ b/lib/codeql.js.map @@ -0,0 +1 @@ +{"version":3,"file":"codeql.js","sourceRoot":"","sources":["../src/codeql.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/codeql.test.js b/lib/codeql.test.js new file mode 100644 index 000000000..4dd5923ce --- /dev/null +++ b/lib/codeql.test.js @@ -0,0 +1,60 @@ +"use strict"; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const toolcache = __importStar(require("@actions/tool-cache")); +const ava_1 = __importDefault(require("ava")); +const nock_1 = __importDefault(require("nock")); +const path = __importStar(require("path")); +const codeql = __importStar(require("./codeql")); +const testing_utils_1 = require("./testing-utils"); +const util = __importStar(require("./util")); +testing_utils_1.silenceDebugOutput(ava_1.default); +ava_1.default('download codeql bundle cache', async (t) => { + await util.withTmpDir(async (tmpDir) => { + process.env['GITHUB_WORKSPACE'] = tmpDir; + process.env['RUNNER_TEMP'] = path.join(tmpDir, 'temp'); + process.env['RUNNER_TOOL_CACHE'] = path.join(tmpDir, 'cache'); + const versions = ['20200601', '20200610']; + for (let i = 0; i < versions.length; i++) { + const version = versions[i]; + nock_1.default('https://example.com') + .get(`/download/codeql-bundle-${version}/codeql-bundle.tar.gz`) + .replyWithFile(200, path.join(__dirname, `/../src/testdata/codeql-bundle.tar.gz`)); + process.env['INPUT_TOOLS'] = `https://example.com/download/codeql-bundle-${version}/codeql-bundle.tar.gz`; + await codeql.setupCodeQL(); + t.assert(toolcache.find('CodeQL', `0.0.0-${version}`)); + } + const cachedVersions = toolcache.findAllVersions('CodeQL'); + t.is(cachedVersions.length, 2); + }); +}); +ava_1.default('parse codeql bundle url version', t => { + const tests = { + '20200601': '0.0.0-20200601', + '20200601.0': '0.0.0-20200601.0', + '20200601.0.0': '20200601.0.0', + '1.2.3': '1.2.3', + '1.2.3-alpha': '1.2.3-alpha', + '1.2.3-beta.1': '1.2.3-beta.1', + }; + for (const [version, expectedVersion] of Object.entries(tests)) { + const url = `https://github.com/.../codeql-bundle-${version}/...`; + try { + const parsedVersion = codeql.getCodeQLURLVersion(url); + t.deepEqual(parsedVersion, expectedVersion); + } + catch (e) { + t.fail(e.message); + } + } +}); +//# sourceMappingURL=codeql.test.js.map \ No newline at end of file diff --git a/lib/codeql.test.js.map b/lib/codeql.test.js.map new file mode 100644 index 000000000..6555525b4 --- /dev/null +++ b/lib/codeql.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"codeql.test.js","sourceRoot":"","sources":["../src/codeql.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAAiD;AACjD,8CAAuB;AACvB,gDAAwB;AACxB,2CAA6B;AAE7B,iDAAmC;AACnC,mDAAmD;AACnD,6CAA+B;AAE/B,kCAAkB,CAAC,aAAI,CAAC,CAAC;AAEzB,aAAI,CAAC,8BAA8B,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAE7C,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;QAEnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC;QAEzC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9D,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAE5B,cAAI,CAAC,qBAAqB,CAAC;iBACxB,GAAG,CAAC,2BAA2B,OAAO,uBAAuB,CAAC;iBAC9D,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uCAAuC,CAAC,CAAC,CAAC;YAGrF,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,8CAA8C,OAAO,uBAAuB,CAAC;YAE1G,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YAE3B,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC;SACxD;QAED,MAAM,cAAc,GAAG,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAE3D,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,iCAAiC,EAAE,CAAC,CAAC,EAAE;IAE1C,MAAM,KAAK,GAAG;QACZ,UAAU,EAAE,gBAAgB;QAC5B,YAAY,EAAE,kBAAkB;QAChC,cAAc,EAAE,cAAc;QAC9B,OAAO,EAAE,OAAO;QAChB,aAAa,EAAE,aAAa;QAC5B,cAAc,EAAE,cAAc;KAC/B,CAAC;IAEF,KAAK,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAC9D,MAAM,GAAG,GAAG,wCAAwC,OAAO,MAAM,CAAC;QAElE,IAAI;YACF,MAAM,aAAa,GAAG,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;SAC7C;QAAC,OAAO,CAAC,EAAE;YACV,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SACnB;KACF;AACH,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/lib/finalize-db.js b/lib/finalize-db.js index 51f979450..f7264d64b 100644 --- a/lib/finalize-db.js +++ b/lib/finalize-db.js @@ -8,10 +8,10 @@ var __importStar = (this && this.__importStar) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const core = __importStar(require("@actions/core")); -const exec = __importStar(require("@actions/exec")); const io = __importStar(require("@actions/io")); const fs = __importStar(require("fs")); const path = __importStar(require("path")); +const codeql_1 = require("./codeql"); const configUtils = __importStar(require("./config-utils")); const externalQueries = __importStar(require("./external-queries")); const sharedEnv = __importStar(require("./shared-environment")); @@ -36,57 +36,30 @@ function queryIsDisabled(language, query) { return (DISABLED_BUILTIN_QUERIES[language] || []) .some(disabledQuery => query.endsWith(disabledQuery)); } -async function createdDBForScannedLanguages(codeqlCmd, databaseFolder) { +async function createdDBForScannedLanguages(databaseFolder) { const scannedLanguages = process.env[sharedEnv.CODEQL_ACTION_SCANNED_LANGUAGES]; if (scannedLanguages) { + const codeql = codeql_1.getCodeQL(); for (const language of scannedLanguages.split(',')) { core.startGroup('Extracting ' + language); - // Get extractor location - let extractorPath = ''; - await exec.exec(codeqlCmd, ['resolve', 'extractor', '--format=json', '--language=' + language], { - silent: true, - listeners: { - stdout: (data) => { extractorPath += data.toString(); }, - stderr: (data) => { process.stderr.write(data); } - } - }); - // Set trace command - const ext = process.platform === 'win32' ? '.cmd' : '.sh'; - const traceCommand = path.resolve(JSON.parse(extractorPath), 'tools', 'autobuild' + ext); - // Run trace command - await exec.exec(codeqlCmd, ['database', 'trace-command', path.join(databaseFolder, language), '--', traceCommand]); + await codeql.extractScannedLanguage(databaseFolder, language); core.endGroup(); } } } -async function finalizeDatabaseCreation(codeqlCmd, databaseFolder) { - await createdDBForScannedLanguages(codeqlCmd, databaseFolder); +async function finalizeDatabaseCreation(databaseFolder) { + await createdDBForScannedLanguages(databaseFolder); const languages = process.env[sharedEnv.CODEQL_ACTION_LANGUAGES] || ''; + const codeql = codeql_1.getCodeQL(); for (const language of languages.split(',')) { core.startGroup('Finalizing ' + language); - await exec.exec(codeqlCmd, ['database', 'finalize', path.join(databaseFolder, language)]); + await codeql.finalizeDatabase(databaseFolder, language); core.endGroup(); } } -async function runResolveQueries(codeqlCmd, queries) { - let output = ''; - const options = { - listeners: { - stdout: (data) => { - output += data.toString(); - } - } - }; - await exec.exec(codeqlCmd, [ - 'resolve', - 'queries', - ...queries, - '--format=bylanguage' - ], options); - return JSON.parse(output); -} -async function resolveQueryLanguages(codeqlCmd, config) { +async function resolveQueryLanguages(config) { let res = new Map(); + const codeql = codeql_1.getCodeQL(); if (!config.disableDefaultQueries || config.additionalSuites.length !== 0) { const suites = []; for (const language of await util.getLanguages()) { @@ -97,7 +70,7 @@ async function resolveQueryLanguages(codeqlCmd, config) { suites.push(language + '-' + additionalSuite + '.qls'); } } - const resolveQueriesOutputObject = await runResolveQueries(codeqlCmd, suites); + const resolveQueriesOutputObject = await codeql.resolveQueries(suites); for (const [language, queries] of Object.entries(resolveQueriesOutputObject.byLanguage)) { if (res[language] === undefined) { res[language] = []; @@ -106,7 +79,7 @@ async function resolveQueryLanguages(codeqlCmd, config) { } } if (config.additionalQueries.length !== 0) { - const resolveQueriesOutputObject = await runResolveQueries(codeqlCmd, config.additionalQueries); + const resolveQueriesOutputObject = await codeql.resolveQueries(config.additionalQueries); for (const [language, queries] of Object.entries(resolveQueriesOutputObject.byLanguage)) { if (res[language] === undefined) { res[language] = []; @@ -127,8 +100,9 @@ async function resolveQueryLanguages(codeqlCmd, config) { return res; } // Runs queries and creates sarif files in the given folder -async function runQueries(codeqlCmd, databaseFolder, sarifFolder, config) { - const queriesPerLanguage = await resolveQueryLanguages(codeqlCmd, config); +async function runQueries(databaseFolder, sarifFolder, config) { + const queriesPerLanguage = await resolveQueryLanguages(config); + const codeql = codeql_1.getCodeQL(); for (let database of fs.readdirSync(databaseFolder)) { core.startGroup('Analyzing ' + database); const queries = queriesPerLanguage[database] || []; @@ -142,17 +116,7 @@ async function runQueries(codeqlCmd, databaseFolder, sarifFolder, config) { fs.writeFileSync(querySuite, querySuiteContents); core.debug('Query suite file for ' + database + '...\n' + querySuiteContents); const sarifFile = path.join(sarifFolder, database + '.sarif'); - await exec.exec(codeqlCmd, [ - 'database', - 'analyze', - util.getMemoryFlag(), - util.getThreadsFlag(), - path.join(databaseFolder, database), - '--format=sarif-latest', - '--output=' + sarifFile, - '--no-sarif-add-snippets', - querySuite - ]); + await codeql.databaseAnalyze(path.join(databaseFolder, database), sarifFile, querySuite); core.debug('SARIF results for database ' + database + ' created at "' + sarifFile + '"'); core.endGroup(); } @@ -165,15 +129,14 @@ async function run() { const config = await configUtils.loadConfig(); core.exportVariable(sharedEnv.ODASA_TRACER_CONFIGURATION, ''); delete process.env[sharedEnv.ODASA_TRACER_CONFIGURATION]; - const codeqlCmd = util.getRequiredEnvParam(sharedEnv.CODEQL_ACTION_CMD); const databaseFolder = util.getRequiredEnvParam(sharedEnv.CODEQL_ACTION_DATABASE_DIR); const sarifFolder = core.getInput('output'); await io.mkdirP(sarifFolder); core.info('Finalizing database creation'); - await finalizeDatabaseCreation(codeqlCmd, databaseFolder); + await finalizeDatabaseCreation(databaseFolder); await externalQueries.checkoutExternalQueries(config); core.info('Analyzing database'); - await runQueries(codeqlCmd, databaseFolder, sarifFolder, config); + await runQueries(databaseFolder, sarifFolder, config); if ('true' === core.getInput('upload')) { if (!await upload_lib.upload(sarifFolder)) { await util.reportActionFailed('finish', 'upload'); diff --git a/lib/finalize-db.js.map b/lib/finalize-db.js.map index efbd0f997..6a5410ae3 100644 --- a/lib/finalize-db.js.map +++ b/lib/finalize-db.js.map @@ -1 +1 @@ -{"version":3,"file":"finalize-db.js","sourceRoot":"","sources":["../src/finalize-db.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"finalize-db.js","sourceRoot":"","sources":["../src/finalize-db.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/setup-tracer.js b/lib/setup-tracer.js index e2feddb5f..40d09aad4 100644 --- a/lib/setup-tracer.js +++ b/lib/setup-tracer.js @@ -13,8 +13,8 @@ const io = __importStar(require("@actions/io")); const fs = __importStar(require("fs")); const path = __importStar(require("path")); const analysisPaths = __importStar(require("./analysis-paths")); +const codeql_1 = require("./codeql"); const configUtils = __importStar(require("./config-utils")); -const setuptools = __importStar(require("./setup-tools")); const sharedEnv = __importStar(require("./shared-environment")); const util = __importStar(require("./util")); const CRITICAL_TRACER_VARS = new Set(['SEMMLE_PRELOAD_libtrace', @@ -28,12 +28,7 @@ const CRITICAL_TRACER_VARS = new Set(['SEMMLE_PRELOAD_libtrace', 'SEMMLE_JAVA_TOOL_OPTIONS' ]); async function tracerConfig(codeql, database, compilerSpec) { - const compilerSpecArg = compilerSpec ? ["--compiler-spec=" + compilerSpec] : []; - let envFile = path.resolve(database, 'working', 'env.tmp'); - await exec.exec(codeql.cmd, ['database', 'trace-command', database, - ...compilerSpecArg, - process.execPath, path.resolve(__dirname, 'tracer-env.js'), envFile]); - const env = JSON.parse(fs.readFileSync(envFile, 'utf-8')); + const env = await codeql.getTracerEnv(database, compilerSpec); const config = env['ODASA_TRACER_CONFIGURATION']; const info = { spec: config, env: {} }; // Extract critical tracer variables from the environment @@ -151,8 +146,8 @@ async function run() { try { const sourceRoot = path.resolve(); core.startGroup('Setup CodeQL tools'); - const codeqlSetup = await setuptools.setupCodeQL(); - await exec.exec(codeqlSetup.cmd, ['version', '--format=json']); + const codeql = await codeql_1.setupCodeQL(); + await codeql.printVersion(); core.endGroup(); // Forward Go flags const goFlags = process.env['GOFLAGS']; @@ -171,16 +166,10 @@ async function run() { for (let language of languages) { const languageDatabase = path.join(databaseFolder, language); // Init language database - await exec.exec(codeqlSetup.cmd, [ - 'database', - 'init', - languageDatabase, - '--language=' + language, - '--source-root=' + sourceRoot, - ]); + await codeql.databaseInit(languageDatabase, language, sourceRoot); // TODO: add better detection of 'traced languages' instead of using a hard coded list if (['cpp', 'java', 'csharp'].includes(language)) { - const config = await tracerConfig(codeqlSetup, languageDatabase); + const config = await tracerConfig(codeql, languageDatabase); tracedLanguages[language] = config; } else { @@ -196,16 +185,16 @@ async function run() { } core.exportVariable('ODASA_TRACER_CONFIGURATION', mainTracerConfig.spec); if (process.platform === 'darwin') { - core.exportVariable('DYLD_INSERT_LIBRARIES', path.join(codeqlSetup.tools, 'osx64', 'libtrace.dylib')); + core.exportVariable('DYLD_INSERT_LIBRARIES', path.join(codeql.getDir(), 'tools', 'osx64', 'libtrace.dylib')); } else if (process.platform === 'win32') { await exec.exec('powershell', [ path.resolve(__dirname, '..', 'src', 'inject-tracer.ps1'), - path.resolve(codeqlSetup.tools, 'win64', 'tracer.exe'), + path.resolve(codeql.getDir(), 'tools', 'win64', 'tracer.exe'), ], { env: { 'ODASA_TRACER_CONFIGURATION': mainTracerConfig.spec } }); } else { - core.exportVariable('LD_PRELOAD', path.join(codeqlSetup.tools, 'linux64', '${LIB}trace.so')); + core.exportVariable('LD_PRELOAD', path.join(codeql.getDir(), 'tools', 'linux64', '${LIB}trace.so')); } } } @@ -213,7 +202,6 @@ async function run() { core.exportVariable(sharedEnv.CODEQL_ACTION_TRACED_LANGUAGES, tracedLanguageKeys.join(',')); // TODO: make this a "private" environment variable of the action core.exportVariable(sharedEnv.CODEQL_ACTION_DATABASE_DIR, databaseFolder); - core.exportVariable(sharedEnv.CODEQL_ACTION_CMD, codeqlSetup.cmd); } catch (error) { core.setFailed(error.message); diff --git a/lib/setup-tracer.js.map b/lib/setup-tracer.js.map index 921161d2b..4fbf7828d 100644 --- a/lib/setup-tracer.js.map +++ b/lib/setup-tracer.js.map @@ -1 +1 @@ -{"version":3,"file":"setup-tracer.js","sourceRoot":"","sources":["../src/setup-tracer.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"setup-tracer.js","sourceRoot":"","sources":["../src/setup-tracer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/shared-environment.js b/lib/shared-environment.js index 8feb5f0d1..0b9afaf41 100644 --- a/lib/shared-environment.js +++ b/lib/shared-environment.js @@ -1,6 +1,5 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.CODEQL_ACTION_CMD = 'CODEQL_ACTION_CMD'; exports.CODEQL_ACTION_DATABASE_DIR = 'CODEQL_ACTION_DATABASE_DIR'; exports.CODEQL_ACTION_LANGUAGES = 'CODEQL_ACTION_LANGUAGES'; exports.CODEQL_ACTION_ANALYSIS_KEY = 'CODEQL_ACTION_ANALYSIS_KEY'; diff --git a/lib/shared-environment.js.map b/lib/shared-environment.js.map index fff795193..8252896c5 100644 --- a/lib/shared-environment.js.map +++ b/lib/shared-environment.js.map @@ -1 +1 @@ -{"version":3,"file":"shared-environment.js","sourceRoot":"","sources":["../src/shared-environment.ts"],"names":[],"mappings":";;AAAa,QAAA,iBAAiB,GAAG,mBAAmB,CAAC;AACxC,QAAA,0BAA0B,GAAG,4BAA4B,CAAC;AAC1D,QAAA,uBAAuB,GAAG,yBAAyB,CAAC;AACpD,QAAA,0BAA0B,GAAG,4BAA4B,CAAC;AAC1D,QAAA,0BAA0B,GAAG,4BAA4B,CAAC;AAC1D,QAAA,+BAA+B,GAAG,iCAAiC,CAAC;AACpE,QAAA,8BAA8B,GAAG,gCAAgC,CAAC;AAC/E,wEAAwE;AACxE,2EAA2E;AAC3E,4EAA4E;AAC5E,2EAA2E;AAC3E,+BAA+B;AAClB,QAAA,wBAAwB,GAAG,0BAA0B,CAAC;AACnE,wDAAwD;AAC3C,QAAA,4BAA4B,GAAG,8BAA8B,CAAC"} \ No newline at end of file +{"version":3,"file":"shared-environment.js","sourceRoot":"","sources":["../src/shared-environment.ts"],"names":[],"mappings":";;AAAa,QAAA,0BAA0B,GAAG,4BAA4B,CAAC;AAC1D,QAAA,uBAAuB,GAAG,yBAAyB,CAAC;AACpD,QAAA,0BAA0B,GAAG,4BAA4B,CAAC;AAC1D,QAAA,0BAA0B,GAAG,4BAA4B,CAAC;AAC1D,QAAA,+BAA+B,GAAG,iCAAiC,CAAC;AACpE,QAAA,8BAA8B,GAAG,gCAAgC,CAAC;AAC/E,wEAAwE;AACxE,2EAA2E;AAC3E,4EAA4E;AAC5E,2EAA2E;AAC3E,+BAA+B;AAClB,QAAA,wBAAwB,GAAG,0BAA0B,CAAC;AACnE,wDAAwD;AAC3C,QAAA,4BAA4B,GAAG,8BAA8B,CAAC"} \ No newline at end of file diff --git a/src/autobuild.ts b/src/autobuild.ts index 4dedb3343..6d3d35e50 100644 --- a/src/autobuild.ts +++ b/src/autobuild.ts @@ -2,6 +2,7 @@ import * as core from '@actions/core'; import * as exec from '@actions/exec'; import * as path from 'path'; +import { getCodeQL } from './codeql'; import * as sharedEnv from './shared-environment'; import * as util from './util'; @@ -30,12 +31,9 @@ async function run() { } core.startGroup(`Attempting to automatically build ${language} code`); - // TODO: share config accross actions better via env variables - const codeqlCmd = util.getRequiredEnvParam(sharedEnv.CODEQL_ACTION_CMD); - + const codeQL = getCodeQL(); const cmdName = process.platform === 'win32' ? 'autobuild.cmd' : 'autobuild.sh'; - const autobuildCmd = path.join(path.dirname(codeqlCmd), language, 'tools', cmdName); - + const autobuildCmd = path.join(codeQL.getDir(), language, 'tools', cmdName); // Update JAVA_TOOL_OPTIONS to contain '-Dhttp.keepAlive=false' // This is because of an issue with Azure pipelines timing out connections after 4 minutes diff --git a/src/setup-tools.test.ts b/src/codeql.test.ts similarity index 91% rename from src/setup-tools.test.ts rename to src/codeql.test.ts index aa21246df..256759508 100644 --- a/src/setup-tools.test.ts +++ b/src/codeql.test.ts @@ -3,7 +3,7 @@ import test from 'ava'; import nock from 'nock'; import * as path from 'path'; -import * as setupTools from './setup-tools'; +import * as codeql from './codeql'; import {silenceDebugOutput} from './testing-utils'; import * as util from './util'; @@ -30,7 +30,7 @@ test('download codeql bundle cache', async t => { process.env['INPUT_TOOLS'] = `https://example.com/download/codeql-bundle-${version}/codeql-bundle.tar.gz`; - await setupTools.setupCodeQL(); + await codeql.setupCodeQL(); t.assert(toolcache.find('CodeQL', `0.0.0-${version}`)); } @@ -56,7 +56,7 @@ test('parse codeql bundle url version', t => { const url = `https://github.com/.../codeql-bundle-${version}/...`; try { - const parsedVersion = setupTools.getCodeQLURLVersion(url); + const parsedVersion = codeql.getCodeQLURLVersion(url); t.deepEqual(parsedVersion, expectedVersion); } catch (e) { t.fail(e.message); diff --git a/src/codeql.ts b/src/codeql.ts new file mode 100644 index 000000000..c03fe4fab --- /dev/null +++ b/src/codeql.ts @@ -0,0 +1,231 @@ +import * as core from '@actions/core'; +import * as exec from '@actions/exec'; +import * as toolcache from '@actions/tool-cache'; +import * as fs from 'fs'; +import * as path from 'path'; +import * as semver from 'semver'; + +import * as util from './util'; + +export interface CodeQL { + /** + * Get the directory where the CodeQL executable is located. + */ + getDir(): string; + /** + * Print version information about CodeQL. + */ + printVersion(): Promise<void>; + /** + * Run 'codeql database trace-command' on 'tracer-env.js' and parse + * the result to get environment variables set by CodeQL. + */ + getTracerEnv(database: string, compilerSpec: string | undefined): Promise<{ [key: string]: string }>; + /** + * Run 'codeql database init'. + */ + databaseInit(database: string, language: string, sourceRoot: string): Promise<void>; + /** + * Extract code for a scanned language using 'codeql database trace-command' + * and running the language extracter. + */ + extractScannedLanguage(database: string, language: string): Promise<void>; + /** + * Finalize a database using 'codeql database finalize'. + */ + finalizeDatabase(database: string, language: string): Promise<void>; + /** + * Run 'codeql resolve queries'. + */ + resolveQueries(queries): Promise<ResolveQueriesOutput>; + /** + * Run 'codeql database analyze'. + */ + databaseAnalyze(database: string, sarifFile: string, querySuite: string): Promise<void>; +} + +export interface ResolveQueriesOutput { + byLanguage: { + [language: string]: { + [queryPath: string]: {} + } + }; + noDeclaredLanguage: { + [queryPath: string]: {} + }; + multipleDeclaredLanguages: { + [queryPath: string]: {} + }; +} + +/** + * Environment variable used to store the location of the CodeQL CLI executable. + * Value is set by setupCodeQL and read by getCodeQL. + */ +const CODEQL_ACTION_CMD = "CODEQL_ACTION_CMD"; + +export async function setupCodeQL(): Promise<CodeQL> { + try { + const codeqlURL = core.getInput('tools', { required: true }); + const codeqlURLVersion = getCodeQLURLVersion(codeqlURL); + + let codeqlFolder = toolcache.find('CodeQL', codeqlURLVersion); + if (codeqlFolder) { + core.debug(`CodeQL found in cache ${codeqlFolder}`); + } else { + const codeqlPath = await toolcache.downloadTool(codeqlURL); + const codeqlExtracted = await toolcache.extractTar(codeqlPath); + codeqlFolder = await toolcache.cacheDir(codeqlExtracted, 'CodeQL', codeqlURLVersion); + } + + let codeqlCmd = path.join(codeqlFolder, 'codeql', 'codeql'); + if (process.platform === 'win32') { + codeqlCmd += ".exe"; + } else if (process.platform !== 'linux' && process.platform !== 'darwin') { + throw new Error("Unsupported plaform: " + process.platform); + } + + core.exportVariable(CODEQL_ACTION_CMD, codeqlCmd); + return getCodeQLForCmd(codeqlCmd); + + } catch (e) { + core.error(e); + throw new Error("Unable to download and extract CodeQL CLI"); + } +} + +export function getCodeQLURLVersion(url: string): string { + + const match = url.match(/\/codeql-bundle-(.*)\//); + if (match === null || match.length < 2) { + throw new Error(`Malformed tools url: ${url}. Version could not be inferred`); + } + + let version = match[1]; + + if (!semver.valid(version)) { + core.debug(`Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.`); + version = '0.0.0-' + version; + } + + const s = semver.clean(version); + if (!s) { + throw new Error(`Malformed tools url ${url}. Version should be in SemVer format but have ${version} instead`); + } + + return s; +} + +export function getCodeQL(): CodeQL { + const codeqlCmd = util.getRequiredEnvParam(CODEQL_ACTION_CMD); + return getCodeQLForCmd(codeqlCmd); +} + +function getCodeQLForCmd(cmd: string): CodeQL { + return { + getDir: function() { + return path.dirname(cmd); + }, + printVersion: async function() { + await exec.exec(cmd, [ + 'version', + '--format=json' + ]); + }, + getTracerEnv: async function(database: string, compilerSpec: string | undefined) { + let envFile = path.resolve(database, 'working', 'env.tmp'); + const compilerSpecArg = compilerSpec ? "--compiler-spec=" + compilerSpec : []; + await exec.exec(cmd, [ + 'database', + 'trace-command', + database, + ...compilerSpecArg, + process.execPath, + path.resolve(__dirname, 'tracer-env.js'), + envFile + ]); + return JSON.parse(fs.readFileSync(envFile, 'utf-8')); + }, + databaseInit: async function(database: string, language: string, sourceRoot: string) { + await exec.exec(cmd, [ + 'database', + 'init', + database, + '--language=' + language, + '--source-root=' + sourceRoot, + ]); + }, + extractScannedLanguage: async function(database: string, language: string) { + // Get extractor location + let extractorPath = ''; + await exec.exec( + cmd, + [ + 'resolve', + 'extractor', + '--format=json', + '--language=' + language + ], + { + silent: true, + listeners: { + stdout: (data) => { extractorPath += data.toString(); }, + stderr: (data) => { process.stderr.write(data); } + } + }); + + // Set trace command + const ext = process.platform === 'win32' ? '.cmd' : '.sh'; + const traceCommand = path.resolve(JSON.parse(extractorPath), 'tools', 'autobuild' + ext); + + // Run trace command + await exec.exec(cmd, [ + 'database', + 'trace-command', + path.join(database, language), + '--', + traceCommand + ]); + }, + finalizeDatabase: async function(database: string, language: string) { + await exec.exec(cmd, [ + 'database', + 'finalize', + path.join(database, language) + ]); + }, + resolveQueries: async function(queries: string[]) { + let output = ''; + await exec.exec( + cmd, + [ + 'resolve', + 'queries', + ...queries, + '--format=bylanguage' + ], + { + listeners: { + stdout: (data: Buffer) => { + output += data.toString(); + } + } + }); + + return JSON.parse(output); + }, + databaseAnalyze: async function(database: string, sarifFile: string, querySuite: string) { + await exec.exec(cmd, [ + 'database', + 'analyze', + util.getMemoryFlag(), + util.getThreadsFlag(), + database, + '--format=sarif-latest', + '--output=' + sarifFile, + '--no-sarif-add-snippets', + querySuite + ]); + } + }; +} diff --git a/src/finalize-db.ts b/src/finalize-db.ts index f1ca1d5ea..52a4b3843 100644 --- a/src/finalize-db.ts +++ b/src/finalize-db.ts @@ -1,9 +1,9 @@ import * as core from '@actions/core'; -import * as exec from '@actions/exec'; import * as io from '@actions/io'; import * as fs from 'fs'; import * as path from 'path'; +import { getCodeQL } from './codeql'; import * as configUtils from './config-utils'; import * as externalQueries from "./external-queries"; import * as sharedEnv from './shared-environment'; @@ -31,85 +31,33 @@ function queryIsDisabled(language, query): boolean { .some(disabledQuery => query.endsWith(disabledQuery)); } -async function createdDBForScannedLanguages(codeqlCmd: string, databaseFolder: string) { +async function createdDBForScannedLanguages(databaseFolder: string) { const scannedLanguages = process.env[sharedEnv.CODEQL_ACTION_SCANNED_LANGUAGES]; if (scannedLanguages) { + const codeql = getCodeQL(); for (const language of scannedLanguages.split(',')) { core.startGroup('Extracting ' + language); - - // Get extractor location - let extractorPath = ''; - await exec.exec(codeqlCmd, ['resolve', 'extractor', '--format=json', '--language=' + language], { - silent: true, - listeners: { - stdout: (data) => { extractorPath += data.toString(); }, - stderr: (data) => { process.stderr.write(data); } - } - }); - - // Set trace command - const ext = process.platform === 'win32' ? '.cmd' : '.sh'; - const traceCommand = path.resolve(JSON.parse(extractorPath), 'tools', 'autobuild' + ext); - - // Run trace command - await exec.exec( - codeqlCmd, - ['database', 'trace-command', path.join(databaseFolder, language), '--', traceCommand]); - + await codeql.extractScannedLanguage(databaseFolder, language); core.endGroup(); } } } -async function finalizeDatabaseCreation(codeqlCmd: string, databaseFolder: string) { - await createdDBForScannedLanguages(codeqlCmd, databaseFolder); +async function finalizeDatabaseCreation(databaseFolder: string) { + await createdDBForScannedLanguages(databaseFolder); const languages = process.env[sharedEnv.CODEQL_ACTION_LANGUAGES] || ''; + const codeql = getCodeQL(); for (const language of languages.split(',')) { core.startGroup('Finalizing ' + language); - await exec.exec(codeqlCmd, ['database', 'finalize', path.join(databaseFolder, language)]); + await codeql.finalizeDatabase(databaseFolder, language); core.endGroup(); } } -interface ResolveQueriesOutput { - byLanguage: { - [language: string]: { - [queryPath: string]: {} - } - }; - noDeclaredLanguage: { - [queryPath: string]: {} - }; - multipleDeclaredLanguages: { - [queryPath: string]: {} - }; -} - -async function runResolveQueries(codeqlCmd: string, queries: string[]): Promise<ResolveQueriesOutput> { - let output = ''; - const options = { - listeners: { - stdout: (data: Buffer) => { - output += data.toString(); - } - } - }; - - await exec.exec( - codeqlCmd, [ - 'resolve', - 'queries', - ...queries, - '--format=bylanguage' - ], - options); - - return JSON.parse(output); -} - -async function resolveQueryLanguages(codeqlCmd: string, config: configUtils.Config): Promise<Map<string, string[]>> { +async function resolveQueryLanguages(config: configUtils.Config): Promise<Map<string, string[]>> { let res = new Map(); + const codeql = getCodeQL(); if (!config.disableDefaultQueries || config.additionalSuites.length !== 0) { const suites: string[] = []; @@ -122,7 +70,7 @@ async function resolveQueryLanguages(codeqlCmd: string, config: configUtils.Conf } } - const resolveQueriesOutputObject = await runResolveQueries(codeqlCmd, suites); + const resolveQueriesOutputObject = await codeql.resolveQueries(suites); for (const [language, queries] of Object.entries(resolveQueriesOutputObject.byLanguage)) { if (res[language] === undefined) { @@ -133,7 +81,7 @@ async function resolveQueryLanguages(codeqlCmd: string, config: configUtils.Conf } if (config.additionalQueries.length !== 0) { - const resolveQueriesOutputObject = await runResolveQueries(codeqlCmd, config.additionalQueries); + const resolveQueriesOutputObject = await codeql.resolveQueries(config.additionalQueries); for (const [language, queries] of Object.entries(resolveQueriesOutputObject.byLanguage)) { if (res[language] === undefined) { @@ -159,8 +107,9 @@ async function resolveQueryLanguages(codeqlCmd: string, config: configUtils.Conf } // Runs queries and creates sarif files in the given folder -async function runQueries(codeqlCmd: string, databaseFolder: string, sarifFolder: string, config: configUtils.Config) { - const queriesPerLanguage = await resolveQueryLanguages(codeqlCmd, config); +async function runQueries(databaseFolder: string, sarifFolder: string, config: configUtils.Config) { + const queriesPerLanguage = await resolveQueryLanguages(config); + const codeql = getCodeQL(); for (let database of fs.readdirSync(databaseFolder)) { core.startGroup('Analyzing ' + database); @@ -179,17 +128,7 @@ async function runQueries(codeqlCmd: string, databaseFolder: string, sarifFolder const sarifFile = path.join(sarifFolder, database + '.sarif'); - await exec.exec(codeqlCmd, [ - 'database', - 'analyze', - util.getMemoryFlag(), - util.getThreadsFlag(), - path.join(databaseFolder, database), - '--format=sarif-latest', - '--output=' + sarifFile, - '--no-sarif-add-snippets', - querySuite - ]); + await codeql.databaseAnalyze(path.join(databaseFolder, database), sarifFile, querySuite); core.debug('SARIF results for database ' + database + ' created at "' + sarifFile + '"'); core.endGroup(); @@ -206,19 +145,18 @@ async function run() { core.exportVariable(sharedEnv.ODASA_TRACER_CONFIGURATION, ''); delete process.env[sharedEnv.ODASA_TRACER_CONFIGURATION]; - const codeqlCmd = util.getRequiredEnvParam(sharedEnv.CODEQL_ACTION_CMD); const databaseFolder = util.getRequiredEnvParam(sharedEnv.CODEQL_ACTION_DATABASE_DIR); const sarifFolder = core.getInput('output'); await io.mkdirP(sarifFolder); core.info('Finalizing database creation'); - await finalizeDatabaseCreation(codeqlCmd, databaseFolder); + await finalizeDatabaseCreation(databaseFolder); await externalQueries.checkoutExternalQueries(config); core.info('Analyzing database'); - await runQueries(codeqlCmd, databaseFolder, sarifFolder, config); + await runQueries(databaseFolder, sarifFolder, config); if ('true' === core.getInput('upload')) { if (!await upload_lib.upload(sarifFolder)) { diff --git a/src/setup-tools.ts b/src/setup-tools.ts deleted file mode 100644 index bb99ec7fb..000000000 --- a/src/setup-tools.ts +++ /dev/null @@ -1,73 +0,0 @@ -import * as core from '@actions/core'; -import * as toolcache from '@actions/tool-cache'; -import * as path from 'path'; -import * as semver from 'semver'; - -export class CodeQLSetup { - public dist: string; - public tools: string; - public cmd: string; - public platform: string; - - constructor(codeqlDist: string) { - this.dist = codeqlDist; - this.tools = path.join(this.dist, 'tools'); - this.cmd = path.join(codeqlDist, 'codeql'); - // TODO check process.arch ? - if (process.platform === 'win32') { - this.platform = 'win64'; - if (this.cmd.endsWith('codeql')) { - this.cmd += ".exe"; - } - } else if (process.platform === 'linux') { - this.platform = 'linux64'; - } else if (process.platform === 'darwin') { - this.platform = 'osx64'; - } else { - throw new Error("Unsupported plaform: " + process.platform); - } - } -} - -export async function setupCodeQL(): Promise<CodeQLSetup> { - try { - const codeqlURL = core.getInput('tools', { required: true }); - const codeqlURLVersion = getCodeQLURLVersion(codeqlURL); - - let codeqlFolder = toolcache.find('CodeQL', codeqlURLVersion); - if (codeqlFolder) { - core.debug(`CodeQL found in cache ${codeqlFolder}`); - } else { - const codeqlPath = await toolcache.downloadTool(codeqlURL); - const codeqlExtracted = await toolcache.extractTar(codeqlPath); - codeqlFolder = await toolcache.cacheDir(codeqlExtracted, 'CodeQL', codeqlURLVersion); - } - return new CodeQLSetup(path.join(codeqlFolder, 'codeql')); - - } catch (e) { - core.error(e); - throw new Error("Unable to download and extract CodeQL CLI"); - } -} - -export function getCodeQLURLVersion(url: string): string { - - const match = url.match(/\/codeql-bundle-(.*)\//); - if (match === null || match.length < 2) { - throw new Error(`Malformed tools url: ${url}. Version could not be inferred`); - } - - let version = match[1]; - - if (!semver.valid(version)) { - core.debug(`Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.`); - version = '0.0.0-' + version; - } - - const s = semver.clean(version); - if (!s) { - throw new Error(`Malformed tools url ${url}. Version should be in SemVer format but have ${version} instead`); - } - - return s; -} diff --git a/src/setup-tracer.ts b/src/setup-tracer.ts index 370e29691..b18a3c539 100644 --- a/src/setup-tracer.ts +++ b/src/setup-tracer.ts @@ -5,8 +5,8 @@ import * as fs from 'fs'; import * as path from 'path'; import * as analysisPaths from './analysis-paths'; +import { CodeQL, setupCodeQL } from './codeql'; import * as configUtils from './config-utils'; -import * as setuptools from './setup-tools'; import * as sharedEnv from './shared-environment'; import * as util from './util'; @@ -24,19 +24,11 @@ const CRITICAL_TRACER_VARS = new Set( ]); async function tracerConfig( - codeql: setuptools.CodeQLSetup, + codeql: CodeQL, database: string, compilerSpec?: string): Promise<TracerConfig> { - const compilerSpecArg = compilerSpec ? ["--compiler-spec=" + compilerSpec] : []; - - let envFile = path.resolve(database, 'working', 'env.tmp'); - await exec.exec(codeql.cmd, ['database', 'trace-command', database, - ...compilerSpecArg, - process.execPath, path.resolve(__dirname, 'tracer-env.js'), envFile] - ); - - const env: { [key: string]: string } = JSON.parse(fs.readFileSync(envFile, 'utf-8')); + const env = await codeql.getTracerEnv(database, compilerSpec); const config = env['ODASA_TRACER_CONFIGURATION']; const info: TracerConfig = { spec: config, env: {} }; @@ -174,8 +166,8 @@ async function run() { const sourceRoot = path.resolve(); core.startGroup('Setup CodeQL tools'); - const codeqlSetup = await setuptools.setupCodeQL(); - await exec.exec(codeqlSetup.cmd, ['version', '--format=json']); + const codeql = await setupCodeQL(); + await codeql.printVersion(); core.endGroup(); // Forward Go flags @@ -194,22 +186,15 @@ async function run() { let tracedLanguages: { [key: string]: TracerConfig } = {}; let scannedLanguages: string[] = []; - // TODO: replace this code once CodeQL supports multi-language tracing for (let language of languages) { const languageDatabase = path.join(databaseFolder, language); // Init language database - await exec.exec(codeqlSetup.cmd, [ - 'database', - 'init', - languageDatabase, - '--language=' + language, - '--source-root=' + sourceRoot, - ]); + await codeql.databaseInit(languageDatabase, language, sourceRoot); // TODO: add better detection of 'traced languages' instead of using a hard coded list if (['cpp', 'java', 'csharp'].includes(language)) { - const config: TracerConfig = await tracerConfig(codeqlSetup, languageDatabase); + const config: TracerConfig = await tracerConfig(codeql, languageDatabase); tracedLanguages[language] = config; } else { scannedLanguages.push(language); @@ -227,17 +212,17 @@ async function run() { if (process.platform === 'darwin') { core.exportVariable( 'DYLD_INSERT_LIBRARIES', - path.join(codeqlSetup.tools, 'osx64', 'libtrace.dylib')); + path.join(codeql.getDir(), 'tools', 'osx64', 'libtrace.dylib')); } else if (process.platform === 'win32') { await exec.exec( 'powershell', [ path.resolve(__dirname, '..', 'src', 'inject-tracer.ps1'), - path.resolve(codeqlSetup.tools, 'win64', 'tracer.exe'), + path.resolve(codeql.getDir(), 'tools', 'win64', 'tracer.exe'), ], { env: { 'ODASA_TRACER_CONFIGURATION': mainTracerConfig.spec } }); } else { - core.exportVariable('LD_PRELOAD', path.join(codeqlSetup.tools, 'linux64', '${LIB}trace.so')); + core.exportVariable('LD_PRELOAD', path.join(codeql.getDir(), 'tools', 'linux64', '${LIB}trace.so')); } } } @@ -247,7 +232,6 @@ async function run() { // TODO: make this a "private" environment variable of the action core.exportVariable(sharedEnv.CODEQL_ACTION_DATABASE_DIR, databaseFolder); - core.exportVariable(sharedEnv.CODEQL_ACTION_CMD, codeqlSetup.cmd); } catch (error) { core.setFailed(error.message); diff --git a/src/shared-environment.ts b/src/shared-environment.ts index fbc94edb9..ba480a3c0 100644 --- a/src/shared-environment.ts +++ b/src/shared-environment.ts @@ -1,4 +1,3 @@ -export const CODEQL_ACTION_CMD = 'CODEQL_ACTION_CMD'; export const CODEQL_ACTION_DATABASE_DIR = 'CODEQL_ACTION_DATABASE_DIR'; export const CODEQL_ACTION_LANGUAGES = 'CODEQL_ACTION_LANGUAGES'; export const CODEQL_ACTION_ANALYSIS_KEY = 'CODEQL_ACTION_ANALYSIS_KEY';