await callWithTelemetryAndErrorHandling()

in apps/vs-code-designer/src/app/commands/funcCoreTools/validateFuncCoreToolsIsLatest.ts [62:145]


  await callWithTelemetryAndErrorHandling('azureLogicAppsStandard.validateFuncCoreToolsIsLatest', async (context: IActionContext) => {
    context.errorHandling.suppressDisplay = true;
    context.telemetry.properties.isActivationEvent = 'true';

    const showMultiCoreToolsWarningKey = 'showMultiCoreToolsWarning';
    const showMultiCoreToolsWarning = !!getWorkspaceSetting<boolean>(showMultiCoreToolsWarningKey);

    const showCoreToolsWarningKey = 'showCoreToolsWarning';
    const showCoreToolsWarning = !!getWorkspaceSetting<boolean>(showCoreToolsWarningKey);

    if (showCoreToolsWarning || showMultiCoreToolsWarning) {
      const packageManagers: PackageManager[] = await getFuncPackageManagers(true /* isFuncInstalled */);
      let packageManager: PackageManager;

      if (packageManagers.length === 0) {
        return;
      }
      if (packageManagers.length === 1) {
        packageManager = packageManagers[0];
        context.telemetry.properties.packageManager = packageManager;
      } else {
        context.telemetry.properties.multiFunc = 'true';

        if (showMultiCoreToolsWarning) {
          const message: string = localize('multipleInstalls', 'Detected multiple installs of the func cli.');
          const selectUninstall: MessageItem = { title: localize('selectUninstall', 'Select version to uninstall') };
          const result: MessageItem = await context.ui.showWarningMessage(message, selectUninstall, DialogResponses.dontWarnAgain);

          if (result === selectUninstall) {
            await executeOnFunctions(uninstallFuncCoreTools, context, packageManagers);
          } else if (result === DialogResponses.dontWarnAgain) {
            await updateGlobalSetting(showMultiCoreToolsWarningKey, false);
          }
        }

        return;
      }

      if (showCoreToolsWarning) {
        const localVersion: string | null = await getLocalFuncCoreToolsVersion();
        if (!localVersion) {
          return;
        }
        context.telemetry.properties.localVersion = localVersion;

        const versionFromSetting: FuncVersion | undefined = tryParseFuncVersion(localVersion);
        if (versionFromSetting === undefined) {
          return;
        }

        const newestVersion: string | undefined = await getNewestFunctionRuntimeVersion(packageManager, versionFromSetting, context);
        if (!newestVersion) {
          return;
        }

        if (semver.major(newestVersion) === semver.major(localVersion) && semver.gt(newestVersion, localVersion)) {
          context.telemetry.properties.outOfDateFunc = 'true';
          const message: string = localize(
            'outdatedFunctionRuntime',
            'Update your Azure Functions Core Tools ({0}) to the latest ({1}) for the best experience.',
            localVersion,
            newestVersion
          );

          const update: MessageItem = { title: localize('update', 'Update') };
          let result: MessageItem;

          do {
            result =
              packageManager !== undefined
                ? await context.ui.showWarningMessage(message, update, DialogResponses.learnMore, DialogResponses.dontWarnAgain)
                : await context.ui.showWarningMessage(message, DialogResponses.learnMore, DialogResponses.dontWarnAgain);
            if (result === DialogResponses.learnMore) {
              await openUrl('https://aka.ms/azFuncOutdated');
            } else if (result === update) {
              await updateFuncCoreTools(context, packageManager, versionFromSetting);
            } else if (result === DialogResponses.dontWarnAgain) {
              await updateGlobalSetting(showCoreToolsWarningKey, false);
            }
          } while (result === DialogResponses.learnMore);
        }
      }
    }
  });