Skip to content

Commit 873deaf

Browse files
committed
feat: Improved sorting of pull requests to merge
1 parent dccdf3b commit 873deaf

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

Diff for: GitHub/GraphPullRequest.cs

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ class GraphPullRequest
1010
public DateTimeOffset CreatedAt;
1111
public GraphPullRequestAuthor Author;
1212
public GraphPullRequestRef HeadRef;
13+
public bool IsDraft;
1314
public GraphPullRequestLabels Labels;
1415
}
1516

Diff for: GitHub/Query.cs

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public async Task<IReadOnlyList<GraphPullRequest>> GetOpenPullRequests(string or
7373
prefix
7474
name
7575
}
76+
isDraft
7677
labels(first: 100) {
7778
nodes {
7879
name

Diff for: Program.cs

+12-3
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,14 @@ static async Task AsyncMain(IConfigurationRoot config)
6363
Console.WriteLine($"Open pull requests ({pullRequests.Count}):");
6464
foreach (var pullRequest in pullRequests)
6565
{
66-
var autoMerge =
67-
(memberLogins.Contains(pullRequest.Author?.Login) && !pullRequest.Labels.Nodes.Any(label => label.Name == gitHubConfig["excludeLabel"]))
68-
|| pullRequest.Labels.Nodes.Any(label => label.Name == gitHubConfig["includeLabel"]);
66+
var isMember = memberLogins.Contains(pullRequest.Author?.Login);
67+
var isIncluded = pullRequest.Labels.Nodes.Any(label => label.Name == gitHubConfig["includeLabel"]);
68+
var isExcluded = pullRequest.Labels.Nodes.Any(label => label.Name == gitHubConfig["excludeLabel"]);
69+
var autoMerge = (isMember && !isExcluded) || isIncluded;
6970
Console.WriteLine($" #{pullRequest.Number} {pullRequest.Title}");
7071
Console.WriteLine($" By: {pullRequest.Author?.Login}");
7172
Console.WriteLine($" Branch: {pullRequest.HeadRef?.Name}");
73+
Console.WriteLine($" Draft: {pullRequest.IsDraft}");
7274
Console.WriteLine($" Labels: {String.Join(' ', pullRequest.Labels.Nodes.Select(label => label.Name))}");
7375
Console.WriteLine($" Allowed to auto-merge? {autoMerge}");
7476
if (autoMerge)
@@ -77,6 +79,13 @@ static async Task AsyncMain(IConfigurationRoot config)
7779
}
7880
}
7981

82+
// Sort pull requests by draft status (non-draft first), inclusion label (present first), and number
83+
autoMergePullRequests = autoMergePullRequests.OrderBy(pullRequest =>
84+
{
85+
var isIncluded = pullRequest.Labels.Nodes.Any(label => label.Name == gitHubConfig["includeLabel"]);
86+
return $"{(pullRequest.IsDraft ? "2" : "1")}{(isIncluded ? "1" : "2")}{pullRequest.Number,10}";
87+
}).ToList();
88+
8089
Console.WriteLine($"Pull requests suitable for auto-merging ({autoMergePullRequests.Count}):");
8190
foreach (var pullRequest in autoMergePullRequests)
8291
{

0 commit comments

Comments
 (0)