From f140af5e287bb8b3978d196129de24ccb55f2a7e Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Fri, 3 Feb 2023 19:12:06 +0000 Subject: [PATCH] Refactor setting up CodeQL to handle bundle URLs without tags --- lib/setup-codeql.js | 224 ++++++++++++++++++------------ lib/setup-codeql.js.map | 2 +- src/setup-codeql.ts | 293 +++++++++++++++++++++++++--------------- 3 files changed, 321 insertions(+), 198 deletions(-) diff --git a/lib/setup-codeql.js b/lib/setup-codeql.js index 67f8d8339..9440279ea 100644 --- a/lib/setup-codeql.js +++ b/lib/setup-codeql.js @@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; 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.tryGetFallbackToolcacheVersion = exports.getCodeQLSource = exports.convertToSemVer = exports.tryGetBundleVersionFromUrl = exports.tryFindCliVersionDotcomOnly = exports.findCodeQLBundleTagDotcomOnly = exports.getCodeQLActionRepository = exports.CODEQL_DEFAULT_ACTION_REPOSITORY = void 0; const fs = __importStar(require("fs")); const path = __importStar(require("path")); const perf_hooks_1 = require("perf_hooks"); @@ -211,21 +211,30 @@ async function getCodeQLBundleDownloadURL(tagName, apiDetails, variant, logger) } return `https://github.com/${exports.CODEQL_DEFAULT_ACTION_REPOSITORY}/releases/download/${tagName}/${codeQLBundleName}`; } -function getBundleVersionFromTagName(tagName) { +function tryGetBundleVersionFromTagName(tagName, logger) { const match = tagName.match(/^codeql-bundle-(.*)$/); if (match === null || match.length < 2) { - throw new Error(`Malformed bundle tag name: ${tagName}. Bundle version could not be inferred`); + logger.debug(`Could not determine bundle version from tag ${tagName}.`); + return undefined; } return match[1]; } -function getBundleVersionFromUrl(url) { +function tryGetTagNameFromUrl(url, logger) { const match = url.match(/\/(codeql-bundle-.*)\//); if (match === null || match.length < 2) { - throw new Error(`Malformed tools url: ${url}. Bundle version could not be inferred`); + logger.debug(`Could not determine tag name for URL ${url}.`); + return undefined; + } + return match[1]; +} +function tryGetBundleVersionFromUrl(url, logger) { + const tagName = tryGetTagNameFromUrl(url, logger); + if (tagName === undefined) { + return undefined; } - return getBundleVersionFromTagName(match[1]); + return tryGetBundleVersionFromTagName(tagName, logger); } -exports.getBundleVersionFromUrl = getBundleVersionFromUrl; +exports.tryGetBundleVersionFromUrl = tryGetBundleVersionFromUrl; function convertToSemVer(version, logger) { if (!semver.valid(version)) { logger.debug(`Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.`); @@ -238,18 +247,10 @@ function convertToSemVer(version, logger) { return s; } exports.convertToSemVer = convertToSemVer; -async function getOrFindBundleTagName(version, logger) { - if (version.variant === util.GitHubVariant.DOTCOM) { - return await findCodeQLBundleTagDotcomOnly(version.cliVersion, logger); - } - else { - return version.tagName; - } -} /** * Look for a version of the CodeQL tools in the cache which could override the requested CLI version. */ -async function findOverridingToolsInCache(requestedCliVersion, logger) { +async function findOverridingToolsInCache(humanReadableVersion, logger) { const candidates = toolcache .findAllVersions("CodeQL") .filter(util_1.isGoodVersion) @@ -260,7 +261,7 @@ async function findOverridingToolsInCache(requestedCliVersion, logger) { .filter(({ folder }) => fs.existsSync(path.join(folder, "pinned-version"))); if (candidates.length === 1) { const candidate = candidates[0]; - logger.debug(`CodeQL tools version ${candidate.version} in toolcache overriding version ${requestedCliVersion}.`); + logger.debug(`CodeQL tools version ${candidate.version} in toolcache overriding version ${humanReadableVersion}.`); return { codeqlFolder: candidate.folder, sourceType: "toolcache", @@ -300,108 +301,148 @@ async function getCodeQLSource(toolsInput, bypassToolcache, defaultCliVersion, a if (forceLatest) { logger.debug(`Forcing the latest version of the CodeQL tools since ${forceLatestReason}.`); } + /** CLI version number, for example 2.12.1. */ + let cliVersion; + /** Tag name of the CodeQL bundle, for example `codeql-bundle-20230120`. */ + let tagName; /** - * The requested version is: + * URL of the CodeQL bundle. * - * 1. The one in `defaults.json`, if forceLatest is true. - * 2. The version specified by the tools input URL, if one was provided. - * 3. The default CLI version, otherwise. - - * We include a `variant` property to let us verify using the type system that - * `tagName` is only undefined when the variant is Dotcom. This lets us ensure - * that we can always compute `tagName`, either by using the existing tag name - * on enterprise instances, or calling `findCodeQLBundleTagDotcomOnly` on - * Dotcom. + * This does not always include a tag name. */ - const requestedVersion = forceLatest - ? // case 1 - { - cliVersion: defaults.cliVersion, - syntheticCliVersion: defaults.cliVersion, - tagName: defaults.bundleVersion, - variant, - } - : toolsInput !== undefined - ? // case 2 - { - syntheticCliVersion: convertToSemVer(getBundleVersionFromUrl(toolsInput), logger), - tagName: `codeql-bundle-${getBundleVersionFromUrl(toolsInput)}`, - url: toolsInput, - variant, - } - : // case 3 - { - ...defaultCliVersion, - syntheticCliVersion: defaultCliVersion.cliVersion, - }; - // If we find the specified version, we always use that. - let codeqlFolder = toolcache.find("CodeQL", requestedVersion.syntheticCliVersion); - let tagName = requestedVersion["tagName"]; - if (!codeqlFolder) { - logger.debug("Didn't find a version of the CodeQL tools in the toolcache with a version number " + - `exactly matching ${requestedVersion.syntheticCliVersion}.`); - if (requestedVersion.cliVersion) { + let url; + if (forceLatest) { + // When forceLatest is true, the requested version is the one shipped with the Action in `defaults.json`. + cliVersion = defaults.cliVersion; + tagName = defaults.bundleVersion; + } + else if (toolsInput !== undefined) { + // If a tools URL was provided, then use that. + tagName = tryGetTagNameFromUrl(toolsInput, logger); + url = toolsInput; + } + else { + // Otherwise, use the default CLI version passed in. + cliVersion = defaultCliVersion.cliVersion; + tagName = defaultCliVersion["tagName"]; + } + const bundleVersion = tagName && tryGetBundleVersionFromTagName(tagName, logger); + const humanReadableVersion = cliVersion ?? + (bundleVersion && convertToSemVer(bundleVersion, logger)) ?? + tagName ?? + url ?? + "unknown"; + logger.debug("Attempting to obtain CodeQL tools. " + + `CLI version: ${cliVersion ?? "unknown"}, ` + + `bundle tag name: ${tagName ?? "unknown"}, ` + + `URL: ${url ?? "unspecified"}.`); + let codeqlFolder; + if (cliVersion) { + // If we find the specified CLI version, we always use that. + codeqlFolder = toolcache.find("CodeQL", cliVersion); + // Fall back to matching `x.y.z-`. + if (!codeqlFolder) { + logger.debug("Didn't find a version of the CodeQL tools in the toolcache with a version number " + + `exactly matching ${cliVersion}.`); const allVersions = toolcache.findAllVersions("CodeQL"); logger.debug(`Found the following versions of the CodeQL tools in the toolcache: ${JSON.stringify(allVersions)}.`); // If there is exactly one version of the CodeQL tools in the toolcache, and that version is // the form `x.y.z-`, then use it. - const candidateVersions = allVersions.filter((version) => version.startsWith(`${requestedVersion.cliVersion}-`)); + const candidateVersions = allVersions.filter((version) => version.startsWith(`${cliVersion}-`)); if (candidateVersions.length === 1) { - logger.debug("Exactly one candidate version found, using that."); + logger.debug(`Exactly one version of the CodeQL tools starting with ${cliVersion} found in the ` + + "toolcache, using that."); codeqlFolder = toolcache.find("CodeQL", candidateVersions[0]); } else { - logger.debug("Did not find exactly one version of the CodeQL tools starting with the requested version."); + logger.debug(`Did not find exactly one version of the CodeQL tools starting with ${cliVersion} ` + + `(instead found ${candidateVersions.length}). Trying next fallback method.`); } } } - if (!codeqlFolder && requestedVersion.cliVersion) { - // Fall back to accepting a `0.0.0-` version if we didn't find the - // `x.y.z` version. This is to support old versions of the toolcache. - // - // If we are on Dotcom, we will make an HTTP request to the Releases API here - // to find the tag name for the requested version. - tagName = - tagName || (await getOrFindBundleTagName(requestedVersion, logger)); - const fallbackVersion = convertToSemVer(getBundleVersionFromTagName(tagName), logger); - logger.debug(`Computed a fallback toolcache version number of ${fallbackVersion} for CodeQL tools version ` + - `${requestedVersion.cliVersion}.`); - codeqlFolder = toolcache.find("CodeQL", fallbackVersion); + // Fall back to matching `0.0.0-`. + if (!codeqlFolder && (cliVersion || tagName)) { + if (cliVersion || tagName) { + const fallbackVersion = await tryGetFallbackToolcacheVersion(cliVersion, tagName, variant, logger); + if (fallbackVersion) { + codeqlFolder = toolcache.find("CodeQL", fallbackVersion); + } + else { + logger.debug("Could not determine a fallback toolcache version number for CodeQL tools version " + + `${humanReadableVersion}.`); + } + } + else { + logger.debug("Both the CLI version and the bundle version are unknown, so we will not be able to find " + + "the requested version of the CodeQL tools in the toolcache."); + } + } + if (codeqlFolder) { + logger.info(`Found CodeQL tools version ${humanReadableVersion} in the toolcache.`); + } + else { + logger.info(`Did not find CodeQL tools version ${humanReadableVersion} in the toolcache.`); } if (codeqlFolder) { return { codeqlFolder, sourceType: "toolcache", - toolsVersion: requestedVersion.syntheticCliVersion, + toolsVersion: cliVersion ?? humanReadableVersion, }; } - logger.debug(`Did not find CodeQL tools version ${requestedVersion.syntheticCliVersion} in the toolcache.`); // If we don't find the requested version on Enterprise, we may allow a // different version to save download time if the version hasn't been // specified explicitly (in which case we always honor it). if (variant !== util.GitHubVariant.DOTCOM && !forceLatest && !toolsInput) { - const result = await findOverridingToolsInCache(requestedVersion.syntheticCliVersion, logger); + const result = await findOverridingToolsInCache(humanReadableVersion, logger); if (result !== undefined) { return result; } } + if (!url) { + if (!tagName && cliVersion && variant === util.GitHubVariant.DOTCOM) { + tagName = await findCodeQLBundleTagDotcomOnly(cliVersion, logger); + } + else if (!tagName) { + throw new Error(`Could not obtain the requested version (${humanReadableVersion}) of the CodeQL tools ` + + "since we could not compute the tag name."); + } + url = await getCodeQLBundleDownloadURL(tagName, apiDetails, variant, logger); + } return { - cliVersion: requestedVersion.cliVersion || undefined, - codeqlURL: requestedVersion["url"] || - (await getCodeQLBundleDownloadURL(tagName || - // The check on `requestedVersion.tagName` is redundant but lets us - // use the property that if we don't know `requestedVersion.tagName`, - // then we must know `requestedVersion.cliVersion`. This property is - // required by the type of `getOrFindBundleTagName`. - (requestedVersion.tagName !== undefined - ? requestedVersion.tagName - : await getOrFindBundleTagName(requestedVersion, logger)), apiDetails, variant, logger)), + bundleVersion: tagName && tryGetBundleVersionFromTagName(tagName, logger), + cliVersion, + codeqlURL: url, sourceType: "download", - toolsVersion: requestedVersion.syntheticCliVersion, + toolsVersion: cliVersion ?? humanReadableVersion, }; } exports.getCodeQLSource = getCodeQLSource; -async function downloadCodeQL(codeqlURL, maybeCliVersion, apiDetails, variant, tempDir, logger) { +/** + * Gets a fallback version number to use when looking for CodeQL in the toolcache if we didn't find + * the `x.y.z` version. This is to support old versions of the toolcache. + */ +async function tryGetFallbackToolcacheVersion(cliVersion, tagName, variant, logger) { + // + // If we are on Dotcom, we will make an HTTP request to the Releases API here + // to find the tag name for the requested version. + if (cliVersion && !tagName && variant === util.GitHubVariant.DOTCOM) { + tagName = await findCodeQLBundleTagDotcomOnly(cliVersion, logger); + } + if (!tagName) { + return undefined; + } + const bundleVersion = tryGetBundleVersionFromTagName(tagName, logger); + if (!bundleVersion) { + return undefined; + } + const fallbackVersion = convertToSemVer(bundleVersion, logger); + logger.debug(`Computed a fallback toolcache version number of ${fallbackVersion} for CodeQL version ` + + `${cliVersion ?? tagName}.`); + return fallbackVersion; +} +exports.tryGetFallbackToolcacheVersion = tryGetFallbackToolcacheVersion; +async function downloadCodeQL(codeqlURL, maybeBundleVersion, maybeCliVersion, apiDetails, variant, tempDir, logger) { const parsedCodeQLURL = new URL(codeqlURL); const searchParams = new URLSearchParams(parsedCodeQLURL.search); const headers = { @@ -430,7 +471,16 @@ async function downloadCodeQL(codeqlURL, maybeCliVersion, apiDetails, variant, t const toolsDownloadDurationMs = Math.round(perf_hooks_1.performance.now() - toolsDownloadStart); logger.debug(`CodeQL bundle download to ${codeqlPath} complete.`); const codeqlExtracted = await toolcache.extractTar(codeqlPath); - const bundleVersion = getBundleVersionFromUrl(codeqlURL); + const bundleVersion = maybeBundleVersion ?? tryGetBundleVersionFromUrl(codeqlURL, logger); + if (bundleVersion === undefined) { + logger.debug("Could not cache CodeQL tools because we could not determine the bundle version from the " + + `URL ${codeqlURL}.`); + return { + toolsVersion: maybeCliVersion ?? "unknown", + codeqlFolder: codeqlExtracted, + toolsDownloadDurationMs, + }; + } // Try to compute the CLI version for this bundle const cliVersion = maybeCliVersion || (variant === util.GitHubVariant.DOTCOM && @@ -494,7 +544,7 @@ async function setupCodeQLBundle(toolsInput, apiDetails, tempDir, variant, bypas toolsSource = init_1.ToolsSource.Toolcache; break; case "download": { - const result = await downloadCodeQL(source.codeqlURL, source.cliVersion, apiDetails, variant, tempDir, logger); + const result = await downloadCodeQL(source.codeqlURL, source.bundleVersion, source.cliVersion, apiDetails, variant, tempDir, logger); toolsVersion = result.toolsVersion; codeqlFolder = result.codeqlFolder; toolsDownloadDurationMs = result.toolsDownloadDurationMs; diff --git a/lib/setup-codeql.js.map b/lib/setup-codeql.js.map index ec2918d1e..5dc6ba873 100644 --- a/lib/setup-codeql.js.map +++ b/lib/setup-codeql.js.map @@ -1 +1 @@ -{"version":3,"file":"setup-codeql.js","sourceRoot":"","sources":["../src/setup-codeql.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"setup-codeql.js","sourceRoot":"","sources":["../src/setup-codeql.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/setup-codeql.ts b/src/setup-codeql.ts index 196bc0800..9802ccff2 100644 --- a/src/setup-codeql.ts +++ b/src/setup-codeql.ts @@ -241,24 +241,36 @@ async function getCodeQLBundleDownloadURL( return `https://github.com/${CODEQL_DEFAULT_ACTION_REPOSITORY}/releases/download/${tagName}/${codeQLBundleName}`; } -function getBundleVersionFromTagName(tagName: string): string { +function tryGetBundleVersionFromTagName( + tagName: string, + logger: Logger +): string | undefined { const match = tagName.match(/^codeql-bundle-(.*)$/); if (match === null || match.length < 2) { - throw new Error( - `Malformed bundle tag name: ${tagName}. Bundle version could not be inferred` - ); + logger.debug(`Could not determine bundle version from tag ${tagName}.`); + return undefined; } return match[1]; } -export function getBundleVersionFromUrl(url: string): string { +function tryGetTagNameFromUrl(url: string, logger: Logger): string | undefined { const match = url.match(/\/(codeql-bundle-.*)\//); if (match === null || match.length < 2) { - throw new Error( - `Malformed tools url: ${url}. Bundle version could not be inferred` - ); + logger.debug(`Could not determine tag name for URL ${url}.`); + return undefined; } - return getBundleVersionFromTagName(match[1]); + return match[1]; +} + +export function tryGetBundleVersionFromUrl( + url: string, + logger: Logger +): string | undefined { + const tagName = tryGetTagNameFromUrl(url, logger); + if (tagName === undefined) { + return undefined; + } + return tryGetBundleVersionFromTagName(tagName, logger); } export function convertToSemVer(version: string, logger: Logger): string { @@ -291,6 +303,8 @@ type CodeQLToolsSource = toolsVersion: string; } | { + /** Bundle version of the tools, if known. */ + bundleVersion?: string; /** CLI version of the tools, if known. */ cliVersion?: string; codeqlURL: string; @@ -299,22 +313,11 @@ type CodeQLToolsSource = toolsVersion: string; }; -async function getOrFindBundleTagName( - version: CodeQLDefaultVersionInfo, - logger: Logger -): Promise { - if (version.variant === util.GitHubVariant.DOTCOM) { - return await findCodeQLBundleTagDotcomOnly(version.cliVersion, logger); - } else { - return version.tagName; - } -} - /** * Look for a version of the CodeQL tools in the cache which could override the requested CLI version. */ async function findOverridingToolsInCache( - requestedCliVersion: string, + humanReadableVersion: string, logger: Logger ): Promise { const candidates = toolcache @@ -329,7 +332,7 @@ async function findOverridingToolsInCache( if (candidates.length === 1) { const candidate = candidates[0]; logger.debug( - `CodeQL tools version ${candidate.version} in toolcache overriding version ${requestedCliVersion}.` + `CodeQL tools version ${candidate.version} in toolcache overriding version ${humanReadableVersion}.` ); return { codeqlFolder: candidate.folder, @@ -384,57 +387,59 @@ export async function getCodeQLSource( ); } + /** CLI version number, for example 2.12.1. */ + let cliVersion: string | undefined; + /** Tag name of the CodeQL bundle, for example `codeql-bundle-20230120`. */ + let tagName: string | undefined; /** - * The requested version is: - * - * 1. The one in `defaults.json`, if forceLatest is true. - * 2. The version specified by the tools input URL, if one was provided. - * 3. The default CLI version, otherwise. - - * We include a `variant` property to let us verify using the type system that - * `tagName` is only undefined when the variant is Dotcom. This lets us ensure - * that we can always compute `tagName`, either by using the existing tag name - * on enterprise instances, or calling `findCodeQLBundleTagDotcomOnly` on - * Dotcom. + * URL of the CodeQL bundle. + * + * This does not always include a tag name. */ - const requestedVersion = forceLatest - ? // case 1 - { - cliVersion: defaults.cliVersion, - syntheticCliVersion: defaults.cliVersion, - tagName: defaults.bundleVersion, - variant, - } - : toolsInput !== undefined - ? // case 2 - { - syntheticCliVersion: convertToSemVer( - getBundleVersionFromUrl(toolsInput), - logger - ), - tagName: `codeql-bundle-${getBundleVersionFromUrl(toolsInput)}`, - url: toolsInput, - variant, - } - : // case 3 - { - ...defaultCliVersion, - syntheticCliVersion: defaultCliVersion.cliVersion, - }; - - // If we find the specified version, we always use that. - let codeqlFolder = toolcache.find( - "CodeQL", - requestedVersion.syntheticCliVersion + let url: string | undefined; + + if (forceLatest) { + // When forceLatest is true, the requested version is the one shipped with the Action in `defaults.json`. + cliVersion = defaults.cliVersion; + tagName = defaults.bundleVersion; + } else if (toolsInput !== undefined) { + // If a tools URL was provided, then use that. + tagName = tryGetTagNameFromUrl(toolsInput, logger); + url = toolsInput; + } else { + // Otherwise, use the default CLI version passed in. + cliVersion = defaultCliVersion.cliVersion; + tagName = defaultCliVersion["tagName"]; + } + + const bundleVersion = + tagName && tryGetBundleVersionFromTagName(tagName, logger); + const humanReadableVersion = + cliVersion ?? + (bundleVersion && convertToSemVer(bundleVersion, logger)) ?? + tagName ?? + url ?? + "unknown"; + + logger.debug( + "Attempting to obtain CodeQL tools. " + + `CLI version: ${cliVersion ?? "unknown"}, ` + + `bundle tag name: ${tagName ?? "unknown"}, ` + + `URL: ${url ?? "unspecified"}.` ); - let tagName: string | undefined = requestedVersion["tagName"]; - if (!codeqlFolder) { - logger.debug( - "Didn't find a version of the CodeQL tools in the toolcache with a version number " + - `exactly matching ${requestedVersion.syntheticCliVersion}.` - ); - if (requestedVersion.cliVersion) { + let codeqlFolder; + + if (cliVersion) { + // If we find the specified CLI version, we always use that. + codeqlFolder = toolcache.find("CodeQL", cliVersion); + + // Fall back to matching `x.y.z-`. + if (!codeqlFolder) { + logger.debug( + "Didn't find a version of the CodeQL tools in the toolcache with a version number " + + `exactly matching ${cliVersion}.` + ); const allVersions = toolcache.findAllVersions("CodeQL"); logger.debug( `Found the following versions of the CodeQL tools in the toolcache: ${JSON.stringify( @@ -444,55 +449,72 @@ export async function getCodeQLSource( // If there is exactly one version of the CodeQL tools in the toolcache, and that version is // the form `x.y.z-`, then use it. const candidateVersions = allVersions.filter((version) => - version.startsWith(`${requestedVersion.cliVersion}-`) + version.startsWith(`${cliVersion}-`) ); if (candidateVersions.length === 1) { - logger.debug("Exactly one candidate version found, using that."); + logger.debug( + `Exactly one version of the CodeQL tools starting with ${cliVersion} found in the ` + + "toolcache, using that." + ); codeqlFolder = toolcache.find("CodeQL", candidateVersions[0]); } else { logger.debug( - "Did not find exactly one version of the CodeQL tools starting with the requested version." + `Did not find exactly one version of the CodeQL tools starting with ${cliVersion} ` + + `(instead found ${candidateVersions.length}). Trying next fallback method.` ); } } } - if (!codeqlFolder && requestedVersion.cliVersion) { - // Fall back to accepting a `0.0.0-` version if we didn't find the - // `x.y.z` version. This is to support old versions of the toolcache. - // - // If we are on Dotcom, we will make an HTTP request to the Releases API here - // to find the tag name for the requested version. - tagName = - tagName || (await getOrFindBundleTagName(requestedVersion, logger)); - const fallbackVersion = convertToSemVer( - getBundleVersionFromTagName(tagName), - logger + // Fall back to matching `0.0.0-`. + if (!codeqlFolder && (cliVersion || tagName)) { + if (cliVersion || tagName) { + const fallbackVersion = await tryGetFallbackToolcacheVersion( + cliVersion, + tagName, + variant, + logger + ); + if (fallbackVersion) { + codeqlFolder = toolcache.find("CodeQL", fallbackVersion); + } else { + logger.debug( + "Could not determine a fallback toolcache version number for CodeQL tools version " + + `${humanReadableVersion}.` + ); + } + } else { + logger.debug( + "Both the CLI version and the bundle version are unknown, so we will not be able to find " + + "the requested version of the CodeQL tools in the toolcache." + ); + } + } + + if (codeqlFolder) { + logger.info( + `Found CodeQL tools version ${humanReadableVersion} in the toolcache.` ); - logger.debug( - `Computed a fallback toolcache version number of ${fallbackVersion} for CodeQL tools version ` + - `${requestedVersion.cliVersion}.` + } else { + logger.info( + `Did not find CodeQL tools version ${humanReadableVersion} in the toolcache.` ); - codeqlFolder = toolcache.find("CodeQL", fallbackVersion); } if (codeqlFolder) { return { codeqlFolder, sourceType: "toolcache", - toolsVersion: requestedVersion.syntheticCliVersion, + toolsVersion: cliVersion ?? humanReadableVersion, }; } - logger.debug( - `Did not find CodeQL tools version ${requestedVersion.syntheticCliVersion} in the toolcache.` - ); // If we don't find the requested version on Enterprise, we may allow a // different version to save download time if the version hasn't been // specified explicitly (in which case we always honor it). if (variant !== util.GitHubVariant.DOTCOM && !forceLatest && !toolsInput) { const result = await findOverridingToolsInCache( - requestedVersion.syntheticCliVersion, + humanReadableVersion, logger ); if (result !== undefined) { @@ -500,30 +522,66 @@ export async function getCodeQLSource( } } + if (!url) { + if (!tagName && cliVersion && variant === util.GitHubVariant.DOTCOM) { + tagName = await findCodeQLBundleTagDotcomOnly(cliVersion, logger); + } else if (!tagName) { + throw new Error( + `Could not obtain the requested version (${humanReadableVersion}) of the CodeQL tools ` + + "since we could not compute the tag name." + ); + } + url = await getCodeQLBundleDownloadURL( + tagName, + apiDetails, + variant, + logger + ); + } + return { - cliVersion: requestedVersion.cliVersion || undefined, - codeqlURL: - requestedVersion["url"] || - (await getCodeQLBundleDownloadURL( - tagName || - // The check on `requestedVersion.tagName` is redundant but lets us - // use the property that if we don't know `requestedVersion.tagName`, - // then we must know `requestedVersion.cliVersion`. This property is - // required by the type of `getOrFindBundleTagName`. - (requestedVersion.tagName !== undefined - ? requestedVersion.tagName - : await getOrFindBundleTagName(requestedVersion, logger)), - apiDetails, - variant, - logger - )), + bundleVersion: tagName && tryGetBundleVersionFromTagName(tagName, logger), + cliVersion, + codeqlURL: url, sourceType: "download", - toolsVersion: requestedVersion.syntheticCliVersion, + toolsVersion: cliVersion ?? humanReadableVersion, }; } +/** + * Gets a fallback version number to use when looking for CodeQL in the toolcache if we didn't find + * the `x.y.z` version. This is to support old versions of the toolcache. + */ +export async function tryGetFallbackToolcacheVersion( + cliVersion: string | undefined, + tagName: string | undefined, + variant: util.GitHubVariant, + logger: Logger +): Promise { + // + // If we are on Dotcom, we will make an HTTP request to the Releases API here + // to find the tag name for the requested version. + if (cliVersion && !tagName && variant === util.GitHubVariant.DOTCOM) { + tagName = await findCodeQLBundleTagDotcomOnly(cliVersion, logger); + } + if (!tagName) { + return undefined; + } + const bundleVersion = tryGetBundleVersionFromTagName(tagName, logger); + if (!bundleVersion) { + return undefined; + } + const fallbackVersion = convertToSemVer(bundleVersion, logger); + logger.debug( + `Computed a fallback toolcache version number of ${fallbackVersion} for CodeQL version ` + + `${cliVersion ?? tagName}.` + ); + return fallbackVersion; +} + export async function downloadCodeQL( codeqlURL: string, + maybeBundleVersion: string | undefined, maybeCliVersion: string | undefined, apiDetails: api.GitHubApiDetails, variant: util.GitHubVariant, @@ -577,7 +635,21 @@ export async function downloadCodeQL( const codeqlExtracted = await toolcache.extractTar(codeqlPath); - const bundleVersion = getBundleVersionFromUrl(codeqlURL); + const bundleVersion = + maybeBundleVersion ?? tryGetBundleVersionFromUrl(codeqlURL, logger); + + if (bundleVersion === undefined) { + logger.debug( + "Could not cache CodeQL tools because we could not determine the bundle version from the " + + `URL ${codeqlURL}.` + ); + return { + toolsVersion: maybeCliVersion ?? "unknown", + codeqlFolder: codeqlExtracted, + toolsDownloadDurationMs, + }; + } + // Try to compute the CLI version for this bundle const cliVersion: string | undefined = maybeCliVersion || @@ -675,6 +747,7 @@ export async function setupCodeQLBundle( case "download": { const result = await downloadCodeQL( source.codeqlURL, + source.bundleVersion, source.cliVersion, apiDetails, variant,