4
4
5
5
// Further info could be find in src/jobs.rs
6
6
use super :: Context ;
7
+ use crate :: db:: issue_decision_state:: get_issue_decision_state;
7
8
use crate :: github:: * ;
8
9
use crate :: handlers:: decision:: { DecisionProcessActionMetadata , DECISION_PROCESS_JOB_NAME } ;
10
+ use crate :: interactions:: PingComment ;
9
11
use parser:: command:: decision:: Resolution :: { Hold , Merge } ;
10
12
use reqwest:: Client ;
13
+ use tokio_postgres:: Client as DbClient ;
11
14
use tracing as log;
12
15
13
16
pub async fn handle_job (
@@ -22,7 +25,8 @@ pub async fn handle_job(
22
25
Ok ( ( ) )
23
26
}
24
27
matched_name if * matched_name == DECISION_PROCESS_JOB_NAME . to_string ( ) => {
25
- decision_process_handler ( & metadata) . await
28
+ let db = ctx. db . get ( ) . await ;
29
+ decision_process_handler ( & db, & metadata) . await
26
30
}
27
31
_ => default ( & name, & metadata) ,
28
32
}
@@ -38,7 +42,10 @@ fn default(name: &String, metadata: &serde_json::Value) -> anyhow::Result<()> {
38
42
Ok ( ( ) )
39
43
}
40
44
41
- async fn decision_process_handler ( metadata : & serde_json:: Value ) -> anyhow:: Result < ( ) > {
45
+ async fn decision_process_handler (
46
+ db : & DbClient ,
47
+ metadata : & serde_json:: Value ,
48
+ ) -> anyhow:: Result < ( ) > {
42
49
tracing:: trace!(
43
50
"handle_job fell into decision process case: (metadata={:?})" ,
44
51
metadata
@@ -50,7 +57,22 @@ async fn decision_process_handler(metadata: &serde_json::Value) -> anyhow::Resul
50
57
51
58
match gh_client. json :: < Issue > ( request) . await {
52
59
Ok ( issue) => match metadata. status {
53
- Merge => issue. merge ( & gh_client) . await ?,
60
+ Merge => {
61
+ let users: Vec < String > = get_issue_decision_state ( & db, & issue. number )
62
+ . await
63
+ . unwrap ( )
64
+ . current
65
+ . into_keys ( )
66
+ . collect ( ) ;
67
+ let users_ref: Vec < & str > = users. iter ( ) . map ( |x| x. as_ref ( ) ) . collect ( ) ;
68
+
69
+ let cmnt = PingComment :: new (
70
+ & issue,
71
+ & users_ref,
72
+ "The final comment period has resolved, with a decision to **merge**. Ping involved once again." ,
73
+ ) ;
74
+ cmnt. post ( & gh_client) . await ?;
75
+ }
54
76
Hold => issue. close ( & gh_client) . await ?,
55
77
} ,
56
78
Err ( e) => log:: error!(
0 commit comments