Skip to content

Commit f7a3ad3

Browse files
committed
Add merge queue refresh event
1 parent 1527760 commit f7a3ad3

File tree

6 files changed

+22
-9
lines changed

6 files changed

+22
-9
lines changed

src/bin/bors.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ const MERGEABILITY_STATUS_INTERVAL: Duration = Duration::from_secs(60 * 10);
3232
/// How often should the bot synchronize PR state.
3333
const PR_STATE_PERIODIC_REFRESH: Duration = Duration::from_secs(60 * 10);
3434

35+
/// How often should the bot process the merge queue.
36+
const MERGE_QUEUE_INTERVAL: Duration = Duration::from_secs(30);
37+
3538
#[derive(clap::Parser)]
3639
struct Opts {
3740
/// Github App ID.
@@ -160,6 +163,7 @@ fn try_main(opts: Opts) -> anyhow::Result<()> {
160163
let mut cancel_builds_refresh = make_interval(CANCEL_TIMED_OUT_BUILDS_INTERVAL);
161164
let mut mergeability_status_refresh = make_interval(MERGEABILITY_STATUS_INTERVAL);
162165
let mut prs_interval = make_interval(PR_STATE_PERIODIC_REFRESH);
166+
let mut merge_queue_interval = make_interval(MERGE_QUEUE_INTERVAL);
163167
loop {
164168
tokio::select! {
165169
_ = config_refresh.tick() => {
@@ -177,6 +181,9 @@ fn try_main(opts: Opts) -> anyhow::Result<()> {
177181
_ = prs_interval.tick() => {
178182
refresh_tx.send(BorsGlobalEvent::RefreshPullRequestState).await?;
179183
}
184+
_ = merge_queue_interval.tick() => {
185+
refresh_tx.send(BorsGlobalEvent::ProcessMergeQueue).await?;
186+
}
180187
}
181188
}
182189
};

src/bors/event.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ pub enum BorsGlobalEvent {
7575
RefreshPullRequestMergeability,
7676
/// Periodic event that serves for synchronizing PR state.
7777
RefreshPullRequestState,
78+
/// Process the merge queue.
79+
ProcessMergeQueue,
7880
}
7981

8082
#[derive(Debug)]

src/bors/handlers/mod.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use crate::bors::handlers::trybuild::{TRY_BRANCH_NAME, command_try_build, comman
1919
use crate::bors::handlers::workflow::{
2020
handle_check_suite_completed, handle_workflow_completed, handle_workflow_started,
2121
};
22+
use crate::bors::merge_queue::MergeQueueSender;
2223
use crate::bors::{BorsContext, Comment, RepositoryState};
2324
use crate::database::{DelegatedPermission, PullRequestModel};
2425
use crate::github::{GithubUser, PullRequest, PullRequestNumber};
@@ -238,6 +239,7 @@ pub async fn handle_bors_global_event(
238239
gh_client: &Octocrab,
239240
team_api_client: &TeamApiClient,
240241
mergeable_queue_tx: MergeableQueueSender,
242+
merge_queue_tx: MergeQueueSender,
241243
) -> anyhow::Result<()> {
242244
let db = Arc::clone(&ctx.db);
243245
match event {
@@ -313,6 +315,9 @@ pub async fn handle_bors_global_event(
313315
#[cfg(test)]
314316
crate::bors::WAIT_FOR_PR_STATUS_REFRESH.mark();
315317
}
318+
BorsGlobalEvent::ProcessMergeQueue => {
319+
merge_queue_tx.send(()).await?;
320+
}
316321
}
317322
Ok(())
318323
}

src/bors/merge_queue.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@ use tracing::Instrument;
55

66
use crate::BorsContext;
77

8-
pub type MergeQueueEvent = ();
8+
type MergeQueueEvent = ();
9+
pub type MergeQueueSender = mpsc::Sender<MergeQueueEvent>;
910

1011
pub async fn merge_queue_tick(_ctx: Arc<BorsContext>) -> anyhow::Result<()> {
1112
Ok(())
1213
}
1314

14-
pub fn start_merge_queue(
15-
ctx: Arc<BorsContext>,
16-
) -> (mpsc::Sender<MergeQueueEvent>, impl Future<Output = ()>) {
15+
pub fn start_merge_queue(ctx: Arc<BorsContext>) -> (MergeQueueSender, impl Future<Output = ()>) {
1716
let (tx, mut rx) = mpsc::channel::<MergeQueueEvent>(10);
1817

1918
let fut = async move {

src/github/server.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::bors::event::BorsEvent;
2-
use crate::bors::merge_queue::{MergeQueueEvent, start_merge_queue};
2+
use crate::bors::merge_queue::{MergeQueueSender, start_merge_queue};
33
use crate::bors::mergeable_queue::{
44
MergeableQueueReceiver, MergeableQueueSender, create_mergeable_queue,
55
handle_mergeable_queue_item,
@@ -195,7 +195,7 @@ pub async fn github_webhook_handler(
195195
pub struct BorsProcess {
196196
pub repository_tx: mpsc::Sender<BorsRepositoryEvent>,
197197
pub global_tx: mpsc::Sender<BorsGlobalEvent>,
198-
pub merge_queue_tx: mpsc::Sender<MergeQueueEvent>,
198+
pub merge_queue_tx: MergeQueueSender,
199199
pub mergeable_queue_tx: MergeableQueueSender,
200200
pub bors_process: Pin<Box<dyn Future<Output = ()> + Send>>,
201201
}
@@ -293,7 +293,7 @@ async fn consume_global_events(
293293
ctx: Arc<BorsContext>,
294294
mut global_rx: mpsc::Receiver<BorsGlobalEvent>,
295295
mergeable_queue_tx: MergeableQueueSender,
296-
merge_queue_tx: mpsc::Sender<MergeQueueEvent>,
296+
merge_queue_tx: MergeQueueSender,
297297
gh_client: Octocrab,
298298
team_api: TeamApiClient,
299299
) {

src/tests/mocks/bors.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use super::pull_request::{
1616
GitHubPullRequestEventPayload, GitHubPushEventPayload, PullRequestChangeEvent,
1717
};
1818
use super::repository::PullRequest;
19-
use crate::bors::merge_queue::MergeQueueEvent;
19+
use crate::bors::merge_queue::MergeQueueSender;
2020
use crate::bors::mergeable_queue::MergeableQueueSender;
2121
use crate::bors::{
2222
RollupMode, WAIT_FOR_CANCEL_TIMED_OUT_BUILDS_REFRESH, WAIT_FOR_MERGEABILITY_STATUS_REFRESH,
@@ -109,7 +109,7 @@ pub struct BorsTester {
109109
github: GitHubState,
110110
db: Arc<PgDbClient>,
111111
mergeable_queue_tx: MergeableQueueSender,
112-
merge_queue_tx: Sender<MergeQueueEvent>,
112+
merge_queue_tx: MergeQueueSender,
113113
// Sender for bors global events
114114
global_tx: Sender<BorsGlobalEvent>,
115115
// When this field is false, no webhooks should be generated from BorsTester methods

0 commit comments

Comments
 (0)