Skip to content

Commit 68beddf

Browse files
Update changelog builder
1 parent b91501e commit 68beddf

File tree

3 files changed

+49
-35
lines changed

3 files changed

+49
-35
lines changed

build/Build.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
<PackageReference Include="Microsoft.DocAsCode.App" Version="2.67.3" />
1111
<PackageReference Include="Ben.Demystifier" Version="0.1.1" />
1212
<PackageReference Include="JetBrains.Annotations" Version="2022.3.1" />
13-
<PackageReference Include="Octokit" Version="0.29.0" />
13+
<PackageReference Include="Octokit" Version="6.2.1" />
1414
</ItemGroup>
1515
</Project>

build/ChangeLogBuilder.cs

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ public class AuthorEqualityComparer : IEqualityComparer<Author>
9797

9898
public class MarkdownBuilder
9999
{
100+
private static IReadOnlyList<Milestone> AllMilestones = null;
101+
private static readonly Dictionary<string, string> AuthorNames = new();
102+
100103
private readonly Config config;
101104
private readonly StringBuilder builder;
102105

@@ -114,11 +117,13 @@ private MarkdownBuilder(Config config)
114117
private async Task<string> Build()
115118
{
116119
var (repoOwner, repoName, milestone, previousMilestone, lastCommit) = config;
120+
if (string.IsNullOrEmpty(lastCommit))
121+
lastCommit = milestone;
117122

118123
var client = new GitHubClient(new ProductHeaderValue(config.ProductHeader));
119124
var tokenAuth = new Credentials(config.Token);
120125
client.Credentials = tokenAuth;
121-
126+
122127
if (milestone == "_")
123128
{
124129
var allContributors = await client.Repository.GetAllContributors(repoOwner, repoName);
@@ -136,46 +141,62 @@ private async Task<string> Build()
136141
return builder.ToString();
137142
}
138143

139-
var issueRequest = new RepositoryIssueRequest
144+
if (AllMilestones == null)
140145
{
141-
State = ItemStateFilter.Closed
142-
};
143-
var pullRequestRequest = new PullRequestRequest
146+
var milestoneRequest = new MilestoneRequest
147+
{
148+
State = ItemStateFilter.All
149+
};
150+
AllMilestones = await client.Issue.Milestone.GetAllForRepository(repoOwner, repoName, milestoneRequest);
151+
}
152+
153+
IReadOnlyList<Issue> allIssues = Array.Empty<Issue>();
154+
var targetMilestone = AllMilestones.FirstOrDefault(m => m.Title == milestone);
155+
if (targetMilestone != null)
144156
{
145-
State = ItemStateFilter.Closed
146-
};
157+
var issueRequest = new RepositoryIssueRequest
158+
{
159+
State = ItemStateFilter.Closed,
160+
Milestone = targetMilestone.Number.ToString()
161+
};
162+
163+
allIssues = await client.Issue.GetAllForRepository(repoOwner, repoName, issueRequest);
164+
}
147165

148-
var issues = (await client.Issue.GetAllForRepository(repoOwner, repoName, issueRequest))
149-
.Where(issue => issue.Milestone != null && issue.Milestone.Title == milestone)
166+
var issues = allIssues
150167
.Where(issue => issue.PullRequest == null)
151168
.OrderBy(issue => issue.Number)
152169
.ToList();
153-
154-
var pullRequests =
155-
(await client.PullRequest.GetAllForRepository(repoOwner, repoName, pullRequestRequest))
156-
.Where(issue => issue.Milestone != null && issue.Milestone.Title == milestone)
170+
var pullRequests = allIssues
171+
.Where(issue => issue.PullRequest != null)
157172
.OrderBy(issue => issue.Number)
158173
.ToList();
159-
174+
160175
var compare = await client.Repository.Commit.Compare(repoOwner, repoName, previousMilestone, lastCommit);
161176
var commits = compare.Commits;
162-
163-
var authorNames = new Dictionary<string, string>();
177+
178+
164179
foreach (var contributor in commits.Select(commit => commit.Author))
165-
if (contributor != null && !authorNames.ContainsKey(contributor.Login))
180+
if (contributor != null && !AuthorNames.ContainsKey(contributor.Login))
166181
{
167182
var user = await client.User.Get(contributor.Login);
168183
var name = user?.Name;
169-
authorNames[contributor.Login] = string.IsNullOrWhiteSpace(name) ? contributor.Login : name;
184+
AuthorNames[contributor.Login] = string.IsNullOrWhiteSpace(name) ? contributor.Login : name;
170185
}
171186

187+
string PresentContributor(GitHubCommit commit)
188+
{
189+
if (commit.Author != null)
190+
return $"{AuthorNames[commit.Author.Login]} ({commit.Author.ToLink()})".Trim();
191+
return commit.Commit.Author.Name;
192+
}
193+
172194
var contributors = compare.Commits
173-
.Select(commit => commit.Author)
174-
.Where(author => author != null)
175-
.Distinct(AuthorEqualityComparer.Default)
176-
.OrderBy(author => authorNames[author.Login])
195+
.Select(PresentContributor)
196+
.OrderBy(it => it)
197+
.Distinct()
177198
.ToImmutableList();
178-
199+
179200
var milestoneHtmlUlr = $"https://github.com/{repoOwner}/{repoName}/issues?q=milestone:{milestone}";
180201

181202
builder.AppendLine("## Milestone details");
@@ -192,9 +213,7 @@ private async Task<string> Build()
192213
$"[#{pr.Number}]({pr.HtmlUrl}) {pr.Title.Trim()}{pr.User.ToStr("by")}");
193214
AppendList("Commits", commits, commit =>
194215
$"{commit.ToLink()} {commit.Commit.ToCommitMessage()}{commit.ToByStr()}");
195-
AppendList("Contributors", contributors, contributor =>
196-
$"{authorNames[contributor.Login]} ({contributor.ToLink()})".Trim(),
197-
"Thank you very much!");
216+
AppendList("Contributors", contributors, it => it, "Thank you very much!");
198217

199218
return builder.ToString();
200219
}

build/Program.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -141,13 +141,8 @@ public void DocfxChangelogDownload(string version, string versionPrevious, strin
141141
{
142142
this.Information("DocfxChangelogDownload: " + version);
143143
// Required environment variables: GITHUB_PRODUCT, GITHUB_TOKEN
144-
var changeLogBuilderDirectory = ChangeLogGenDirectory.Combine("ChangeLogBuilder");
145-
ChangeLogBuilder.Run(changeLogBuilderDirectory, version, versionPrevious, lastCommit).Wait();
146-
147-
var src = changeLogBuilderDirectory.CombineWithFilePath(version + ".md");
148-
var dest = ChangeLogGenDirectory.Combine("details").CombineWithFilePath(version + ".md");
149-
this.CopyFile(src, dest);
150-
this.Information($"Changelog for {version}: {dest}");
144+
var path = ChangeLogGenDirectory.Combine("details");
145+
ChangeLogBuilder.Run(path, version, versionPrevious, lastCommit).Wait();
151146
}
152147

153148
public void DocfxChangelogGenerate(string version)
@@ -450,7 +445,7 @@ public override void Run(BuildContext context)
450445
context.DocfxChangelogDownload(
451446
DocumentationHelper.BdnAllVersions.First(),
452447
DocumentationHelper.BdnFirstCommit);
453-
448+
454449
for (int i = 1; i < DocumentationHelper.BdnAllVersions.Length; i++)
455450
context.DocfxChangelogDownload(
456451
DocumentationHelper.BdnAllVersions[i],

0 commit comments

Comments
 (0)