Skip to content

Commit 74bafda

Browse files
committed
Switch from commit statuses to check suites
1 parent 9d63fe7 commit 74bafda

File tree

3 files changed

+72
-40
lines changed

3 files changed

+72
-40
lines changed

src/bors/handlers/workflow.rs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::sync::Arc;
22
use std::time::Duration;
33

4-
use octocrab::models::StatusState;
4+
use octocrab::params::checks::{CheckRunConclusion, CheckRunStatus};
55

66
use crate::PgDbClient;
77
use crate::bors::CheckSuiteStatus;
@@ -261,15 +261,31 @@ async fn complete_auto_build(
261261
};
262262
repo.client.post_comment(pr.number, comment).await?;
263263

264-
let (status, desc) = if !has_failure {
265-
(StatusState::Success, "Build succeeded")
264+
let (status, conclusion, desc) = if !has_failure {
265+
(
266+
CheckRunStatus::Completed,
267+
Some(CheckRunConclusion::Success),
268+
"Build succeeded",
269+
)
266270
} else {
267-
(StatusState::Failure, "Build failed")
271+
(
272+
CheckRunStatus::Completed,
273+
Some(CheckRunConclusion::Failure),
274+
"Build failed",
275+
)
268276
};
269277

270278
let gh_pr = repo.client.get_pull_request(pr.number).await?;
271279
repo.client
272-
.create_commit_status(&gh_pr.head.sha, status, None, Some(desc), Some("bors"))
280+
.create_check_run(
281+
&gh_pr.head.sha,
282+
"bors",
283+
status,
284+
conclusion,
285+
Some("Bors build status"),
286+
Some(desc),
287+
None,
288+
)
273289
.await?;
274290

275291
Ok(())

src/bors/merge_queue.rs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use anyhow::anyhow;
2-
use octocrab::models::StatusState;
2+
use octocrab::params::checks::{CheckRunConclusion, CheckRunStatus};
33
use std::sync::{Arc, OnceLock};
44
use tokio::sync::Mutex;
55

@@ -96,12 +96,14 @@ pub async fn handle_merge_queue(ctx: Arc<BorsContext>) -> anyhow::Result<()> {
9696
&error.to_string()
9797
);
9898
repo.client
99-
.create_commit_status(
99+
.create_check_run(
100100
&gh_pr.head.sha,
101-
StatusState::Error,
102-
None,
101+
"bors",
102+
CheckRunStatus::Completed,
103+
Some(CheckRunConclusion::Failure),
104+
Some("Bors build status"),
103105
Some(&desc),
104-
Some("bors"),
106+
None,
105107
)
106108
.await?;
107109

@@ -195,18 +197,20 @@ async fn start_auto_build(
195197
)
196198
.await?;
197199

198-
// 4. Set GitHub commit status to pending on PR head
200+
// 4. Set GitHub check run to pending on PR head
199201
let desc = format!(
200202
"Testing commit {} with merge {}...",
201203
gh_pr.head.sha, merge_sha
202204
);
203205
client
204-
.create_commit_status(
206+
.create_check_run(
205207
&gh_pr.head.sha,
206-
StatusState::Pending,
208+
"bors",
209+
CheckRunStatus::InProgress,
207210
None,
211+
Some("Bors build status"),
208212
Some(&desc),
209-
Some("bors"),
213+
None,
210214
)
211215
.await?;
212216

@@ -225,15 +229,17 @@ async fn start_auto_build(
225229
.update_pr_mergeable_state(&pr, MergeableState::HasConflicts)
226230
.await?;
227231

228-
// 3. Set GitHub commit status to error on PR head
232+
// 3. Set GitHub check run to error on PR head
229233
// We don't set it to failure as this issue is likely on GitHub's end.
230234
client
231-
.create_commit_status(
235+
.create_check_run(
232236
&gh_pr.head.sha,
233-
StatusState::Error,
234-
None,
237+
"bors",
238+
CheckRunStatus::Completed,
239+
Some(CheckRunConclusion::Failure),
240+
Some("Bors build status"),
235241
Some("Merge conflict"),
236-
Some("bors"),
242+
None,
237243
)
238244
.await?;
239245

src/github/api/client.rs

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use anyhow::Context;
22
use octocrab::Octocrab;
3-
use octocrab::models::{App, Repository, StatusState};
3+
use octocrab::models::{App, Repository};
4+
use octocrab::params::checks::{CheckRunConclusion, CheckRunOutput, CheckRunStatus};
45
use tracing::log;
56

67
use crate::bors::event::PullRequestComment;
@@ -347,35 +348,44 @@ impl GithubRepositoryClient {
347348
Ok(prs)
348349
}
349350

350-
/// Create a commit status for the given SHA.
351-
pub async fn create_commit_status(
351+
/// Create a check run for the given SHA.
352+
#[allow(clippy::too_many_arguments)]
353+
pub async fn create_check_run(
352354
&self,
353355
sha: &CommitSha,
354-
state: StatusState,
355-
target_url: Option<&str>,
356-
description: Option<&str>,
357-
context: Option<&str>,
356+
name: &str,
357+
status: CheckRunStatus,
358+
conclusion: Option<CheckRunConclusion>,
359+
output_title: Option<&str>,
360+
output_summary: Option<&str>,
361+
details_url: Option<&str>,
358362
) -> anyhow::Result<()> {
359-
perform_network_request_with_retry("create_commit_status", || async {
360-
let repos = self
363+
perform_network_request_with_retry("create_check_run", || async {
364+
let checks = self
361365
.client
362-
.repos(&self.repository().owner, &self.repository().name);
363-
let mut builder = repos.create_status(sha.0.clone(), state);
366+
.checks(&self.repository().owner, &self.repository().name);
367+
let mut builder = checks.create_check_run(name, sha.0.clone()).status(status);
364368

365-
if let Some(url) = target_url {
366-
builder = builder.target(url.to_string());
369+
if let Some(conclusion) = conclusion {
370+
builder = builder.conclusion(conclusion);
367371
}
368-
if let Some(desc) = description {
369-
builder = builder.description(desc.to_string());
372+
373+
if let (Some(title), Some(summary)) = (output_title, output_summary) {
374+
let output = CheckRunOutput {
375+
title: title.to_string(),
376+
summary: summary.to_string(),
377+
text: None,
378+
annotations: Vec::new(),
379+
images: Vec::new(),
380+
};
381+
builder = builder.output(output);
370382
}
371-
if let Some(ctx) = context {
372-
builder = builder.context(ctx.to_string());
383+
384+
if let Some(url) = details_url {
385+
builder = builder.details_url(url);
373386
}
374387

375-
builder
376-
.send()
377-
.await
378-
.context("Cannot create commit status")?;
388+
builder.send().await.context("Cannot create check run")?;
379389
Ok(())
380390
})
381391
.await?

0 commit comments

Comments
 (0)