Listen to git commits for a specific repo and run a shell command

Add old logic back in

vielle.dev 1e5b08c3 cae008da

verified
Changed files
+40 -3
src
+40 -3
src/main.rs
··· 1 + use std::process::Command; 2 + 1 3 mod args; 2 4 mod did; 3 5 mod knot; ··· 36 38 37 39 match ws::connect(format!("ws://{}/events", knot_server), |_out| { 38 40 println!(" Connection successful"); 39 - |msg| { 41 + |msg: ws::Message| { 40 42 println!("Got message: {}", msg); 43 + 44 + // parse json 45 + let body = match json::parse(match msg.as_text() { 46 + Ok(val) => val, 47 + Err(_) => return Ok(()), 48 + }) { 49 + Ok(val) => val, 50 + Err(_) => { 51 + println!(" Invalid body. Skipping message"); 52 + return Ok(()); 53 + } 54 + }; 55 + 56 + // filter by did and reponame 57 + if let Some(repo_did) = body["event"]["repoDid"].as_str() 58 + && let Some(repo) = body["event"]["repoName"].as_str() 59 + && repo_did != &did_doc.did 60 + && repo != &config.repo_name 61 + { 62 + // repo doesnt match so skip 63 + return Ok(()); 64 + } 65 + 66 + println!(" Executing `/bin/sh -c {}`", &config.shell); 67 + 68 + // exec shell command in /bin/sh 69 + match Command::new("/bin/sh") 70 + .arg("-c") 71 + .arg(&config.shell) 72 + .output() 73 + { 74 + Ok(val) => val, 75 + Err(_) => return Ok(()), 76 + }; 77 + 41 78 Ok(()) 42 79 } 43 80 }) { 44 - Ok(_) => {}, 45 - Err(err) => println!(" Connection failed: {}", err) 81 + Ok(_) => {} 82 + Err(err) => println!(" Connection failed: {}", err), 46 83 }; 47 84 48 85 return Ok(());