Skip to content

Commit e97ef26

Browse files
CopilotMalcolmnixon
andcommitted
Merge ChangeData into ChangeInfo by adding Type property
Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com>
1 parent e35733e commit e97ef26

File tree

6 files changed

+30
-38
lines changed

6 files changed

+30
-38
lines changed

src/DemaConsulting.BuildMark/BuildInformation.cs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,8 @@ namespace DemaConsulting.BuildMark;
2626
/// <param name="Id">Change ID.</param>
2727
/// <param name="Title">Change title.</param>
2828
/// <param name="Url">Change URL.</param>
29-
public record ChangeInfo(string Id, string Title, string Url);
30-
31-
/// <summary>
32-
/// Represents detailed change data including type information.
33-
/// </summary>
34-
/// <param name="Id">Change ID.</param>
35-
/// <param name="Title">Change title.</param>
36-
/// <param name="Url">Change URL.</param>
3729
/// <param name="Type">Change type (bug, feature, etc.).</param>
38-
public record ChangeData(string Id, string Title, string Url, string Type);
30+
public record ChangeInfo(string Id, string Title, string Url, string Type);
3931

4032
/// <summary>
4133
/// Represents build information for a release.
@@ -188,11 +180,11 @@ public static async Task<BuildInformation> CreateAsync(IRepoConnector connector,
188180
// Categorize change by type
189181
if (change.Type == "bug")
190182
{
191-
bugs.Add(new ChangeInfo(change.Id, change.Title, change.Url));
183+
bugs.Add(change);
192184
}
193185
else
194186
{
195-
nonBugChanges.Add(new ChangeInfo(change.Id, change.Title, change.Url));
187+
nonBugChanges.Add(change);
196188
}
197189
}
198190

@@ -210,7 +202,7 @@ public static async Task<BuildInformation> CreateAsync(IRepoConnector connector,
210202
// Only include bugs in known issues list
211203
if (issue.Type == "bug")
212204
{
213-
knownIssues.Add(new ChangeInfo(issue.Id, issue.Title, issue.Url));
205+
knownIssues.Add(issue);
214206
}
215207
}
216208

src/DemaConsulting.BuildMark/RepoConnectors/GitHubRepoConnector.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public override async Task<List<Version>> GetTagHistoryAsync()
8686
/// <param name="from">Starting version (null for start of history).</param>
8787
/// <param name="to">Ending version (null for current state).</param>
8888
/// <returns>List of changes with full information.</returns>
89-
public override async Task<List<ChangeData>> GetChangesBetweenTagsAsync(Version? from, Version? to)
89+
public override async Task<List<ChangeInfo>> GetChangesBetweenTagsAsync(Version? from, Version? to)
9090
{
9191
// Get commits using GitHub API
9292
string commitHashesOutput;
@@ -131,11 +131,11 @@ public override async Task<List<ChangeData>> GetChangesBetweenTagsAsync(Version?
131131
catch (InvalidOperationException)
132132
{
133133
// Fallback to empty result if batch query fails
134-
return new List<ChangeData>();
134+
return new List<ChangeInfo>();
135135
}
136136

137137
// Parse PR data and extract changes
138-
var changes = new List<ChangeData>();
138+
var changes = new List<ChangeInfo>();
139139
var processedIssues = new HashSet<string>();
140140

141141
var prLines = prDataOutput
@@ -207,7 +207,7 @@ public override async Task<List<ChangeData>> GetChangesBetweenTagsAsync(Version?
207207
}
208208
}
209209

210-
changes.Add(new ChangeData(issueNumber, issueTitle, issueUrl, issueType));
210+
changes.Add(new ChangeInfo(issueNumber, issueTitle, issueUrl, issueType));
211211
hasIssues = true;
212212
}
213213
}
@@ -243,7 +243,7 @@ public override async Task<List<ChangeData>> GetChangesBetweenTagsAsync(Version?
243243
}
244244
}
245245

246-
changes.Add(new ChangeData($"#{prNumber}", prTitle, prUrl, prType));
246+
changes.Add(new ChangeInfo($"#{prNumber}", prTitle, prUrl, prType));
247247
}
248248
}
249249
catch (System.Text.Json.JsonException)
@@ -295,14 +295,14 @@ public override async Task<string> GetHashForTagAsync(string? tag)
295295
/// Gets the list of open issues with their details.
296296
/// </summary>
297297
/// <returns>List of open issues with full information.</returns>
298-
public override async Task<List<ChangeData>> GetOpenIssuesAsync()
298+
public override async Task<List<ChangeInfo>> GetOpenIssuesAsync()
299299
{
300300
// Fetch all open issues with full details in a single batch call
301301
// Arguments: --state open (open issues only), --json to get all required fields
302302
// Output: JSON array with issue details
303303
var output = await RunCommandAsync("gh", "issue list --state open --json number,title,url,labels --jq '.[] | @json'");
304304

305-
var openIssues = new List<ChangeData>();
305+
var openIssues = new List<ChangeInfo>();
306306
var lines = output
307307
.Split('\n', StringSplitOptions.RemoveEmptyEntries)
308308
.Select(line => line.Trim())
@@ -347,7 +347,7 @@ public override async Task<List<ChangeData>> GetOpenIssuesAsync()
347347
}
348348
}
349349

350-
openIssues.Add(new ChangeData(issueNumber, issueTitle, issueUrl, issueType));
350+
openIssues.Add(new ChangeInfo(issueNumber, issueTitle, issueUrl, issueType));
351351
}
352352
catch (System.Text.Json.JsonException)
353353
{

src/DemaConsulting.BuildMark/RepoConnectors/IRepoConnector.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public interface IRepoConnector
3737
/// <param name="from">Starting version (null for start of history).</param>
3838
/// <param name="to">Ending version (null for current state).</param>
3939
/// <returns>List of changes with full information.</returns>
40-
Task<List<ChangeData>> GetChangesBetweenTagsAsync(Version? from, Version? to);
40+
Task<List<ChangeInfo>> GetChangesBetweenTagsAsync(Version? from, Version? to);
4141

4242
/// <summary>
4343
/// Gets the git hash for a tag.
@@ -50,5 +50,5 @@ public interface IRepoConnector
5050
/// Gets the list of open issues with their details.
5151
/// </summary>
5252
/// <returns>List of open issues with full information.</returns>
53-
Task<List<ChangeData>> GetOpenIssuesAsync();
53+
Task<List<ChangeInfo>> GetOpenIssuesAsync();
5454
}

src/DemaConsulting.BuildMark/RepoConnectors/MockRepoConnector.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public Task<List<Version>> GetTagHistoryAsync()
8484
/// <param name="from">Starting version (null for start of history).</param>
8585
/// <param name="to">Ending version (null for current state).</param>
8686
/// <returns>List of changes with full information.</returns>
87-
public Task<List<ChangeData>> GetChangesBetweenTagsAsync(Version? from, Version? to)
87+
public Task<List<ChangeInfo>> GetChangesBetweenTagsAsync(Version? from, Version? to)
8888
{
8989
// Extract tag names from version objects
9090
var fromTagName = from?.Tag;
@@ -110,7 +110,7 @@ public Task<List<ChangeData>> GetChangesBetweenTagsAsync(Version? from, Version?
110110
}
111111

112112
// Build changes from PRs
113-
var changes = new List<ChangeData>();
113+
var changes = new List<ChangeInfo>();
114114
foreach (var pr in prs)
115115
{
116116
// Get issues for this PR
@@ -124,13 +124,13 @@ public Task<List<ChangeData>> GetChangesBetweenTagsAsync(Version? from, Version?
124124
var title = _issueTitles.TryGetValue(issueId, out var issueTitle) ? issueTitle : $"Issue {issueId}";
125125
var url = $"https://github.com/example/repo/issues/{issueId}";
126126
var type = _issueTypes.TryGetValue(issueId, out var issueType) ? issueType : "other";
127-
changes.Add(new ChangeData(issueId, title, url, type));
127+
changes.Add(new ChangeInfo(issueId, title, url, type));
128128
}
129129
}
130130
else
131131
{
132132
// PR has no issues - treat the PR itself as a change
133-
changes.Add(new ChangeData(
133+
changes.Add(new ChangeInfo(
134134
$"#{pr}",
135135
$"PR #{pr}",
136136
$"https://github.com/example/repo/pull/{pr}",
@@ -165,11 +165,11 @@ public Task<string> GetHashForTagAsync(string? tag)
165165
/// Gets the list of open issues with their details.
166166
/// </summary>
167167
/// <returns>List of open issues with full information.</returns>
168-
public Task<List<ChangeData>> GetOpenIssuesAsync()
168+
public Task<List<ChangeInfo>> GetOpenIssuesAsync()
169169
{
170170
// Return predefined list of open issues with full details
171171
var openIssuesData = _openIssues
172-
.Select(issueId => new ChangeData(
172+
.Select(issueId => new ChangeInfo(
173173
issueId,
174174
_issueTitles.TryGetValue(issueId, out var title) ? title : $"Issue {issueId}",
175175
$"https://github.com/example/repo/issues/{issueId}",

src/DemaConsulting.BuildMark/RepoConnectors/RepoConnectorBase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ protected virtual Task<string> RunCommandAsync(string command, string arguments,
4949
/// <param name="from">Starting version (null for start of history).</param>
5050
/// <param name="to">Ending version (null for current state).</param>
5151
/// <returns>List of changes with full information.</returns>
52-
public abstract Task<List<ChangeData>> GetChangesBetweenTagsAsync(Version? from, Version? to);
52+
public abstract Task<List<ChangeInfo>> GetChangesBetweenTagsAsync(Version? from, Version? to);
5353

5454
/// <summary>
5555
/// Gets the git hash for a tag.
@@ -62,5 +62,5 @@ protected virtual Task<string> RunCommandAsync(string command, string arguments,
6262
/// Gets the list of open issues with their details.
6363
/// </summary>
6464
/// <returns>List of open issues with full information.</returns>
65-
public abstract Task<List<ChangeData>> GetOpenIssuesAsync();
65+
public abstract Task<List<ChangeInfo>> GetOpenIssuesAsync();
6666
}

test/DemaConsulting.BuildMark.Tests/BuildInformationTests.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ public void BuildInformation_ToMarkdown_DisplaysNAForEmptyChanges()
267267
"abc123",
268268
"def456",
269269
new List<ChangeInfo>(), // No changes
270-
new List<ChangeInfo> { new ChangeInfo("2", "Bug fix", "https://example.com/2") },
270+
new List<ChangeInfo> { new ChangeInfo("2", "Bug fix", "https://example.com/2", "bug") },
271271
new List<ChangeInfo>());
272272

273273
// Act
@@ -292,7 +292,7 @@ public void BuildInformation_ToMarkdown_DisplaysNAForEmptyBugs()
292292
Version.Create("v1.1.0"),
293293
"abc123",
294294
"def456",
295-
new List<ChangeInfo> { new ChangeInfo("1", "Feature", "https://example.com/1") },
295+
new List<ChangeInfo> { new ChangeInfo("1", "Feature", "https://example.com/1", "feature") },
296296
new List<ChangeInfo>(), // No bugs
297297
new List<ChangeInfo>());
298298

@@ -350,9 +350,9 @@ public async Task BuildInformation_ToMarkdown_HandlesFirstReleaseWithNA()
350350
private class MockRepoConnectorEmpty : IRepoConnector
351351
{
352352
public Task<List<Version>> GetTagHistoryAsync() => Task.FromResult(new List<Version>());
353-
public Task<List<ChangeData>> GetChangesBetweenTagsAsync(Version? from, Version? to) => Task.FromResult(new List<ChangeData>());
353+
public Task<List<ChangeInfo>> GetChangesBetweenTagsAsync(Version? from, Version? to) => Task.FromResult(new List<ChangeInfo>());
354354
public Task<string> GetHashForTagAsync(string? tag) => Task.FromResult("hash123");
355-
public Task<List<ChangeData>> GetOpenIssuesAsync() => Task.FromResult(new List<ChangeData>());
355+
public Task<List<ChangeInfo>> GetOpenIssuesAsync() => Task.FromResult(new List<ChangeInfo>());
356356
}
357357

358358
/// <summary>
@@ -364,9 +364,9 @@ public Task<List<Version>> GetTagHistoryAsync()
364364
{
365365
return Task.FromResult(new List<Version> { Version.Create("v1.0.0") });
366366
}
367-
public Task<List<ChangeData>> GetChangesBetweenTagsAsync(Version? from, Version? to) => Task.FromResult(new List<ChangeData>());
367+
public Task<List<ChangeInfo>> GetChangesBetweenTagsAsync(Version? from, Version? to) => Task.FromResult(new List<ChangeInfo>());
368368
public Task<string> GetHashForTagAsync(string? tag) => Task.FromResult(tag == null ? "different123" : "hash123");
369-
public Task<List<ChangeData>> GetOpenIssuesAsync() => Task.FromResult(new List<ChangeData>());
369+
public Task<List<ChangeInfo>> GetOpenIssuesAsync() => Task.FromResult(new List<ChangeInfo>());
370370
}
371371

372372
/// <summary>
@@ -383,7 +383,7 @@ public Task<List<Version>> GetTagHistoryAsync()
383383
Version.Create("v2.0.0")
384384
});
385385
}
386-
public Task<List<ChangeData>> GetChangesBetweenTagsAsync(Version? from, Version? to) => Task.FromResult(new List<ChangeData>());
386+
public Task<List<ChangeInfo>> GetChangesBetweenTagsAsync(Version? from, Version? to) => Task.FromResult(new List<ChangeInfo>());
387387

388388
public Task<string> GetHashForTagAsync(string? tag)
389389
{
@@ -400,6 +400,6 @@ public Task<string> GetHashForTagAsync(string? tag)
400400
return Task.FromResult("abc123def456");
401401
}
402402

403-
public Task<List<ChangeData>> GetOpenIssuesAsync() => Task.FromResult(new List<ChangeData>());
403+
public Task<List<ChangeInfo>> GetOpenIssuesAsync() => Task.FromResult(new List<ChangeInfo>());
404404
}
405405
}

0 commit comments

Comments
 (0)