private string GetSdkStatusMessage(NetSdkInfo sdk)
 {
     if (BundleIsEndOfLife(sdk))
     {
         return(string.Format(LocalizableStrings.OutOfSupportMessage, $"{sdk.Version.Major}.{sdk.Version.Minor}"));
     }
     else if (BundleIsMaintenance(sdk))
     {
         return(string.Format(LocalizableStrings.MaintenanceMessage, $"{sdk.Version.Major}.{sdk.Version.Minor}"));
     }
     else if (NewerSdkPatchExists(sdk))
     {
         return(string.Format(LocalizableStrings.NewPatchAvaliableMessage, NewestSdkPatchVersion(sdk)));
     }
     else
     {
         return(LocalizableStrings.BundleUpToDateMessage);
     }
 }
        private ReleaseVersion NewestSdkPatchVersion(NetSdkInfo bundle)
        {
            var product = _productCollection.First(product => product.ProductVersion.Equals($"{bundle.Version.Major}.{bundle.Version.Minor}"));

            if (product.LatestSdkVersion.SdkFeatureBand == bundle.Version.SdkFeatureBand)
            {
                // This is the latest feature band
                return(product.LatestSdkVersion);
            }
            else
            {
                // Fetch detailed product release information
                var productReleases     = _productCollectionProvider.GetProductReleases(product);
                var featureBandVersions = productReleases
                                          .SelectMany(release => release.Sdks)
                                          .Select(sdk => sdk.Version)
                                          .Where(sdkVersion => sdkVersion.SdkFeatureBand == bundle.Version.SdkFeatureBand);
                return(featureBandVersions.FirstOrDefault());
            }
        }
        private bool NewerSdkPatchExists(NetSdkInfo bundle)
        {
            var newestPatchVesion = NewestSdkPatchVersion(bundle);

            return(newestPatchVesion == null ? false : newestPatchVesion > bundle.Version);
        }