export async function getCoreToolsBinary()

in src/core/func-core-tools.ts [265:299]


export async function getCoreToolsBinary(): Promise<string | undefined> {
  const nodeVersion = getNodeMajorVersion();
  const systemVersion = await getInstalledSystemCoreToolsVersion();

  if (systemVersion && isCoreToolsVersionCompatible(systemVersion, nodeVersion)) {
    return DEFAULT_FUNC_BINARY;
  }

  const targetVersion = detectTargetCoreToolsVersion(nodeVersion);
  const downloadedVersion = getDownloadedCoreToolsVersion(targetVersion);
  if (downloadedVersion) {
    // Should we check for newer versions here?
    return getCoreToolBinaryPath(targetVersion);
  }

  if (systemVersion && systemVersion !== targetVersion) {
    logger.warn(`Functions Core Tools version mismatch. Detected v${systemVersion} but requires v${targetVersion}`);
    logger.warn(`Downloading v${targetVersion}...`);
  }

  if (!systemVersion) {
    logger.warn(`Functions Core Tools not detected. Downloading v${targetVersion}...`);
  }

  try {
    await downloadCoreTools(targetVersion);
    logger.log(`\nDownloaded Function Core Tools successfully`);
    return getCoreToolBinaryPath(targetVersion);
  } catch (error: unknown) {
    logger.error(`Failed to download Functions Core Tools v${targetVersion}.`);
    logger.error(error as Error);
    console.log(error);
    return undefined;
  }
}