diff --git a/src/Tgstation.Server.Host/Configuration/UpdatesConfiguration.cs b/src/Tgstation.Server.Host/Configuration/UpdatesConfiguration.cs index fae04d8684..406560f458 100644 --- a/src/Tgstation.Server.Host/Configuration/UpdatesConfiguration.cs +++ b/src/Tgstation.Server.Host/Configuration/UpdatesConfiguration.cs @@ -39,11 +39,5 @@ /// Asset package containing the new assembly in zip form. /// public string UpdatePackageAssetName { get; set; } = DefaultUpdatePackageAssetName; - - /// - /// Dump all retrieved releases from the GitHub API when a requested release is not found. - /// - /// This is an internal config and may be adjusted or removed without a version change. - public bool DumpReleasesOnNotFound { get; set; } } } diff --git a/src/Tgstation.Server.Host/Core/ServerUpdater.cs b/src/Tgstation.Server.Host/Core/ServerUpdater.cs index 86623be571..d03b6ac2f1 100644 --- a/src/Tgstation.Server.Host/Core/ServerUpdater.cs +++ b/src/Tgstation.Server.Host/Core/ServerUpdater.cs @@ -8,7 +8,6 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Tgstation.Server.Host.Configuration; -using Tgstation.Server.Host.Extensions; using Tgstation.Server.Host.IO; using Tgstation.Server.Host.Swarm; using Tgstation.Server.Host.Utils; @@ -19,9 +18,9 @@ namespace Tgstation.Server.Host.Core sealed class ServerUpdater : IServerUpdater, IServerUpdateExecutor { /// - /// The for the . + /// The for the . /// - readonly IGitHubClientFactory gitHubClientFactory; + readonly IGitHubService gitHubService; /// /// The for the . @@ -61,7 +60,7 @@ namespace Tgstation.Server.Host.Core /// /// Initializes a new instance of the class. /// - /// The value of . + /// The value of . /// The value of . /// The value of . /// The value of . @@ -69,7 +68,7 @@ namespace Tgstation.Server.Host.Core /// The containing the value of . /// The containing the value of . public ServerUpdater( - IGitHubClientFactory gitHubClientFactory, + IGitHubService gitHubService, IIOManager ioManager, IFileDownloader fileDownloader, IServerControl serverControl, @@ -77,7 +76,7 @@ namespace Tgstation.Server.Host.Core IOptions generalConfigurationOptions, IOptions updatesConfigurationOptions) { - this.gitHubClientFactory = gitHubClientFactory ?? throw new ArgumentNullException(nameof(gitHubClientFactory)); + this.gitHubService = gitHubService ?? throw new ArgumentNullException(nameof(gitHubService)); this.ioManager = ioManager ?? throw new ArgumentNullException(nameof(ioManager)); this.fileDownloader = fileDownloader ?? throw new ArgumentNullException(nameof(fileDownloader)); this.serverControl = serverControl ?? throw new ArgumentNullException(nameof(serverControl)); @@ -224,64 +223,38 @@ namespace Tgstation.Server.Host.Core async Task BeginUpdateImpl(ISwarmService swarmService, Version newVersion, bool recursed, CancellationToken cancellationToken) { logger.LogDebug("Looking for GitHub releases version {version}...", newVersion); - var gitHubClient = gitHubClientFactory.CreateClient(); - var releases = await gitHubClient - .Repository - .Release - .GetAll(updatesConfiguration.GitHubRepositoryId) - .WithToken(cancellationToken); - logger.LogTrace("Received {releaseCount} total releases from GitHub", releases.Count); - - var filteredReleases = releases - .Where(x => x.TagName.StartsWith(updatesConfiguration.GitTagPrefix, StringComparison.InvariantCulture)) - .ToList(); - - logger.LogTrace( - "Filtered to {releaseCount} releases matching the configured tag prefix of \"{tagPrefix}\"", - filteredReleases.Count, - updatesConfiguration.GitTagPrefix); - - foreach (var release in filteredReleases) - if (Version.TryParse( - release.TagName.Replace( - updatesConfiguration.GitTagPrefix, String.Empty, StringComparison.Ordinal), - out var version)) + var releases = await gitHubService.GetTgsReleases(cancellationToken); + foreach (var kvp in releases) + { + var version = kvp.Key; + var release = kvp.Value; + if (version == newVersion) { - if (version == newVersion) + var asset = release.Assets.Where(x => x.Name.Equals(updatesConfiguration.UpdatePackageAssetName, StringComparison.Ordinal)).FirstOrDefault(); + if (asset == default) + continue; + + serverUpdateOperation = new ServerUpdateOperation { - var asset = release.Assets.Where(x => x.Name.Equals(updatesConfiguration.UpdatePackageAssetName, StringComparison.Ordinal)).FirstOrDefault(); - if (asset == default) - continue; + TargetVersion = version, + UpdateZipUrl = new Uri(asset.BrowserDownloadUrl), + SwarmService = swarmService, + }; - serverUpdateOperation = new ServerUpdateOperation - { - TargetVersion = version, - UpdateZipUrl = new Uri(asset.BrowserDownloadUrl), - SwarmService = swarmService, - }; - - try - { - if (!serverControl.TryStartUpdate(this, version)) - return ServerUpdateResult.UpdateInProgress; - } - finally - { - serverUpdateOperation = null; - } - - return ServerUpdateResult.Started; + try + { + if (!serverControl.TryStartUpdate(this, version)) + return ServerUpdateResult.UpdateInProgress; + } + finally + { + serverUpdateOperation = null; } - } - else - logger.LogDebug("Unparsable release tag: {releaseTag}", release.TagName); - if (updatesConfiguration.DumpReleasesOnNotFound) - logger.LogInformation( - "Found releases:{newline}\t{releases}", - Environment.NewLine, - String.Join($"{Environment.NewLine}\t", releases.Select(x => x.TagName).OrderBy(x => x))); + return ServerUpdateResult.Started; + } + } if (!recursed) { diff --git a/tests/Tgstation.Server.Tests/Live/LiveTestingServer.cs b/tests/Tgstation.Server.Tests/Live/LiveTestingServer.cs index 6a66269efb..4aa9e70604 100644 --- a/tests/Tgstation.Server.Tests/Live/LiveTestingServer.cs +++ b/tests/Tgstation.Server.Tests/Live/LiveTestingServer.cs @@ -49,7 +49,7 @@ namespace Tgstation.Server.Tests.Live SerilogContextHelper.AddSwarmNodeIdentifierToTemplate(); } - public LiveTestingServer(SwarmConfiguration swarmConfiguration, bool enableOAuth, ushort port = 5010, bool dumpOnMissingUpdate = true) + public LiveTestingServer(SwarmConfiguration swarmConfiguration, bool enableOAuth, ushort port = 5010) { Directory = Environment.GetEnvironmentVariable("TGS_TEST_TEMP_DIRECTORY"); if (string.IsNullOrWhiteSpace(Directory)) @@ -116,9 +116,6 @@ namespace Tgstation.Server.Tests.Live $"Session:LowPriorityDeploymentProcesses={LowPriorityDeployments}", }; - if (dumpOnMissingUpdate) - args.Add("Updates:DumpReleasesOnNotFound=true"); - swarmArgs = new List(); if (swarmConfiguration != null) { diff --git a/tests/Tgstation.Server.Tests/Live/TestLiveServer.cs b/tests/Tgstation.Server.Tests/Live/TestLiveServer.cs index 5b10b5b6d6..d75a40c8ef 100644 --- a/tests/Tgstation.Server.Tests/Live/TestLiveServer.cs +++ b/tests/Tgstation.Server.Tests/Live/TestLiveServer.cs @@ -218,7 +218,7 @@ namespace Tgstation.Server.Tests.Live [TestMethod] public async Task TestUpdateBadVersion() { - using var server = new LiveTestingServer(null, false, dumpOnMissingUpdate: false); + using var server = new LiveTestingServer(null, false); using var serverCts = new CancellationTokenSource(); var cancellationToken = serverCts.Token; var serverTask = server.Run(cancellationToken);