From ff8fe44e0c653b621260ed4798a86910e475c790 Mon Sep 17 00:00:00 2001 From: Alex Kalyvitis Date: Thu, 18 Jun 2020 16:40:02 +0200 Subject: [PATCH] compiled js --- lib/setup-tools.js | 28 ++++++++++--- lib/setup-tools.js.map | 2 +- lib/setup-tools.test.js | 59 +++++++++++++++++++++++++++ lib/setup-tools.test.js.map | 1 + src/setup-tools.test.ts | 64 ++++++++++++++++++++++++++++++ src/testdata/codeql-bundle.tar.gz | Bin 0 -> 122 bytes 6 files changed, 147 insertions(+), 7 deletions(-) create mode 100644 lib/setup-tools.test.js create mode 100644 lib/setup-tools.test.js.map create mode 100644 src/setup-tools.test.ts create mode 100644 src/testdata/codeql-bundle.tar.gz diff --git a/lib/setup-tools.js b/lib/setup-tools.js index 0f2e4a419..811e04406 100644 --- a/lib/setup-tools.js +++ b/lib/setup-tools.js @@ -9,7 +9,7 @@ var __importStar = (this && this.__importStar) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); const core = __importStar(require("@actions/core")); const toolcache = __importStar(require("@actions/tool-cache")); -const crypto = __importStar(require("crypto")); +const semver = __importStar(require("semver")); const path = __importStar(require("path")); class CodeQLSetup { constructor(codeqlDist) { @@ -36,18 +36,17 @@ class CodeQLSetup { } exports.CodeQLSetup = CodeQLSetup; async function setupCodeQL() { - const hash = crypto.createHash('sha256'); - const codeqlURL = core.getInput('tools', { required: true }); - const codeqlURLHash = hash.update(codeqlURL).digest('hex'); try { - let codeqlFolder = toolcache.find('CodeQL', codeqlURLHash); + 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', codeqlURLHash); + codeqlFolder = await toolcache.cacheDir(codeqlExtracted, 'CodeQL', codeqlURLVersion); } return new CodeQLSetup(path.join(codeqlFolder, 'codeql')); } @@ -57,4 +56,21 @@ async function setupCodeQL() { } } exports.setupCodeQL = setupCodeQL; +function getCodeQLURLVersion(url) { + const match = url.match(/codeql-bundle-([\d+(\.\d+)]+)/); + 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; //# sourceMappingURL=setup-tools.js.map \ No newline at end of file diff --git a/lib/setup-tools.js.map b/lib/setup-tools.js.map index 5ccc5de98..83b288e31 100644 --- a/lib/setup-tools.js.map +++ b/lib/setup-tools.js.map @@ -1 +1 @@ -{"version":3,"file":"setup-tools.js","sourceRoot":"","sources":["../src/setup-tools.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAsC;AACtC,+DAAiD;AACjD,+CAAiC;AACjC,2CAA6B;AAE7B,MAAa,WAAW;IAMpB,YAAY,UAAkB;QAC1B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3C,4BAA4B;QAC5B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;YAC9B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACxB,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAC7B,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC;aACtB;SACJ;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;YACrC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;SAC7B;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;SAC3B;aAAM;YACH,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC/D;IACL,CAAC;CACJ;AAxBD,kCAwBC;AAEM,KAAK,UAAU,WAAW;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE3D,IAAI;QACA,IAAI,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC3D,IAAI,YAAY,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;SACvD;aAAM;YACH,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,eAAe,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC/D,YAAY,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;SACrF;QACD,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;KAE7D;IAAC,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAChE;AACL,CAAC;AApBD,kCAoBC"} \ No newline at end of file +{"version":3,"file":"setup-tools.js","sourceRoot":"","sources":["../src/setup-tools.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/setup-tools.test.js b/lib/setup-tools.test.js new file mode 100644 index 000000000..6a96fd378 --- /dev/null +++ b/lib/setup-tools.test.js @@ -0,0 +1,59 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +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 ava_1 = __importDefault(require("ava")); +const path = __importStar(require("path")); +const toolcache = __importStar(require("@actions/tool-cache")); +const util = __importStar(require("./util")); +const nock_1 = __importDefault(require("nock")); +const setupTools = __importStar(require("./setup-tools")); +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 setupTools.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 in tests) { + const expectedVersion = tests[version]; + const url = `https://github.com/.../codeql-bundle-${version}/...`; + try { + const parsedVersion = setupTools.getCodeQLURLVersion(url); + t.assert(parsedVersion, expectedVersion); + } + catch (e) { + t.fail(e.message); + } + } +}); +//# sourceMappingURL=setup-tools.test.js.map \ No newline at end of file diff --git a/lib/setup-tools.test.js.map b/lib/setup-tools.test.js.map new file mode 100644 index 000000000..55badf82c --- /dev/null +++ b/lib/setup-tools.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"setup-tools.test.js","sourceRoot":"","sources":["../src/setup-tools.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAAuB;AACvB,2CAA6B;AAC7B,+DAAiD;AACjD,6CAA+B;AAC/B,gDAAwB;AAExB,0DAA4C;AAE5C,aAAI,CAAC,8BAA8B,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAE3C,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;QAEjC,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;YACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAE5B,cAAI,CAAC,qBAAqB,CAAC;iBACtB,GAAG,CAAC,2BAA2B,OAAO,uBAAuB,CAAC;iBAC9D,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uCAAuC,CAAC,CAAC,CAAC;YAGvF,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,8CAA8C,OAAO,uBAAuB,CAAC;YAE1G,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC;YAE/B,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC;SAC1D;QAED,MAAM,cAAc,GAAG,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAE3D,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAA;AAEF,aAAI,CAAC,iCAAiC,EAAE,CAAC,CAAC,EAAE;IAExC,MAAM,KAAK,GAAG;QACV,UAAU,EAAE,gBAAgB;QAC5B,YAAY,EAAE,kBAAkB;QAChC,cAAc,EAAE,cAAc;QAC9B,OAAO,EAAE,OAAO;QAChB,aAAa,EAAE,aAAa;QAC5B,cAAc,EAAE,cAAc;KACjC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE;QAEzB,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,wCAAwC,OAAO,MAAM,CAAC;QAElE,IAAI;YACA,MAAM,aAAa,GAAG,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC1D,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;SAC5C;QAAC,OAAO,CAAC,EAAE;YACR,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SACrB;KACJ;AACL,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/src/setup-tools.test.ts b/src/setup-tools.test.ts new file mode 100644 index 000000000..d473b37a9 --- /dev/null +++ b/src/setup-tools.test.ts @@ -0,0 +1,64 @@ +import test from 'ava'; +import * as path from 'path'; +import * as toolcache from '@actions/tool-cache'; +import * as util from './util'; +import nock from 'nock'; + +import * as setupTools from './setup-tools'; + +test('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('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 setupTools.setupCodeQL(); + + t.assert(toolcache.find('CodeQL', `0.0.0-${version}`)); + } + + const cachedVersions = toolcache.findAllVersions('CodeQL'); + + t.is(cachedVersions.length, 2); + }); +}) + +test('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 in tests) { + + const expectedVersion = tests[version]; + const url = `https://github.com/.../codeql-bundle-${version}/...`; + + try { + const parsedVersion = setupTools.getCodeQLURLVersion(url); + t.assert(parsedVersion, expectedVersion); + } catch (e) { + t.fail(e.message); + } + } +}); \ No newline at end of file diff --git a/src/testdata/codeql-bundle.tar.gz b/src/testdata/codeql-bundle.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..311ee5faee2cbb866e98639d8d0317a7ca79df31 GIT binary patch literal 122 zcmb2|=3of%dmYEXtnI0*m$<;t00@i?0~szpOIwz3>j1~0b|zz1=VaqzWn