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

Commit fc1e2ea

Browse files
Fixing Checks API support
1 parent 955a23f commit fc1e2ea

File tree

13 files changed

+144
-191
lines changed

13 files changed

+144
-191
lines changed

src/GitHub.App/GitHub.App.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,6 @@
231231
<Compile Include="Services\EnterpriseCapabilitiesService.cs" />
232232
<Compile Include="Services\GitHubContextService.cs" />
233233
<Compile Include="Services\GlobalConnection.cs" />
234-
<Compile Include="Services\ChecksService.cs" />
235234
<Compile Include="Services\RepositoryForkService.cs" />
236235
<Compile Include="Services\RepositoryService.cs" />
237236
<Compile Include="ViewModels\ActorViewModel.cs" />
@@ -255,6 +254,7 @@
255254
<Compile Include="ViewModels\Dialog\RepositoryCreationViewModel.cs" />
256255
<Compile Include="ViewModels\Dialog\PagedDialogViewModelBase.cs" />
257256
<Compile Include="ViewModels\Dialog\RepositoryRecloneViewModel.cs" />
257+
<Compile Include="ViewModels\GitHubPane\CheckRunModelExtensions.cs" />
258258
<Compile Include="ViewModels\GitHubPane\IssueListViewModelBase.cs" />
259259
<Compile Include="ViewModels\GitHubPane\LoggedOutViewModel.cs" />
260260
<Compile Include="ViewModels\GitHubPane\NavigationViewModel.cs" />

src/GitHub.App/Services/ChecksService.cs

-115
This file was deleted.

src/GitHub.App/Services/PullRequestService.cs

+45-19
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
using Rothko;
2424
using static System.FormattableString;
2525
using static Octokit.GraphQL.Variable;
26+
using CheckConclusionState = GitHub.Models.CheckConclusionState;
27+
using CheckStatusState = GitHub.Models.CheckStatusState;
2628
using StatusState = GitHub.Models.StatusState;
2729

2830
namespace GitHub.Services
@@ -98,12 +100,12 @@ public async Task<Page<PullRequestListItemModel>> ReadPullRequests(
98100
LastCommit = pr.Commits(null, null, 1, null).Nodes.Select(commit =>
99101
new LastCommitSummaryModel
100102
{
101-
// CheckSuites = commit.Commit.CheckSuites(null, null, null, null, null).AllPages(10)
102-
// .Select(suite => new CheckSuiteSummaryModel
103-
// {
104-
// Conclusion = (CheckConclusionStateEnum?)suite.Conclusion,
105-
// Status = (CheckStatusStateEnum)suite.Status,
106-
// }).ToList(),
103+
CheckSuites = commit.Commit.CheckSuites(null, null, null, null, null).AllPages(10)
104+
.Select(suite => new CheckSuiteSummaryModel
105+
{
106+
Conclusion = (CheckConclusionState?)suite.Conclusion,
107+
Status = (CheckStatusState)suite.Status,
108+
}).ToList(),
107109
Statuses = commit.Commit.Status
108110
.Select(context =>
109111
context.Contexts.Select(statusContext => new StatusSummaryModel
@@ -147,34 +149,58 @@ public async Task<Page<PullRequestListItemModel>> ReadPullRequests(
147149
item.CommentCount += item.Reviews.Sum(x => x.Count);
148150
item.Reviews = null;
149151

150-
var hasCheckSuites = item.LastCommit.CheckSuites != null
152+
var hasCheckSuites = item.LastCommit.CheckSuites != null
151153
&& item.LastCommit.CheckSuites.Any();
152154

153-
var hasStatuses = item.LastCommit.Statuses != null
155+
var hasStatuses = item.LastCommit.Statuses != null
154156
&& item.LastCommit.Statuses.Any();
155157

156-
if (!hasStatuses)
158+
if (!hasCheckSuites && !hasStatuses)
157159
{
158160
item.Checks = PullRequestChecksState.None;
159161
}
160162
else
161163
{
162-
var statusHasFailure = item.LastCommit
163-
.Statuses
164-
.Any(status => status.State == StatusState.Failure);
164+
var checksHasFailure = false;
165+
var checksHasCompleteSuccess = true;
165166

167+
if (hasCheckSuites)
168+
{
169+
checksHasFailure = item.LastCommit
170+
.CheckSuites.Any(model => model.Conclusion.HasValue
171+
&& (model.Conclusion.Value == CheckConclusionState.Failure
172+
|| model.Conclusion.Value == CheckConclusionState.ActionRequired));
173+
174+
if (!checksHasFailure)
175+
{
176+
checksHasCompleteSuccess = item.LastCommit
177+
.CheckSuites.All(model => model.Conclusion.HasValue
178+
&& (model.Conclusion.Value == CheckConclusionState.Success
179+
|| model.Conclusion.Value == CheckConclusionState.Neutral));
180+
}
181+
}
182+
183+
var statusHasFailure = false;
166184
var statusHasCompleteSuccess = true;
167-
if (!statusHasFailure)
185+
186+
if (!checksHasFailure && hasStatuses)
168187
{
169-
statusHasCompleteSuccess =
170-
item.LastCommit.Statuses.All(status => status.State == StatusState.Success);
188+
statusHasFailure = item.LastCommit
189+
.Statuses
190+
.Any(status => status.State == StatusState.Failure);
191+
192+
if (!statusHasFailure)
193+
{
194+
statusHasCompleteSuccess =
195+
item.LastCommit.Statuses.All(status => status.State == StatusState.Success);
196+
}
171197
}
172198

173-
if (statusHasFailure)
199+
if (checksHasFailure || statusHasFailure)
174200
{
175201
item.Checks = PullRequestChecksState.Failure;
176202
}
177-
else if (statusHasCompleteSuccess)
203+
else if (statusHasCompleteSuccess && checksHasCompleteSuccess)
178204
{
179205
item.Checks = PullRequestChecksState.Success;
180206
}
@@ -933,9 +959,9 @@ class LastCommitSummaryModel
933959

934960
class CheckSuiteSummaryModel
935961
{
936-
public CheckSuiteConclusionState? Conclusion { get; set; }
962+
public CheckConclusionState? Conclusion { get; set; }
937963

938-
public CheckSuiteStatusState Status { get; set; }
964+
public CheckStatusState Status { get; set; }
939965
}
940966
}
941967
}

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

+48-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class PullRequestCheckViewModel: ViewModelBase, IPullRequestCheckViewMode
2222

2323
public static IEnumerable<IPullRequestCheckViewModel> Build(IViewViewModelFactory viewViewModelFactory, PullRequestDetailModel pullRequest)
2424
{
25-
return pullRequest.Statuses?.Select(model =>
25+
var statuses = pullRequest.Statuses?.Select(model =>
2626
{
2727
PullRequestCheckStatus checkStatus;
2828
switch (model.State)
@@ -53,8 +53,54 @@ public static IEnumerable<IPullRequestCheckViewModel> Build(IViewViewModelFactor
5353
: AvatarProvider.CreateBitmapImage(DefaultAvatar);
5454

5555
return pullRequestCheckViewModel;
56-
5756
}) ?? new PullRequestCheckViewModel[0];
57+
58+
var checks = pullRequest.CheckSuites?.SelectMany(model => model.CheckRuns)
59+
.Select(model =>
60+
{
61+
PullRequestCheckStatus checkStatus;
62+
switch (model.Status)
63+
{
64+
case CheckStatusState.Requested:
65+
case CheckStatusState.Queued:
66+
case CheckStatusState.InProgress:
67+
checkStatus = PullRequestCheckStatus.Pending;
68+
break;
69+
70+
case CheckStatusState.Completed:
71+
switch (model.Conclusion)
72+
{
73+
case CheckConclusionState.Success:
74+
checkStatus = PullRequestCheckStatus.Success;
75+
break;
76+
77+
case CheckConclusionState.ActionRequired:
78+
case CheckConclusionState.TimedOut:
79+
case CheckConclusionState.Cancelled:
80+
case CheckConclusionState.Failure:
81+
case CheckConclusionState.Neutral:
82+
checkStatus = PullRequestCheckStatus.Failure;
83+
break;
84+
85+
default:
86+
throw new ArgumentOutOfRangeException();
87+
}
88+
89+
break;
90+
default:
91+
throw new ArgumentOutOfRangeException();
92+
}
93+
94+
var pullRequestCheckViewModel = (PullRequestCheckViewModel)viewViewModelFactory.CreateViewModel<IPullRequestCheckViewModel>();
95+
pullRequestCheckViewModel.Title = model.Name;
96+
pullRequestCheckViewModel.Description = model.Summary;
97+
pullRequestCheckViewModel.Status = checkStatus;
98+
pullRequestCheckViewModel.DetailsUrl = new Uri(model.DetailsUrl);
99+
100+
return pullRequestCheckViewModel;
101+
}) ?? new PullRequestCheckViewModel[0];
102+
103+
return statuses.Union(checks).OrderBy(model => model.Title);
58104
}
59105

60106
[ImportingConstructor]

src/GitHub.Exports.Reactive/GitHub.Exports.Reactive.csproj

-1
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,6 @@
175175
<Compile Include="Models\IInlineCommentThreadModel.cs" />
176176
<Compile Include="Models\IPullRequestSessionFile.cs" />
177177
<Compile Include="Models\PullRequestTextBufferInfo.cs" />
178-
<Compile Include="Services\IChecksService.cs" />
179178
<Compile Include="Services\IModelService.cs" />
180179
<Compile Include="Services\IGistPublishService.cs" />
181180
<Compile Include="Services\IPullRequestEditorService.cs" />

src/GitHub.Exports.Reactive/Services/IChecksService.cs

-15
This file was deleted.

src/GitHub.Exports/GitHub.Exports.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,9 @@
172172
<Compile Include="Models\ActorModel.cs" />
173173
<Compile Include="Models\AnnotationModel.cs" />
174174
<Compile Include="Models\CheckAnnotationLevel.cs" />
175-
<Compile Include="Models\CheckConclusionStateEnum.cs" />
175+
<Compile Include="Models\CheckConclusionState.cs" />
176176
<Compile Include="Models\CheckRunModel.cs" />
177-
<Compile Include="Models\CheckStatusStateEnum.cs" />
177+
<Compile Include="Models\CheckStatusState.cs" />
178178
<Compile Include="Models\CheckSuiteModel.cs" />
179179
<Compile Include="Models\CommitMessage.cs" />
180180
<Compile Include="Models\DiffChangeType.cs" />

src/GitHub.Exports/Models/AnnotationModel.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class CheckRunAnnotationModel
1414

1515
public string Title { get; set; }
1616

17-
public CheckAnnotationLevel? WarningLevel { get; set; }
17+
public CheckAnnotationLevel? AnnotationLevel { get; set; }
1818

1919
public string RawDetails { get; set; }
2020
}

src/GitHub.Exports/Models/CheckSuiteConclusionState.cs renamed to src/GitHub.Exports/Models/CheckConclusionState.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace GitHub.Models
22
{
3-
public enum CheckSuiteConclusionState
3+
public enum CheckConclusionState
44
{
55
ActionRequired,
66
TimedOut,

src/GitHub.Exports/Models/CheckRunModel.cs

+8-2
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@ namespace GitHub.Models
55
{
66
public class CheckRunModel
77
{
8-
public CheckSuiteConclusionState? Conclusion { get; set; }
8+
public CheckConclusionState? Conclusion { get; set; }
99

10-
public CheckSuiteStatusState Status { get; set; }
10+
public CheckStatusState Status { get; set; }
1111

1212
public DateTimeOffset? StartedAt { get; set; }
1313

1414
public DateTimeOffset? CompletedAt { get; set; }
1515

1616
public List<CheckRunAnnotationModel> Annotations { get; set; }
17+
18+
public string Name { get; set; }
19+
20+
public string DetailsUrl { get; set; }
21+
22+
public string Summary { get; set; }
1723
}
1824
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
namespace GitHub.Models
22
{
3-
public enum CheckSuiteStatusState
3+
public enum CheckStatusState
44
{
5-
Requested,
65
Queued,
76
InProgress,
87
Completed,
8+
Requested,
99
}
1010
}

0 commit comments

Comments
 (0)