@@ -5,14 +5,15 @@ use axum::http::HeaderMap;
5
5
use axum:: routing:: { get, post} ;
6
6
use axum:: { Json , Router } ;
7
7
use axum_macros:: debug_handler;
8
+ use gh:: event:: CheckSuiteAction ;
9
+ use octocrab:: models:: webhook_events:: payload:: PullRequestWebhookEventAction ;
8
10
use tower_http:: trace:: TraceLayer ;
9
11
use tracing:: { info, warn} ;
10
12
use tracing_subscriber:: layer:: SubscriberExt ;
11
13
use tracing_subscriber:: util:: SubscriberInitExt ;
12
14
13
- use gh:: event:: { CheckSuiteAction , CheckSuiteEvent } ;
14
-
15
15
use crate :: error:: AppResult ;
16
+ use crate :: gh:: event:: Payload ;
16
17
use crate :: gh:: CocogittoBot ;
17
18
use crate :: settings:: Settings ;
18
19
@@ -64,33 +65,51 @@ async fn main() -> anyhow::Result<()> {
64
65
async fn pull_request_handler (
65
66
State ( state) : State < AppState > ,
66
67
headers : HeaderMap ,
67
- Json ( event) : Json < CheckSuiteEvent > ,
68
+ Json ( event) : Json < Payload > ,
68
69
) -> AppResult < ( ) > {
69
70
let Some ( event_header) = headers. get ( "X-Github-Event" ) else {
70
71
warn ! ( "'X-Github-Event' header missing, ignoring request" ) ;
71
72
return Ok ( ( ) ) ;
72
73
} ;
73
74
74
- let Ok ( "check_suite" ) = event_header. to_str ( ) else {
75
- info ! ( "Ignoring non check_suite event" ) ;
76
- return Ok ( ( ) ) ;
77
- } ;
78
-
79
- if event. action == CheckSuiteAction :: Completed {
80
- info ! ( "Ignoring completed check_suite" ) ;
81
- return Ok ( ( ) ) ;
75
+ match event_header. to_str ( ) {
76
+ Ok ( "check_suite" ) | Ok ( "pull_request" ) => { }
77
+ _ => {
78
+ info ! ( "Ignoring non check_suite event" ) ;
79
+ return Ok ( ( ) ) ;
80
+ }
82
81
}
83
82
84
- if event. check_suite . pull_requests . is_empty ( ) {
85
- info ! ( "Ignoring non pull request check_suite event" ) ;
86
- return Ok ( ( ) ) ;
83
+ match event {
84
+ Payload :: CheckSuite ( event) => {
85
+ if event. action == CheckSuiteAction :: Completed {
86
+ info ! ( "Ignoring completed check_suite" ) ;
87
+ return Ok ( ( ) ) ;
88
+ }
89
+
90
+ if event. check_suite . pull_requests . is_empty ( ) {
91
+ info ! ( "Ignoring non pull request check_suite event" ) ;
92
+ return Ok ( ( ) ) ;
93
+ }
94
+
95
+ CocogittoBot :: from_check_suite ( event, & state. github_key )
96
+ . await ?
97
+ . run ( )
98
+ . await ?;
99
+ }
100
+ Payload :: PullRequest ( event) => {
101
+ if event. inner . action != PullRequestWebhookEventAction :: Opened {
102
+ info ! ( "Ignoring pull_request event" ) ;
103
+ return Ok ( ( ) ) ;
104
+ }
105
+
106
+ CocogittoBot :: from_pull_request ( event, & state. github_key )
107
+ . await ?
108
+ . run ( )
109
+ . await ?;
110
+ }
87
111
}
88
112
89
- CocogittoBot :: from_check_suite ( event, & state. github_key )
90
- . await ?
91
- . run ( )
92
- . await ?;
93
-
94
113
Ok ( ( ) )
95
114
}
96
115
0 commit comments