Skip to content

Commit d5e4458

Browse files
authored
Merge pull request #1800 from ehuss/webhook-deserialize-fix
Fix some webhook deserialization errors.
2 parents 739a9d9 + eda862f commit d5e4458

File tree

5 files changed

+143
-34
lines changed

5 files changed

+143
-34
lines changed

Cargo.lock

Lines changed: 129 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ tracing = "0.1"
2828
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
2929
url = "2.1.0"
3030
once_cell = "1"
31-
chrono = { version = "0.4", features = ["serde"] }
31+
chrono = { version = "0.4.38", features = ["serde"] }
3232
tokio-postgres = { version = "0.7.2", features = ["with-chrono-0_4", "with-serde_json-1", "with-uuid-0_8"] }
3333
postgres-native-tls = "0.5.0"
3434
native-tls = "0.2"

src/github.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -363,9 +363,9 @@ pub struct Comment {
363363
pub body: String,
364364
pub html_url: String,
365365
pub user: User,
366-
#[serde(alias = "submitted_at")] // for pull request reviews
366+
#[serde(default, alias = "submitted_at")] // for pull request reviews
367367
pub created_at: chrono::DateTime<Utc>,
368-
#[serde(alias = "submitted_at")] // for pull request reviews
368+
#[serde(default, alias = "submitted_at")] // for pull request reviews
369369
pub updated_at: chrono::DateTime<Utc>,
370370
#[serde(default, rename = "state")]
371371
pub pr_review_state: Option<PullRequestReviewState>,
@@ -983,14 +983,18 @@ pub enum IssuesAction {
983983
Demilestoned,
984984
ReviewRequested {
985985
/// The person requested to review the pull request
986-
requested_reviewer: User,
986+
///
987+
/// This can be `None` when a review is requested for a team.
988+
requested_reviewer: Option<User>,
987989
},
988990
ReviewRequestRemoved,
989991
ReadyForReview,
990992
Synchronize,
991993
ConvertedToDraft,
992994
AutoMergeEnabled,
993995
AutoMergeDisabled,
996+
Enqueued,
997+
Dequeued,
994998
}
995999

9961000
#[derive(Debug, serde::Deserialize)]

src/handlers/review_requested.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ pub(crate) async fn parse_input(
1515
return Ok(None);
1616
}
1717

18-
let IssuesAction::ReviewRequested { requested_reviewer } = &event.action else {
18+
let IssuesAction::ReviewRequested {
19+
requested_reviewer: Some(requested_reviewer),
20+
} = &event.action
21+
else {
1922
return Ok(None);
2023
};
2124

src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ pub fn deserialize_payload<T: serde::de::DeserializeOwned>(v: &str) -> anyhow::R
163163
match res {
164164
Ok(r) => Ok(r),
165165
Err(e) => {
166+
log::error!("failed to deserialize webhook payload: {v}");
166167
let ctx = format!("at {:?}", e.path());
167168
Err(e.into_inner()).context(ctx)
168169
}
@@ -184,7 +185,7 @@ pub async fn webhook(
184185
payload.pull_request.pull_request = Some(PullRequestDetails::new());
185186

186187
// Treat pull request review comments exactly like pull request
187-
// review comments.
188+
// comments.
188189
github::Event::IssueComment(github::IssueCommentEvent {
189190
action: match payload.action {
190191
github::PullRequestReviewAction::Submitted => {

0 commit comments

Comments
 (0)