GenerateToolingFeed/V3Format/V3FormatFeedEntryUpdater.cs (60 lines of code) (raw):

using Newtonsoft.Json.Linq; using System; namespace GenerateToolingFeed.V3Format { internal class V3FormatFeedEntryUpdater : IFeedEntryUpdater { public JObject GetUpdatedFeedEntry(JObject feed, CoreToolsInfo coreToolsInfo) { var feedEntry = feed.ToObject<V3FormatFeedEntry>(); UpdateCoreToolsReferences(feedEntry, coreToolsInfo); UpdateDotnetTemplatesToLatest(feedEntry, coreToolsInfo.MajorVersion); Helper.MergeObjectToJToken(feed, feedEntry); return feed; } private void UpdateCoreToolsReferences(V3FormatFeedEntry feedEntry, CoreToolsInfo coreToolsInfo) { var cliEntry = new V3FormatCliEntry { OS = "windows", Architecture = "x86" }; feedEntry.cli = GetDownloadLink(cliEntry.OS ?? cliEntry.OperatingSystem, cliEntry.Architecture, coreToolsInfo.Version, isMinified: true); feedEntry.sha2 = Helper.GetShaFileContent(cliEntry.OS ?? cliEntry.OperatingSystem, cliEntry.Architecture, coreToolsInfo.Version, coreToolsInfo.ArtifactsDirectory, isMinified: true); feedEntry.standaloneCli = UpdateStandaloneCli(feedEntry.standaloneCli, coreToolsInfo.ArtifactsDirectory, coreToolsInfo.Version); } private void UpdateDotnetTemplatesToLatest(V3FormatFeedEntry feedEntry, int coreToolsMajor) { feedEntry.itemTemplates = Helper.GetTemplateUrl("Microsoft.Azure.WebJobs.ItemTemplates", coreToolsMajor); feedEntry.projectTemplates = Helper.GetTemplateUrl("Microsoft.Azure.WebJobs.ProjectTemplates", coreToolsMajor); } private static V3FormatCliEntry[] UpdateStandaloneCli(V3FormatCliEntry[] cliEntries, string coreToolsArtifactsDirectory, string cliVersion) { foreach (var cliEntry in cliEntries) { bool minified = ShouldBeMinified(cliEntry); cliEntry.sha2 = Helper.GetShaFileContent(cliEntry.OS ?? cliEntry.OperatingSystem, cliEntry.Architecture, cliVersion, coreToolsArtifactsDirectory, minified); cliEntry.downloadLink = GetDownloadLink(cliEntry.OS ?? cliEntry.OperatingSystem, cliEntry.Architecture, cliVersion, minified); } return cliEntries; } private static bool ShouldBeMinified(V3FormatCliEntry cliEntry) { string os = cliEntry.OS ?? cliEntry.OperatingSystem; return os.Equals("Windows", StringComparison.OrdinalIgnoreCase) && cliEntry.Architecture.Equals("x64", StringComparison.OrdinalIgnoreCase); } private static string GetDownloadLink(string os, string architecture, string cliVersion, bool isMinified = false, string linkSuffix = "") { string rid = isMinified ? "min." : string.Empty; rid += Helper.GetRuntimeIdentifier(false, os, architecture); var url = $"https://cdn.functions.azure.com/public/{cliVersion}/Azure.Functions.Cli.{rid}{linkSuffix}.{cliVersion}.zip"; string bypassDownloadLinkValidation = Environment.GetEnvironmentVariable("bypassDownloadLinkValidation"); if (bypassDownloadLinkValidation != "1" && !Helper.IsValidDownloadLink(url)) { throw new Exception($"{url} is not valid or no found. Cannot generate cli feed file"); } return url; } } }