Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 047ba1a

Browse files
Adding pull request summary state to the list
1 parent c3d3b1c commit 047ba1a

File tree

12 files changed

+205
-53
lines changed

12 files changed

+205
-53
lines changed

src/GitHub.App/Models/PullRequestModel.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,17 @@ public PullRequestStateEnum State
124124
}
125125
}
126126

127+
PullRequestChecksEnum checks;
128+
public PullRequestChecksEnum Checks
129+
{
130+
get { return checks; }
131+
set
132+
{
133+
checks = value;
134+
this.RaisePropertyChange();
135+
}
136+
}
137+
127138
// TODO: Remove these property once maintainer workflow has been merged to master.
128139
public bool IsOpen => State == PullRequestStateEnum.Open;
129140
public bool Merged => State == PullRequestStateEnum.Merged;

src/GitHub.App/SampleData/PullRequestListItemViewModelDesigner.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Diagnostics.CodeAnalysis;
4+
using GitHub.Models;
45
using GitHub.ViewModels;
56
using GitHub.ViewModels.GitHubPane;
67

@@ -16,5 +17,6 @@ public class PullRequestListItemViewModelDesigner : ViewModelBase, IPullRequestL
1617
public int Number { get; set; }
1718
public string Title { get; set; }
1819
public DateTimeOffset UpdatedAt { get; set; }
20+
public PullRequestChecksEnum Checks { get; set; }
1921
}
2022
}

src/GitHub.App/Services/ModelService.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,7 @@ IPullRequestModel Create(PullRequestCacheItem prCacheItem)
440440
CommitCount = prCacheItem.CommitCount,
441441
CreatedAt = prCacheItem.CreatedAt,
442442
Head = Create(prCacheItem.Head),
443+
Checks = prCacheItem.Checks ?? PullRequestChecksEnum.None,
443444
State = prCacheItem.State.HasValue ?
444445
prCacheItem.State.Value :
445446
prCacheItem.IsOpen.Value ? PullRequestStateEnum.Open : PullRequestStateEnum.Closed,
@@ -577,6 +578,7 @@ public PullRequestCacheItem(PullRequest pr)
577578

578579
// Nullable for compatibility with old caches.
579580
public PullRequestStateEnum? State { get; set; }
581+
public PullRequestChecksEnum? Checks { get; set; }
580582

581583
// This fields exists only for compatibility with old caches. The State property should be used.
582584
public bool? IsOpen { get; set; }

src/GitHub.App/Services/PullRequestService.cs

Lines changed: 85 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -96,25 +96,19 @@ public async Task<Page<PullRequestListItemModel>> ReadPullRequests(
9696
LastCommit = pr.Commits(null, null, 1, null).Nodes.Select(commit =>
9797
new LastCommitSummaryModel
9898
{
99-
Id = commit.Id,
100-
Checks = commit.Commit.CheckSuites(null, null, null, null, null).AllPages(10)
101-
.Select(suite => new CheckSuiteSummaryModel
102-
{
103-
Conclusion = (CheckConclusionStateEnum?) suite.Conclusion,
104-
Status = (CheckStatusStateEnum) suite.Status,
105-
}).ToList(),
106-
107-
/*
108-
TODO: Resolve https://github.com/octokit/octokit.graphql.net/pull/122
109-
Contexts can be null
110-
111-
Statuses = commit.Commit.Status.Contexts
112-
.Select(context => new
113-
{
114-
context.Context,
115-
context.State,
116-
}).ToList()
117-
*/
99+
// CheckSuites = commit.Commit.CheckSuites(null, null, null, null, null).AllPages(10)
100+
// .Select(suite => new CheckSuiteSummaryModel
101+
// {
102+
// Conclusion = (CheckConclusionStateEnum?)suite.Conclusion,
103+
// Status = (CheckStatusStateEnum)suite.Status,
104+
// }).ToList(),
105+
Statuses = commit.Commit.Status
106+
.Select(context =>
107+
context.Contexts.Select(statusContext => new StatusSummaryModel
108+
{
109+
State = (StatusStateEnum)statusContext.State,
110+
}).ToList()
111+
).SingleOrDefault()
118112
}).ToList().FirstOrDefault(),
119113
Author = new ActorModel
120114
{
@@ -150,6 +144,71 @@ Contexts can be null
150144
{
151145
item.CommentCount += item.Reviews.Sum(x => x.Count);
152146
item.Reviews = null;
147+
148+
var hasCheckSuites = item.LastCommit.CheckSuites != null
149+
&& item.LastCommit.CheckSuites.Any();
150+
151+
var hasStatuses = item.LastCommit.Statuses != null
152+
&& item.LastCommit.Statuses.Any();
153+
154+
if (!hasCheckSuites && !hasStatuses)
155+
{
156+
item.Checks = PullRequestChecksEnum.None;
157+
}
158+
else
159+
{
160+
var checksHasFailure = false;
161+
var checksHasCompleteSuccess = true;
162+
163+
if (hasCheckSuites)
164+
{
165+
checksHasFailure = item.LastCommit
166+
.CheckSuites.Any(model => model.Conclusion.HasValue
167+
&& (model.Conclusion.Value == CheckConclusionStateEnum.Failure
168+
|| model.Conclusion.Value ==
169+
CheckConclusionStateEnum.ActionRequired));
170+
171+
if (!checksHasFailure)
172+
{
173+
checksHasCompleteSuccess = item.LastCommit
174+
.CheckSuites.All(model => model.Conclusion.HasValue
175+
&& (model.Conclusion.Value == CheckConclusionStateEnum.Success
176+
|| model.Conclusion.Value ==
177+
CheckConclusionStateEnum.Neutral));
178+
}
179+
}
180+
181+
var statusHasFailure = false;
182+
var statusHasCompleteSuccess = true;
183+
184+
if (!checksHasFailure && hasStatuses)
185+
{
186+
statusHasFailure = item.LastCommit
187+
.Statuses
188+
.Any(status => status.State == StatusStateEnum.Failure);
189+
190+
if (!statusHasFailure)
191+
{
192+
statusHasCompleteSuccess =
193+
item.LastCommit.Statuses.All(status => status.State == StatusStateEnum.Success);
194+
}
195+
}
196+
197+
if (checksHasFailure || statusHasFailure)
198+
{
199+
item.Checks = PullRequestChecksEnum.Failure;
200+
}
201+
else if (statusHasCompleteSuccess && checksHasCompleteSuccess)
202+
{
203+
item.Checks = PullRequestChecksEnum.Success;
204+
}
205+
else
206+
{
207+
item.Checks = PullRequestChecksEnum.Pending;
208+
}
209+
}
210+
211+
item.LastCommit = null;
153212
}
154213

155214
return result;
@@ -876,9 +935,9 @@ class ReviewAdapter
876935

877936
class LastCommitSummaryModel
878937
{
879-
public ID Id { get; set; }
938+
public List<CheckSuiteSummaryModel> CheckSuites { get; set; }
880939

881-
public List<CheckSuiteSummaryModel> Checks { get; set; }
940+
public List<StatusSummaryModel> Statuses { get; set; }
882941
}
883942

884943
class CheckSuiteSummaryModel
@@ -888,4 +947,9 @@ class CheckSuiteSummaryModel
888947
public CheckStatusStateEnum Status { get; set; }
889948
}
890949
}
950+
951+
public class StatusSummaryModel
952+
{
953+
public StatusStateEnum State { get; set; }
954+
}
891955
}

src/GitHub.App/ViewModels/GitHubPane/PullRequestListItemViewModel.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public PullRequestListItemViewModel(PullRequestListItemModel model)
1919
{
2020
Id = model.Id;
2121
Author = new ActorViewModel(model.Author);
22+
Checks = model.Checks;
2223
CommentCount = model.CommentCount;
2324
Number = model.Number;
2425
Title = model.Title;
@@ -31,6 +32,9 @@ public PullRequestListItemViewModel(PullRequestListItemModel model)
3132
/// <inheritdoc/>
3233
public IActorViewModel Author { get; protected set; }
3334

35+
/// <inheritdoc/>
36+
public PullRequestChecksEnum Checks { get; protected set; }
37+
3438
/// <inheritdoc/>
3539
public int CommentCount { get; protected set; }
3640

src/GitHub.Exports.Reactive/ViewModels/GitHubPane/IPullRequestListItemViewModel.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using GitHub.Models;
23

34
namespace GitHub.ViewModels.GitHubPane
45
{
@@ -27,5 +28,10 @@ public interface IPullRequestListItemViewModel : IIssueListItemViewModelBase
2728
/// Gets the last updated time of the pull request.
2829
/// </summary>
2930
DateTimeOffset UpdatedAt { get; }
31+
32+
/// <summary>
33+
/// Gets the pull request checks and statuses summary
34+
/// </summary>
35+
PullRequestChecksEnum Checks { get; }
3036
}
3137
}

src/GitHub.Exports/Models/CheckSuiteModel.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,34 @@
33

44
namespace GitHub.Models
55
{
6+
public class LastCommitModel
7+
{
8+
public string Id { get; set; }
9+
public List<CheckSuiteModel> CheckSuites { get; set; }
10+
11+
public List<StatusModel> Statuses { get; set; }
12+
}
13+
14+
public enum StatusStateEnum
15+
{
16+
Expected,
17+
Error,
18+
Failure,
19+
Pending,
20+
Success,
21+
}
22+
23+
public class StatusModel
24+
{
25+
public StatusStateEnum State { get; set; }
26+
27+
public string Context { get; set; }
28+
29+
public string TargetUrl { get; set; }
30+
31+
public string Description { get; set; }
32+
}
33+
634
public class CheckSuiteModel
735
{
836
public CheckConclusionStateEnum? Conclusion { get; set; }

src/GitHub.Exports/Models/IPullRequestModel.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,21 @@ public enum PullRequestStateEnum
1313
Merged,
1414
}
1515

16+
public enum PullRequestChecksEnum
17+
{
18+
None,
19+
Pending,
20+
Success,
21+
Failure
22+
}
23+
1624
public interface IPullRequestModel : ICopyable<IPullRequestModel>,
1725
IEquatable<IPullRequestModel>, IComparable<IPullRequestModel>
1826
{
1927
int Number { get; }
2028
string Title { get; }
2129
PullRequestStateEnum State { get; }
30+
PullRequestChecksEnum Checks { get; }
2231
int CommentCount { get; }
2332
int CommitCount { get; }
2433
bool IsOpen { get; }

src/GitHub.Exports/Models/PullRequestDetailModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,6 @@ public class PullRequestDetailModel
9292
/// </remarks>
9393
public IReadOnlyList<PullRequestReviewThreadModel> Threads { get; set; }
9494

95-
public List<CheckSuiteModel> CheckSuites { get; set; }
95+
public LastCommitModel LastCommit { get; set; }
9696
}
9797
}

src/GitHub.Exports/Models/PullRequestListItemModel.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ public class PullRequestListItemModel
3737
/// </summary>
3838
public PullRequestStateEnum State { get; set; }
3939

40+
/// <summary>
41+
/// Gets the pull request checks and statuses summary
42+
/// </summary>
43+
public PullRequestChecksEnum Checks { get; set; }
44+
4045
/// <summary>
4146
/// Gets or sets the date/time at which the pull request was last updated.
4247
/// </summary>

0 commit comments

Comments
 (0)