From 8aff5e1a3fd3a5113061d320967418d3c7268268 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Wed, 8 Sep 2021 17:51:18 -0400 Subject: [PATCH] A couple of changes to ensure a smooth transition to V5 Closes #1295 --- src/Tgstation.Server.Api/Models/ErrorCode.cs | 8 +- .../Controllers/AdministrationController.cs | 4 +- .../AdministrationTest.cs | 4 +- tools/ReleaseNotes/Program.cs | 77 ++++++++----------- 4 files changed, 40 insertions(+), 53 deletions(-) diff --git a/src/Tgstation.Server.Api/Models/ErrorCode.cs b/src/Tgstation.Server.Api/Models/ErrorCode.cs index 2b6b268cc5..323d769038 100644 --- a/src/Tgstation.Server.Api/Models/ErrorCode.cs +++ b/src/Tgstation.Server.Api/Models/ErrorCode.cs @@ -48,7 +48,7 @@ namespace Tgstation.Server.Api.Models /// /// Generic database integrity failure. /// - [Description("The operation could not be performed as it would violate database integrity. Please retry the request, making sure to not duplicate field names with existing entities.")] + [Description("The operation could not be performed as it would violate database integrity. Please retry the request, making sure to not duplicate field names with existing entities!")] DatabaseIntegrityConflict, /// @@ -58,9 +58,9 @@ namespace Tgstation.Server.Api.Models MissingHostWatchdog, /// - /// Attempted to change to a suite other than TGS4. + /// Attempted to change to a major version TGS4. /// - [Description("Cannot update to a different tgstation-server suite version.")] + [Description("Cannot downgrade to tgstation-server major version <4!")] CannotChangeServerSuite, /// @@ -72,7 +72,7 @@ namespace Tgstation.Server.Api.Models /// /// A server update was requested while another was in progress. /// - [Description("A server update was requested while another was in progress")] + [Description("A server update was requested while another was in progress!")] ServerUpdateInProgress, /// diff --git a/src/Tgstation.Server.Host/Controllers/AdministrationController.cs b/src/Tgstation.Server.Host/Controllers/AdministrationController.cs index 6b653b2eed..a7dd4c41d8 100644 --- a/src/Tgstation.Server.Host/Controllers/AdministrationController.cs +++ b/src/Tgstation.Server.Host/Controllers/AdministrationController.cs @@ -166,7 +166,7 @@ namespace Tgstation.Server.Host.Controllers foreach (var release in releases) if (Version.TryParse(release.TagName.Replace(updatesConfiguration.GitTagPrefix, String.Empty, StringComparison.Ordinal), out var version) - && version.Major == assemblyInformationProvider.Version.Major + && version.Major > 3 // Forward/backward compatible but not before TGS4 && (greatestVersion == null || version > greatestVersion)) greatestVersion = version; repoUrl = new Uri((await repositoryTask.ConfigureAwait(false)).HtmlUrl); @@ -225,7 +225,7 @@ namespace Tgstation.Server.Host.Controllers AdditionalData = "newVersion is required!", }); - if (model.NewVersion.Major != assemblyInformationProvider.Version.Major) + if (model.NewVersion.Major < 3) return BadRequest(new ErrorMessageResponse(ErrorCode.CannotChangeServerSuite)); if (!serverControl.WatchdogPresent) diff --git a/tests/Tgstation.Server.Tests/AdministrationTest.cs b/tests/Tgstation.Server.Tests/AdministrationTest.cs index 2ea67f7c8d..a3eb17075b 100644 --- a/tests/Tgstation.Server.Tests/AdministrationTest.cs +++ b/tests/Tgstation.Server.Tests/AdministrationTest.cs @@ -1,4 +1,4 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Linq; using System.Threading; @@ -70,7 +70,7 @@ namespace Tgstation.Server.Tests } //we've released a few 4.x versions now, check the release checker is at least somewhat functional - Assert.AreEqual(4, model.LatestVersion.Major); + Assert.IsTrue(4 <= model.LatestVersion.Major); } } } diff --git a/tools/ReleaseNotes/Program.cs b/tools/ReleaseNotes/Program.cs index 9597fdf9df..d431b2568e 100644 --- a/tools/ReleaseNotes/Program.cs +++ b/tools/ReleaseNotes/Program.cs @@ -201,8 +201,6 @@ namespace ReleaseNotes var releases = await releasesTask.ConfigureAwait(false); - var releasingSuite = version.Major; - Version highestReleaseVersion = null; Release highestRelease = null; foreach (var I in releases) @@ -213,7 +211,7 @@ namespace ReleaseNotes continue; } - if (currentReleaseVersion.Major == releasingSuite && (highestReleaseVersion == null || currentReleaseVersion > highestReleaseVersion) && version != currentReleaseVersion) + if (currentReleaseVersion.Major == version.Major && (highestReleaseVersion == null || currentReleaseVersion > highestReleaseVersion) && version != currentReleaseVersion) { highestReleaseVersion = currentReleaseVersion; highestRelease = I; @@ -222,7 +220,7 @@ namespace ReleaseNotes if (highestReleaseVersion == null) { - Console.WriteLine("Unable to determine highest release version for suite " + releasingSuite + "!"); + Console.WriteLine("Unable to determine highest release version for major version " + version.Major + "!"); return 6; } @@ -247,49 +245,38 @@ namespace ReleaseNotes oldNotes = String.Join('\n', splits); string prefix; - switch (releasingSuite) + const string PropsPath = "build/Version.props"; + const string ControlPanelPropsPath = "build/ControlPanelVersion.props"; + + var doc = XDocument.Load(PropsPath); + var project = doc.Root; + var xmlNamespace = project.GetDefaultNamespace(); + var versionsPropertyGroup = project.Elements().First(x => x.Name == xmlNamespace + "PropertyGroup"); + + var doc2 = XDocument.Load(ControlPanelPropsPath); + var project2 = doc2.Root; + var controlPanelXmlNamespace = project2.GetDefaultNamespace(); + var controlPanelVersionsPropertyGroup = project2.Elements().First(x => x.Name == controlPanelXmlNamespace + "PropertyGroup"); + + var coreVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsCoreVersion").Value); + if (coreVersion != version) { - case 4: - const string PropsPath = "build/Version.props"; - const string ControlPanelPropsPath = "build/ControlPanelVersion.props"; - - var doc = XDocument.Load(PropsPath); - var project = doc.Root; - var xmlNamespace = project.GetDefaultNamespace(); - var versionsPropertyGroup = project.Elements().First(x => x.Name == xmlNamespace + "PropertyGroup"); - - var doc2 = XDocument.Load(ControlPanelPropsPath); - var project2 = doc2.Root; - var controlPanelXmlNamespace = project2.GetDefaultNamespace(); - var controlPanelVersionsPropertyGroup = project2.Elements().First(x => x.Name == controlPanelXmlNamespace + "PropertyGroup"); - - var coreVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsCoreVersion").Value); - if (coreVersion != version) - { - Console.WriteLine("Received a different version on command line than in Version.props!"); - return 10; - } - - var apiVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsApiVersion").Value); - var configVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsConfigVersion").Value); - var dmApiVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsDmapiVersion").Value); - var interopVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsInteropVersion").Value); - var webControlVersion = Version.Parse(controlPanelVersionsPropertyGroup.Element(controlPanelXmlNamespace + "TgsControlPanelVersion").Value); - var hostWatchdogVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsHostWatchdogVersion").Value); - - if (webControlVersion.Major == 0) - postControlPanelMessage = true; - - prefix = $"Please refer to the [README](https://github.com/tgstation/tgstation-server#setup) for setup instructions.{Environment.NewLine}{Environment.NewLine}#### Component Versions\nCore: {coreVersion}\nConfiguration: {configVersion}\nHTTP API: {apiVersion}\nDreamMaker API: {dmApiVersion} (Interop: {interopVersion})\n[Web Control Panel](https://github.com/tgstation/tgstation-server-webpanel): {webControlVersion}\nHost Watchdog: {hostWatchdogVersion}"; - break; - case 3: - prefix = "The /tg/station server suite"; - break; - default: - prefix = "See https://tgstation.github.io/tgstation-server for installation instructions"; - break; + Console.WriteLine("Received a different version on command line than in Version.props!"); + return 10; } + var apiVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsApiVersion").Value); + var configVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsConfigVersion").Value); + var dmApiVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsDmapiVersion").Value); + var interopVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsInteropVersion").Value); + var webControlVersion = Version.Parse(controlPanelVersionsPropertyGroup.Element(controlPanelXmlNamespace + "TgsControlPanelVersion").Value); + var hostWatchdogVersion = Version.Parse(versionsPropertyGroup.Element(xmlNamespace + "TgsHostWatchdogVersion").Value); + + if (webControlVersion.Major == 0) + postControlPanelMessage = true; + + prefix = $"Please refer to the [README](https://github.com/tgstation/tgstation-server#setup) for setup instructions.{Environment.NewLine}{Environment.NewLine}#### Component Versions\nCore: {coreVersion}\nConfiguration: {configVersion}\nHTTP API: {apiVersion}\nDreamMaker API: {dmApiVersion} (Interop: {interopVersion})\n[Web Control Panel](https://github.com/tgstation/tgstation-server-webpanel): {webControlVersion}\nHost Watchdog: {hostWatchdogVersion}"; + var newNotes = new StringBuilder(prefix); if (postControlPanelMessage) { @@ -453,7 +440,7 @@ namespace ReleaseNotes newNotes.Append(Environment.NewLine); - if (version != new Version(4, 1, 0)) + if (version.Minor != 0 && version.Build != 0) newNotes.Append(oldNotes); const string OutputPath = "release_notes.md";