From cee5a83c02447a30e8e109e82208e352883de471 Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Mon, 18 Dec 2023 11:10:25 -0500 Subject: [PATCH] Fix issues with Webpanel version parsing --- .../Tgstation.Server.ReleaseNotes/Program.cs | 128 +++++++++--------- 1 file changed, 66 insertions(+), 62 deletions(-) diff --git a/tools/Tgstation.Server.ReleaseNotes/Program.cs b/tools/Tgstation.Server.ReleaseNotes/Program.cs index 6ed0724d57..098bbdcdaf 100644 --- a/tools/Tgstation.Server.ReleaseNotes/Program.cs +++ b/tools/Tgstation.Server.ReleaseNotes/Program.cs @@ -1,4 +1,4 @@ -// This program is minimal effort and should be sent to remedial school +// This program is minimal effort and should be sent to remedial school using System; using System.Collections.Concurrent; @@ -567,72 +567,76 @@ namespace Tgstation.Server.ReleaseNotes var mergeCommit = fullPR.MergeCommitSha; // we don't care about unreleased web control panel changes - try + needExtendedComponentVersions = ShouldGetExtendedComponentVersions(); + + var versionsBytes = await RLR(() => client.Repository.Content.GetRawContentByRef(RepoOwner, RepoName, "build/Version.props", mergeCommit)); + + XDocument doc; + using (var ms = new MemoryStream(versionsBytes)) + doc = XDocument.Load(ms); + + var project = doc.Root; + var xmlNamespace = project.GetDefaultNamespace(); + var versionsPropertyGroup = project.Elements().First(x => x.Name == xmlNamespace + "PropertyGroup"); + + Version Parse(string elemName, bool controlPanel = false) { - needExtendedComponentVersions = ShouldGetExtendedComponentVersions(); + var element = versionsPropertyGroup.Element(xmlNamespace + elemName); + if (element == null) + return null; - var versionsBytes = await RLR(() => client.Repository.Content.GetRawContentByRef(RepoOwner, RepoName, "build/Version.props", mergeCommit)); - - XDocument doc; - using (var ms = new MemoryStream(versionsBytes)) - doc = XDocument.Load(ms); - - var project = doc.Root; - var xmlNamespace = project.GetDefaultNamespace(); - var versionsPropertyGroup = project.Elements().First(x => x.Name == xmlNamespace + "PropertyGroup"); - - Version Parse(string elemName, bool controlPanel = false) - { - var element = versionsPropertyGroup.Element(xmlNamespace + elemName); - if (element == null) - return null; - - return Version.Parse(element.Value); - } - - var dict = new Dictionary - { - { Component.Core, Parse("TgsCoreVersion") }, - { Component.HttpApi, Parse("TgsApiVersion") }, - { Component.DreamMakerApi, Parse("TgsDmapiVersion") }, - }; - - if (await needExtendedComponentVersions) - { - // only grab some versions at release time - // we aggregate later - dict.Add(Component.Configuration, Parse("TgsConfigVersion")); - dict.Add(Component.InteropApi, Parse("TgsInteropVersion")); - dict.Add(Component.HostWatchdog, Parse("TgsHostWatchdogVersion")); - dict.Add(Component.NugetCommon, Parse("TgsCommonLibraryVersion")); - dict.Add(Component.NugetApi, Parse("TgsApiLibraryVersion")); - dict.Add(Component.NugetClient, Parse("TgsClientVersion")); - - var webVersion = Parse("TgsWebpanelVersion"); - if (webVersion != null) - { - dict.Add(Component.WebControlPanel, webVersion); - } - else - { - var controlPanelVersionBytes = await RLR(() => client.Repository.Content.GetRawContentByRef(RepoOwner, RepoName, "build/WebpanelVersion.props", mergeCommit)); - using (var ms = new MemoryStream(controlPanelVersionBytes)) - doc = XDocument.Load(ms); - - - project = doc.Root; - var controlPanelXmlNamespace = project.GetDefaultNamespace(); - var controlPanelVersionsPropertyGroup = project.Elements().First(x => x.Name == controlPanelXmlNamespace + "PropertyGroup"); - dict.Add(Component.WebControlPanel, Version.Parse(controlPanelVersionsPropertyGroup.Element(controlPanelXmlNamespace + "TgsWebpanelVersion").Value)); - } - } - - return dict; + return Version.Parse(element.Value); } - catch + + var dict = new Dictionary { - return new Dictionary(); + { Component.Core, Parse("TgsCoreVersion") }, + { Component.HttpApi, Parse("TgsApiVersion") }, + { Component.DreamMakerApi, Parse("TgsDmapiVersion") }, + }; + + if (await needExtendedComponentVersions) + { + // only grab some versions at release time + // we aggregate later + dict.Add(Component.Configuration, Parse("TgsConfigVersion")); + dict.Add(Component.InteropApi, Parse("TgsInteropVersion")); + dict.Add(Component.HostWatchdog, Parse("TgsHostWatchdogVersion")); + dict.Add(Component.NugetCommon, Parse("TgsCommonLibraryVersion")); + dict.Add(Component.NugetApi, Parse("TgsApiLibraryVersion")); + dict.Add(Component.NugetClient, Parse("TgsClientVersion")); + + var webVersion = Parse("TgsControlPanelVersion"); + if (webVersion != null) + { + dict.Add(Component.WebControlPanel, webVersion); + } + else + { + byte[] controlPanelVersionBytes; + string elementName; + try + { + controlPanelVersionBytes = await RLR(() => client.Repository.Content.GetRawContentByRef(RepoOwner, RepoName, "build/WebpanelVersion.props", mergeCommit)); + elementName = "TgsWebpanelVersion"; + } + catch (NotFoundException) + { + controlPanelVersionBytes = await RLR(() => client.Repository.Content.GetRawContentByRef(RepoOwner, RepoName, "build/ControlPanelVersion.props", mergeCommit)); + elementName = "TgsControlPanelVersion"; + } + + using (var ms = new MemoryStream(controlPanelVersionBytes)) + doc = XDocument.Load(ms); + + project = doc.Root; + var controlPanelXmlNamespace = project.GetDefaultNamespace(); + var controlPanelVersionsPropertyGroup = project.Elements().First(x => x.Name == controlPanelXmlNamespace + "PropertyGroup"); + dict.Add(Component.WebControlPanel, Version.Parse(controlPanelVersionsPropertyGroup.Element(controlPanelXmlNamespace + elementName).Value)); + } } + + return dict; } var componentVersions = needComponentExactVersions ? GetComponentVersions() : Task.FromResult>(null);