From 75572edc9ca837bcf796e454ddd2b5ece0bf7569 Mon Sep 17 00:00:00 2001 From: Drulikar Date: Sun, 16 Feb 2025 21:45:43 -0600 Subject: [PATCH 1/5] Discord (and IRC to an extent) now mention the changes to TMs in deployment messages --- .../Components/Chat/ChatManager.cs | 2 + .../Components/Chat/IChatManager.cs | 2 + .../Chat/Providers/DiscordProvider.cs | 65 ++++++++++++++++++- .../Components/Chat/Providers/IProvider.cs | 2 + .../Components/Chat/Providers/IrcProvider.cs | 24 ++++++- .../Components/Chat/Providers/Provider.cs | 1 + .../Components/Deployment/DreamMaker.cs | 6 +- .../Live/DummyChatProvider.cs | 1 + 8 files changed, 97 insertions(+), 6 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Chat/ChatManager.cs b/src/Tgstation.Server.Host/Components/Chat/ChatManager.cs index 049c217efb..5faa30dbd2 100644 --- a/src/Tgstation.Server.Host/Components/Chat/ChatManager.cs +++ b/src/Tgstation.Server.Host/Components/Chat/ChatManager.cs @@ -377,6 +377,7 @@ namespace Tgstation.Server.Host.Components.Chat /// public Func> QueueDeploymentMessage( Models.RevisionInformation revisionInformation, + Models.RevisionInformation? previousRevisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, @@ -407,6 +408,7 @@ namespace Tgstation.Server.Host.Components.Chat { var callback = await provider.SendUpdateMessage( revisionInformation, + previousRevisionInformation, engineVersion, estimatedCompletionTime, gitHubOwner, diff --git a/src/Tgstation.Server.Host/Components/Chat/IChatManager.cs b/src/Tgstation.Server.Host/Components/Chat/IChatManager.cs index 8a0aa33fe4..669f21b305 100644 --- a/src/Tgstation.Server.Host/Components/Chat/IChatManager.cs +++ b/src/Tgstation.Server.Host/Components/Chat/IChatManager.cs @@ -61,6 +61,7 @@ namespace Tgstation.Server.Host.Components.Chat /// Send the message for a deployment to configured deployment channels. /// /// The of the deployment. + /// The optional of the previous deployment. /// The of the deployment. /// The optional the deployment is expected to be completed at. /// The repository GitHub owner, if any. @@ -69,6 +70,7 @@ namespace Tgstation.Server.Host.Components.Chat /// A to call to update the message at the deployment's conclusion. Parameters: Error message if any, DreamMaker output if any. Returns an to call to mark the deployment as active/inactive. Parameter: If the deployment is being activated or inactivated. Func> QueueDeploymentMessage( Models.RevisionInformation revisionInformation, + Models.RevisionInformation? previousRevisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs index 7012a94baf..fab0ae4f51 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs @@ -303,6 +303,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers /// public override async ValueTask>>> SendUpdateMessage( Models.RevisionInformation revisionInformation, + Models.RevisionInformation? previousRevisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, @@ -316,7 +317,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers localCommitPushed |= revisionInformation.CommitSha == revisionInformation.OriginCommitSha; - var fields = BuildUpdateEmbedFields(revisionInformation, engineVersion, gitHubOwner, gitHubRepo, localCommitPushed); + var fields = BuildUpdateEmbedFields(revisionInformation, previousRevisionInformation, engineVersion, gitHubOwner, gitHubRepo, localCommitPushed); Optional author = new EmbedAuthor(assemblyInformationProvider.VersionPrefix) { Url = "https://github.com/tgstation/tgstation-server", @@ -900,6 +901,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers /// Create a of s for a discord update embed. /// /// The of the deployment. + /// The optional of the previous deployment. /// The of the deployment. /// The repository GitHub owner, if any. /// The repository GitHub name, if any. @@ -907,6 +909,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers /// A new of s to use. List BuildUpdateEmbedFields( Models.RevisionInformation revisionInformation, + Models.RevisionInformation? previousRevisionInformation, EngineVersion engineVersion, string? gitHubOwner, string? gitHubRepo, @@ -936,6 +939,40 @@ namespace Tgstation.Server.Host.Components.Chat.Providers if (gitHubOwner == null || gitHubRepo == null) return fields; + previousRevisionInformation ??= new Models.RevisionInformation(); + previousRevisionInformation.ActiveTestMerges ??= new List(); + + revisionInformation.ActiveTestMerges ??= new List(); + + var addedTestMerges = revisionInformation + .ActiveTestMerges + .Select(x => x.TestMerge) + .Where(x => !previousRevisionInformation + .ActiveTestMerges + .Any(y => y.TestMerge.Number == x.Number)) + .ToList(); + var removedTestMerges = previousRevisionInformation + .ActiveTestMerges + .Select(x => x.TestMerge) + .Where(x => !revisionInformation + .ActiveTestMerges + .Any(y => y.TestMerge.Number == x.Number)) + .ToList(); + var updatedTestMerges = revisionInformation + .ActiveTestMerges + .Select(x => x.TestMerge) + .Where(x => previousRevisionInformation + .ActiveTestMerges + .Any(y => y.TestMerge.Number == x.Number && y.TestMerge.TargetCommitSha != x.TargetCommitSha)) + .ToList(); + var unchangedTestMerges = revisionInformation + .ActiveTestMerges + .Select(x => x.TestMerge) + .Where(x => previousRevisionInformation + .ActiveTestMerges + .Any(y => y.TestMerge.Number == x.Number && y.TestMerge.TargetCommitSha == x.TargetCommitSha)) + .ToList(); + fields.Add( new EmbedField( "Local Commit", @@ -952,13 +989,35 @@ namespace Tgstation.Server.Host.Components.Chat.Providers : revisionOriginSha[..7], true)); - fields.AddRange((revisionInformation.ActiveTestMerges ?? Enumerable.Empty()) - .Select(x => x.TestMerge) + fields.AddRange(addedTestMerges + .Select(x => new EmbedField( + $"#{x.Number} (Added)", + $"[{x.TitleAtMerge}]({x.Url}) by _[@{x.Author}](https://github.com/{x.Author})_{Environment.NewLine}Commit: [{x.TargetCommitSha![..7]}](https://github.com/{gitHubOwner}/{gitHubRepo}/commit/{x.TargetCommitSha}){(String.IsNullOrWhiteSpace(x.Comment) ? String.Empty : $"{Environment.NewLine}_**{x.Comment}**_")}", + false))); + + fields.AddRange(updatedTestMerges + .Select(x => new EmbedField( + $"#{x.Number} (Updated)", + $"[{x.TitleAtMerge}]({x.Url}) by _[@{x.Author}](https://github.com/{x.Author})_{Environment.NewLine}Commit: [{x.TargetCommitSha![..7]}](https://github.com/{gitHubOwner}/{gitHubRepo}/commit/{x.TargetCommitSha}){(String.IsNullOrWhiteSpace(x.Comment) ? String.Empty : $"{Environment.NewLine}_**{x.Comment}**_")}", + false))); + + fields.AddRange(unchangedTestMerges .Select(x => new EmbedField( $"#{x.Number}", $"[{x.TitleAtMerge}]({x.Url}) by _[@{x.Author}](https://github.com/{x.Author})_{Environment.NewLine}Commit: [{x.TargetCommitSha![..7]}](https://github.com/{gitHubOwner}/{gitHubRepo}/commit/{x.TargetCommitSha}){(String.IsNullOrWhiteSpace(x.Comment) ? String.Empty : $"{Environment.NewLine}_**{x.Comment}**_")}", false))); + if (removedTestMerges.Count != 0) + { + fields.Add( + new EmbedField( + "Removed:", + String.Join( + Environment.NewLine, + removedTestMerges + .Select(x => $"- #{x.Number} [{x.TitleAtMerge}]({x.Url}) by _[@{x.Author}](https://github.com/{x.Author})_")))); + } + return fields; } diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs index 845892d9e0..9264f43a0e 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs @@ -84,6 +84,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers /// Send the message for a deployment. /// /// The of the deployment. + /// The optional of the previous deployment. /// The of the deployment. /// The optional the deployment is expected to be completed at. /// The repository GitHub owner, if any. @@ -94,6 +95,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers /// A resulting in a to call to update the message at the deployment's conclusion. Parameters: Error message if any, DreamMaker output if any. Returns another callback which should be called to mark the deployment as active. ValueTask>>> SendUpdateMessage( Models.RevisionInformation revisionInformation, + Models.RevisionInformation? previousRevisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs index 2aa9916bf7..7ce331065f 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs @@ -17,6 +17,7 @@ using Tgstation.Server.Host.Configuration; using Tgstation.Server.Host.Extensions; using Tgstation.Server.Host.IO; using Tgstation.Server.Host.Jobs; +using Tgstation.Server.Host.Models; using Tgstation.Server.Host.System; using Tgstation.Server.Host.Utils; @@ -217,6 +218,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers /// public override async ValueTask>>> SendUpdateMessage( Models.RevisionInformation revisionInformation, + Models.RevisionInformation? previousRevisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, @@ -230,6 +232,9 @@ namespace Tgstation.Server.Host.Components.Chat.Providers ArgumentNullException.ThrowIfNull(gitHubOwner); ArgumentNullException.ThrowIfNull(gitHubRepo); + previousRevisionInformation ??= new Models.RevisionInformation(); + previousRevisionInformation.ActiveTestMerges ??= new List(); + var commitInsert = revisionInformation.CommitSha![..7]; string remoteCommitInsert; if (revisionInformation.CommitSha == revisionInformation.OriginCommitSha) @@ -252,9 +257,26 @@ namespace Tgstation.Server.Host.Components.Chat.Providers .Select(x => x.TestMerge) .Select(x => { + var status = string.Empty; + if (!previousRevisionInformation.ActiveTestMerges.Any(y => y.TestMerge.Number == x.Number)) + { + status = "Added"; + } + else if (revisionInformation.ActiveTestMerges!.Any(y => y.TestMerge.Number == x.Number && y.TestMerge.TargetCommitSha != x.TargetCommitSha)) + { + status = "Updated"; + } + var result = String.Format(CultureInfo.InvariantCulture, "#{0} at {1}", x.Number, x.TargetCommitSha![..7]); if (x.Comment != null) - result += String.Format(CultureInfo.InvariantCulture, " ({0})", x.Comment); + { + result += String.Format(CultureInfo.InvariantCulture, " ({1} - {0})", x.Comment, status); + } + else if (!string.IsNullOrEmpty(status)) + { + result += String.Format(CultureInfo.InvariantCulture, " ({0})", status); + } + return result; }))); diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/Provider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/Provider.cs index 6be6b71521..e1f58b8288 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/Provider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/Provider.cs @@ -199,6 +199,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers /// public abstract ValueTask>>> SendUpdateMessage( RevisionInformation revisionInformation, + RevisionInformation? previousRevisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, diff --git a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs index eab48e8172..75d31bc5d7 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs @@ -326,7 +326,7 @@ namespace Tgstation.Server.Host.Components.Deployment likelyPushedTestMergeCommit, cancellationToken); - var activeCompileJob = await compileJobConsumer.LatestCompileJob(); + var oldCompileJob = await compileJobConsumer.LatestCompileJob(); try { await databaseContextFactory.UseContext( @@ -374,7 +374,7 @@ namespace Tgstation.Server.Host.Components.Deployment var commentsTask = remoteDeploymentManager!.PostDeploymentComments( compileJob, - activeCompileJob?.RevisionInformation, + oldCompileJob?.RevisionInformation, repositorySettings, repoOwner, repoName, @@ -478,8 +478,10 @@ namespace Tgstation.Server.Host.Components.Deployment try { using var engineLock = await engineManager.UseExecutables(null, null, cancellationToken); + var oldCompileJob = await compileJobConsumer.LatestCompileJob(); currentChatCallback = chatManager.QueueDeploymentMessage( revisionInformation, + oldCompileJob?.RevisionInformation, engineLock.Version, DateTimeOffset.UtcNow + estimatedDuration, repository.RemoteRepositoryOwner, diff --git a/tests/Tgstation.Server.Tests/Live/DummyChatProvider.cs b/tests/Tgstation.Server.Tests/Live/DummyChatProvider.cs index b82cf58226..ea6324cbcf 100644 --- a/tests/Tgstation.Server.Tests/Live/DummyChatProvider.cs +++ b/tests/Tgstation.Server.Tests/Live/DummyChatProvider.cs @@ -105,6 +105,7 @@ namespace Tgstation.Server.Tests.Live public override ValueTask>>> SendUpdateMessage( RevisionInformation revisionInformation, + RevisionInformation previousRevisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string gitHubOwner, From 6be09bf71cca8126f37ee3bb4bc0670aa2487f46 Mon Sep 17 00:00:00 2001 From: Drulikar Date: Sun, 16 Feb 2025 22:00:03 -0600 Subject: [PATCH 2/5] Tweak IRC --- .../Components/Chat/Providers/IrcProvider.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs index 7ce331065f..c0a1e7339a 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs @@ -268,9 +268,17 @@ namespace Tgstation.Server.Host.Components.Chat.Providers } var result = String.Format(CultureInfo.InvariantCulture, "#{0} at {1}", x.Number, x.TargetCommitSha![..7]); + if (x.Comment != null) { - result += String.Format(CultureInfo.InvariantCulture, " ({1} - {0})", x.Comment, status); + if (!string.IsNullOrEmpty(status)) + { + result += String.Format(CultureInfo.InvariantCulture, " ({1} - {0})", x.Comment, status); + } + else + { + result += String.Format(CultureInfo.InvariantCulture, " ({0})", x.Comment); + } } else if (!string.IsNullOrEmpty(status)) { From fac6ddf8bf1294fc4dbfe30f20506ef7e92366b3 Mon Sep 17 00:00:00 2001 From: Drathek <76988376+Drulikar@users.noreply.github.com> Date: Mon, 17 Feb 2025 16:48:38 -0600 Subject: [PATCH 3/5] Update src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs Co-authored-by: Jordan Dominion --- .../Components/Chat/Providers/IProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs index 9264f43a0e..0e32e3dbf6 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/IProvider.cs @@ -84,7 +84,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers /// Send the message for a deployment. /// /// The of the deployment. - /// The optional of the previous deployment. + /// The of the previous deployment if any. /// The of the deployment. /// The optional the deployment is expected to be completed at. /// The repository GitHub owner, if any. From d77cc4d1ef120f75dc75c28e428ff7b0f6140648 Mon Sep 17 00:00:00 2001 From: Drulikar Date: Mon, 17 Feb 2025 19:39:13 -0600 Subject: [PATCH 4/5] Address requested changes --- .../Chat/Providers/DiscordProvider.cs | 33 +++++++------------ .../Components/Chat/Providers/IrcProvider.cs | 33 +++++++------------ .../Components/Deployment/DreamMaker.cs | 6 ++-- .../Remote/BaseRemoteDeploymentManager.cs | 30 +++++++---------- 4 files changed, 37 insertions(+), 65 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs index fab0ae4f51..f76ee34517 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs @@ -939,37 +939,28 @@ namespace Tgstation.Server.Host.Components.Chat.Providers if (gitHubOwner == null || gitHubRepo == null) return fields; - previousRevisionInformation ??= new Models.RevisionInformation(); - previousRevisionInformation.ActiveTestMerges ??= new List(); + var previousTestMerges = (IEnumerable?)previousRevisionInformation?.ActiveTestMerges ?? Enumerable.Empty(); + var currentTestMerges = (IEnumerable?)revisionInformation.ActiveTestMerges ?? Enumerable.Empty(); - revisionInformation.ActiveTestMerges ??= new List(); - - var addedTestMerges = revisionInformation - .ActiveTestMerges + // determine what TMs were changed and how + var addedTestMerges = currentTestMerges .Select(x => x.TestMerge) - .Where(x => !previousRevisionInformation - .ActiveTestMerges + .Where(x => !previousTestMerges .Any(y => y.TestMerge.Number == x.Number)) .ToList(); - var removedTestMerges = previousRevisionInformation - .ActiveTestMerges + var removedTestMerges = previousTestMerges .Select(x => x.TestMerge) - .Where(x => !revisionInformation - .ActiveTestMerges + .Where(x => !currentTestMerges .Any(y => y.TestMerge.Number == x.Number)) .ToList(); - var updatedTestMerges = revisionInformation - .ActiveTestMerges + var updatedTestMerges = currentTestMerges .Select(x => x.TestMerge) - .Where(x => previousRevisionInformation - .ActiveTestMerges + .Where(x => previousTestMerges .Any(y => y.TestMerge.Number == x.Number && y.TestMerge.TargetCommitSha != x.TargetCommitSha)) .ToList(); - var unchangedTestMerges = revisionInformation - .ActiveTestMerges + var unchangedTestMerges = currentTestMerges .Select(x => x.TestMerge) - .Where(x => previousRevisionInformation - .ActiveTestMerges + .Where(x => previousTestMerges .Any(y => y.TestMerge.Number == x.Number && y.TestMerge.TargetCommitSha == x.TargetCommitSha)) .ToList(); @@ -1008,7 +999,6 @@ namespace Tgstation.Server.Host.Components.Chat.Providers false))); if (removedTestMerges.Count != 0) - { fields.Add( new EmbedField( "Removed:", @@ -1016,7 +1006,6 @@ namespace Tgstation.Server.Host.Components.Chat.Providers Environment.NewLine, removedTestMerges .Select(x => $"- #{x.Number} [{x.TitleAtMerge}]({x.Url}) by _[@{x.Author}](https://github.com/{x.Author})_")))); - } return fields; } diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs index c0a1e7339a..ec6d9e4d37 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs @@ -232,8 +232,8 @@ namespace Tgstation.Server.Host.Components.Chat.Providers ArgumentNullException.ThrowIfNull(gitHubOwner); ArgumentNullException.ThrowIfNull(gitHubRepo); - previousRevisionInformation ??= new Models.RevisionInformation(); - previousRevisionInformation.ActiveTestMerges ??= new List(); + var previousTestMerges = (IEnumerable?)previousRevisionInformation?.ActiveTestMerges ?? Enumerable.Empty(); + var currentTestMerges = (IEnumerable?)revisionInformation.ActiveTestMerges ?? Enumerable.Empty(); var commitInsert = revisionInformation.CommitSha![..7]; string remoteCommitInsert; @@ -245,45 +245,34 @@ namespace Tgstation.Server.Host.Components.Chat.Providers else remoteCommitInsert = String.Format(CultureInfo.InvariantCulture, ". Remote commit: ^{0}", revisionInformation.OriginCommitSha![..7]); - var testmergeInsert = (revisionInformation.ActiveTestMerges?.Count ?? 0) == 0 + var testmergeInsert = !currentTestMerges.Any() ? String.Empty : String.Format( CultureInfo.InvariantCulture, " (Test Merges: {0})", String.Join( ", ", - revisionInformation - .ActiveTestMerges! + currentTestMerges .Select(x => x.TestMerge) .Select(x => { var status = string.Empty; - if (!previousRevisionInformation.ActiveTestMerges.Any(y => y.TestMerge.Number == x.Number)) - { + if (!previousTestMerges.Any(y => y.TestMerge.Number == x.Number)) status = "Added"; - } - else if (revisionInformation.ActiveTestMerges!.Any(y => y.TestMerge.Number == x.Number && y.TestMerge.TargetCommitSha != x.TargetCommitSha)) - { + else if (previousTestMerges.Any(y => y.TestMerge.Number == x.Number && y.TestMerge.TargetCommitSha != x.TargetCommitSha)) status = "Updated"; - } - var result = String.Format(CultureInfo.InvariantCulture, "#{0} at {1}", x.Number, x.TargetCommitSha![..7]); + var result = $"#{x.Number} at {x.TargetCommitSha![..7]}"; - if (x.Comment != null) + if (!string.IsNullOrEmpty(x.Comment)) { if (!string.IsNullOrEmpty(status)) - { - result += String.Format(CultureInfo.InvariantCulture, " ({1} - {0})", x.Comment, status); - } + result += $" ({status} - {x.Comment})"; else - { - result += String.Format(CultureInfo.InvariantCulture, " ({0})", x.Comment); - } + result += $" ({x.Comment})"; } else if (!string.IsNullOrEmpty(status)) - { - result += String.Format(CultureInfo.InvariantCulture, " ({0})", status); - } + result += $" ({status})"; return result; }))); diff --git a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs index 75d31bc5d7..85c4c05986 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs @@ -313,9 +313,11 @@ namespace Tgstation.Server.Host.Components.Deployment repositorySettings!.PushTestMergeCommits!.Value && repositorySettings.AccessToken != null && repositorySettings.AccessUser != null; + var oldCompileJob = await compileJobConsumer.LatestCompileJob(); using (repo) compileJob = await Compile( job, + oldCompileJob, revInfo!, dreamMakerSettings!, ddSettings!, @@ -326,7 +328,6 @@ namespace Tgstation.Server.Host.Components.Deployment likelyPushedTestMergeCommit, cancellationToken); - var oldCompileJob = await compileJobConsumer.LatestCompileJob(); try { await databaseContextFactory.UseContext( @@ -447,6 +448,7 @@ namespace Tgstation.Server.Host.Components.Deployment /// Run the compile implementation. /// /// The currently running . + /// The optional of the previous deployment. /// The . /// The . /// The . @@ -459,6 +461,7 @@ namespace Tgstation.Server.Host.Components.Deployment /// A resulting in the completed . async ValueTask Compile( Models.Job job, + Models.CompileJob? oldCompileJob, Models.RevisionInformation revisionInformation, Api.Models.Internal.DreamMakerSettings dreamMakerSettings, DreamDaemonLaunchParameters launchParameters, @@ -478,7 +481,6 @@ namespace Tgstation.Server.Host.Components.Deployment try { using var engineLock = await engineManager.UseExecutables(null, null, cancellationToken); - var oldCompileJob = await compileJobConsumer.LatestCompileJob(); currentChatCallback = chatManager.QueueDeploymentMessage( revisionInformation, oldCompileJob?.RevisionInformation, diff --git a/src/Tgstation.Server.Host/Components/Deployment/Remote/BaseRemoteDeploymentManager.cs b/src/Tgstation.Server.Host/Components/Deployment/Remote/BaseRemoteDeploymentManager.cs index 0f8c86732f..0bcf10579b 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/Remote/BaseRemoteDeploymentManager.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/Remote/BaseRemoteDeploymentManager.cs @@ -66,36 +66,28 @@ namespace Tgstation.Server.Host.Components.Deployment.Remote if (repositorySettings.AccessToken == null) return; - var deployedRevisionInformation = compileJob.RevisionInformation; - if ((previousRevisionInformation != null && previousRevisionInformation.CommitSha == deployedRevisionInformation.CommitSha) + var revisionInformation = compileJob.RevisionInformation; + if ((previousRevisionInformation != null && previousRevisionInformation.CommitSha == revisionInformation.CommitSha) || !repositorySettings.PostTestMergeComment!.Value) return; - previousRevisionInformation ??= new RevisionInformation(); - previousRevisionInformation.ActiveTestMerges ??= new List(); + var previousTestMerges = (IEnumerable?)previousRevisionInformation?.ActiveTestMerges ?? Enumerable.Empty(); + var currentTestMerges = (IEnumerable?)revisionInformation.ActiveTestMerges ?? Enumerable.Empty(); - deployedRevisionInformation.ActiveTestMerges ??= new List(); - - // added prs - var addedTestMerges = deployedRevisionInformation - .ActiveTestMerges + // determine what TMs were changed and how + var addedTestMerges = currentTestMerges .Select(x => x.TestMerge) - .Where(x => !previousRevisionInformation - .ActiveTestMerges + .Where(x => !previousTestMerges .Any(y => y.TestMerge.Number == x.Number)) .ToList(); - var removedTestMerges = previousRevisionInformation - .ActiveTestMerges + var removedTestMerges = previousTestMerges .Select(x => x.TestMerge) - .Where(x => !deployedRevisionInformation - .ActiveTestMerges + .Where(x => !currentTestMerges .Any(y => y.TestMerge.Number == x.Number)) .ToList(); - var updatedTestMerges = deployedRevisionInformation - .ActiveTestMerges + var updatedTestMerges = currentTestMerges .Select(x => x.TestMerge) - .Where(x => previousRevisionInformation - .ActiveTestMerges + .Where(x => previousTestMerges .Any(y => y.TestMerge.Number == x.Number)) .ToList(); From 46ef419dada85a80725ba93c3fbab88ae6507f9f Mon Sep 17 00:00:00 2001 From: Drulikar Date: Sat, 1 Mar 2025 18:48:51 -0600 Subject: [PATCH 5/5] Using repo scope --- .../Components/Deployment/DreamMaker.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs index 39dac81ac2..6f8b05c9d2 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs @@ -336,12 +336,14 @@ namespace Tgstation.Server.Host.Components.Deployment } }); - var likelyPushedTestMergeCommit = - repositorySettings!.PushTestMergeCommits!.Value - && repositorySettings.AccessToken != null - && repositorySettings.AccessUser != null; - var oldCompileJob = await compileJobConsumer.LatestCompileJob(); + Models.CompileJob? oldCompileJob; using (repo) + { + var likelyPushedTestMergeCommit = + repositorySettings!.PushTestMergeCommits!.Value + && repositorySettings.AccessToken != null + && repositorySettings.AccessUser != null; + oldCompileJob = await compileJobConsumer.LatestCompileJob(); compileJob = await Compile( job, oldCompileJob, @@ -354,6 +356,7 @@ namespace Tgstation.Server.Host.Components.Deployment averageSpan, likelyPushedTestMergeCommit, cancellationToken); + } try {