From ea6e06a0eb08a2ad5f469ab19fb7ee6cb9ae4f77 Mon Sep 17 00:00:00 2001 From: John Campion Jr <1094820+JohnCampionJr@users.noreply.github.com> Date: Mon, 8 Jun 2026 15:26:50 -0400 Subject: [PATCH 1/2] Fix dependent propagation when a project has multiple dependents GetProjectsDependentsNames added each dependent to its set but then overwrote the entry with a fresh single-element set, so only the last dependent survived. Add to the existing set instead of replacing it. --- .changeset/fix-multiple-dependents.md | 5 ++++ .../Version/Helpers/ChangelogGenerator.cs | 7 +++-- .../Version/ChangelogGeneratorTests.cs | 30 +++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 .changeset/fix-multiple-dependents.md diff --git a/.changeset/fix-multiple-dependents.md b/.changeset/fix-multiple-dependents.md new file mode 100644 index 0000000..32803c5 --- /dev/null +++ b/.changeset/fix-multiple-dependents.md @@ -0,0 +1,5 @@ +--- +"SolarWinds.Changesets": Patch +--- + +Fix `version` only bumping one dependent when a project is referenced by multiple projects. diff --git a/src/SolarWinds.Changesets/Commands/Version/Helpers/ChangelogGenerator.cs b/src/SolarWinds.Changesets/Commands/Version/Helpers/ChangelogGenerator.cs index f759077..9e339d7 100644 --- a/src/SolarWinds.Changesets/Commands/Version/Helpers/ChangelogGenerator.cs +++ b/src/SolarWinds.Changesets/Commands/Version/Helpers/ChangelogGenerator.cs @@ -80,12 +80,13 @@ private static ImmutableDictionary GetProjectsDependentsNam { foreach (string projectReferenceName in csProject.ReferencedProjectNames) { - if (csProjectNameToDependentProjects.TryGetValue(projectReferenceName, out HashSet? value)) + if (!csProjectNameToDependentProjects.TryGetValue(projectReferenceName, out HashSet? value)) { - value.Add(csProject); + value = []; + csProjectNameToDependentProjects[projectReferenceName] = value; } - csProjectNameToDependentProjects[projectReferenceName] = [csProject]; + value.Add(csProject); } } diff --git a/tests/SolarWinds.Changesets.Tests/Version/ChangelogGeneratorTests.cs b/tests/SolarWinds.Changesets.Tests/Version/ChangelogGeneratorTests.cs index 3061ffa..ad6f6b6 100644 --- a/tests/SolarWinds.Changesets.Tests/Version/ChangelogGeneratorTests.cs +++ b/tests/SolarWinds.Changesets.Tests/Version/ChangelogGeneratorTests.cs @@ -88,6 +88,36 @@ public void GetProcessedChangelogs_OneChangelogThreeProjectsOneProjectReference_ secondModule.GetNewVersion().Should().BeEquivalentTo(new Semver(1, 1, 2)); } + [Test] + public void GetProcessedChangelogs_ProjectWithTwoDependents_BumpsBothDependents() + { + ChangelogGenerator changelogGenerator = new(); + + ChangesetFile[] changesetFile = [ + new( + ["project1"], + BumpType.Minor, + "Changelog for shared project") + ]; + + // project2 and project3 both reference project1 + IEnumerable csProjects = [ + new("project1", new Semver(1, 0, 0), [], @"c:\temp"), + new("project2", new Semver(1, 0, 0), ["project1"], @"c:\temp"), + new("project3", new Semver(1, 0, 0), ["project1"], @"c:\temp") + ]; + + List processedChangelogs = changelogGenerator.GetProcessedChangelogs(changesetFile, csProjects).ToList(); + + processedChangelogs.Select(x => x.ModuleName).Should().BeEquivalentTo(["project1", "project2", "project3"]); + + ModuleChangelog project2 = processedChangelogs.First(x => x.ModuleName == "project2"); + ModuleChangelog project3 = processedChangelogs.First(x => x.ModuleName == "project3"); + + project2.GetNewVersion().Should().BeEquivalentTo(new Semver(1, 0, 1)); + project3.GetNewVersion().Should().BeEquivalentTo(new Semver(1, 0, 1)); + } + [Test] public void GetProcessedChangelogs_OneProject_ReturnsOneChangelog() { From 6c96d829053b6e9763dc3409ccee59a6e2fa9997 Mon Sep 17 00:00:00 2001 From: John Campion Jr <1094820+JohnCampionJr@users.noreply.github.com> Date: Mon, 8 Jun 2026 16:06:25 -0400 Subject: [PATCH 2/2] Order dependents deterministically by project name HashSet iteration order can vary between runs (records hash by value and string hashing is randomized per process), so sort dependents by name when materializing to keep output ordering stable. --- .../Commands/Version/Helpers/ChangelogGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SolarWinds.Changesets/Commands/Version/Helpers/ChangelogGenerator.cs b/src/SolarWinds.Changesets/Commands/Version/Helpers/ChangelogGenerator.cs index 9e339d7..313db3b 100644 --- a/src/SolarWinds.Changesets/Commands/Version/Helpers/ChangelogGenerator.cs +++ b/src/SolarWinds.Changesets/Commands/Version/Helpers/ChangelogGenerator.cs @@ -90,7 +90,7 @@ private static ImmutableDictionary GetProjectsDependentsNam } } - return csProjectNameToDependentProjects.ToImmutableDictionary(pair => pair.Key, pair => pair.Value.ToArray()); + return csProjectNameToDependentProjects.ToImmutableDictionary(pair => pair.Key, pair => pair.Value.OrderBy(p => p.Name).ToArray()); } ///