Skip to content

Commit b2502ab

Browse files
committed
Enable Bors to process commands from PR description when opened
1 parent 14d1076 commit b2502ab

File tree

2 files changed

+47
-8
lines changed

2 files changed

+47
-8
lines changed

src/bors/handlers/mod.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,16 @@ pub async fn handle_bors_repository_event(
148148
let span =
149149
tracing::info_span!("Pull request opened", repo = payload.repository.to_string());
150150

151-
handle_pull_request_opened(repo, db, mergeability_queue_tx, payload)
152-
.instrument(span.clone())
153-
.await?;
151+
handle_pull_request_opened(
152+
repo,
153+
db,
154+
ctx,
155+
mergeability_queue_tx,
156+
merge_queue_tx,
157+
payload,
158+
)
159+
.instrument(span.clone())
160+
.await?;
154161
}
155162
BorsRepositoryEvent::PullRequestClosed(payload) => {
156163
let span =

src/bors/handlers/pr_events.rs

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
use crate::PgDbClient;
22
use crate::bors::event::{
3-
PullRequestAssigned, PullRequestClosed, PullRequestConvertedToDraft, PullRequestEdited,
4-
PullRequestMerged, PullRequestOpened, PullRequestPushed, PullRequestReadyForReview,
5-
PullRequestReopened, PullRequestUnassigned, PushToBranch,
3+
PullRequestAssigned, PullRequestClosed, PullRequestComment, PullRequestConvertedToDraft,
4+
PullRequestEdited, PullRequestMerged, PullRequestOpened, PullRequestPushed,
5+
PullRequestReadyForReview, PullRequestReopened, PullRequestUnassigned, PushToBranch,
66
};
7+
8+
use crate::bors::BorsContext;
9+
use crate::bors::handlers::handle_comment;
710
use crate::bors::handlers::unapprove_pr;
811
use crate::bors::handlers::workflow::{AutoBuildCancelReason, maybe_cancel_auto_build};
12+
use crate::bors::merge_queue::MergeQueueSender;
913
use crate::bors::mergeability_queue::MergeabilityQueueSender;
1014
use crate::bors::{Comment, PullRequestStatus, RepositoryState};
1115
use crate::database::MergeableState;
@@ -90,7 +94,9 @@ pub(super) async fn handle_push_to_pull_request(
9094
pub(super) async fn handle_pull_request_opened(
9195
repo_state: Arc<RepositoryState>,
9296
db: Arc<PgDbClient>,
97+
ctx: Arc<BorsContext>,
9398
mergeability_queue: MergeabilityQueueSender,
99+
merge_queue_tx: MergeQueueSender,
94100
payload: PullRequestOpened,
95101
) -> anyhow::Result<()> {
96102
let pr_status = if payload.draft {
@@ -101,8 +107,8 @@ pub(super) async fn handle_pull_request_opened(
101107
let assignees: Vec<String> = payload
102108
.pull_request
103109
.assignees
104-
.into_iter()
105-
.map(|user| user.username)
110+
.iter()
111+
.map(|user| user.username.clone())
106112
.collect();
107113
db.create_pull_request(
108114
repo_state.repository(),
@@ -115,6 +121,8 @@ pub(super) async fn handle_pull_request_opened(
115121
)
116122
.await?;
117123

124+
process_pr_description_commands(&payload, repo_state.clone(), db, ctx, merge_queue_tx).await?;
125+
118126
mergeability_queue.enqueue_pr(repo_state.repository().clone(), payload.pull_request.number);
119127

120128
Ok(())
@@ -256,6 +264,30 @@ pub(super) async fn handle_push_to_branch(
256264
Ok(())
257265
}
258266

267+
async fn process_pr_description_commands(
268+
payload: &PullRequestOpened,
269+
repo: Arc<RepositoryState>,
270+
database: Arc<PgDbClient>,
271+
ctx: Arc<BorsContext>,
272+
merge_queue_tx: MergeQueueSender,
273+
) -> anyhow::Result<()> {
274+
let pr_description_comment = create_pr_description_comment(payload);
275+
handle_comment(repo, database, ctx, pr_description_comment, merge_queue_tx).await
276+
}
277+
278+
fn create_pr_description_comment(payload: &PullRequestOpened) -> PullRequestComment {
279+
PullRequestComment {
280+
repository: payload.repository.clone(),
281+
author: payload.pull_request.author.clone(),
282+
pr_number: payload.pull_request.number,
283+
text: payload.pull_request.message.clone(),
284+
html_url: format!(
285+
"https://github.com/{}/pull/{}",
286+
payload.repository, payload.pull_request.number
287+
),
288+
}
289+
}
290+
259291
async fn notify_of_edited_pr(
260292
repo: &RepositoryState,
261293
pr_number: PullRequestNumber,

0 commit comments

Comments
 (0)