first working POC
This commit is contained in:
parent
b37891af49
commit
2bd817099f
3 changed files with 150 additions and 26 deletions
30
src/main.rs
30
src/main.rs
|
|
@ -1,13 +1,14 @@
|
|||
#![feature(proc_macro_hygiene, decl_macro)]
|
||||
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::env;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::{
|
||||
mpsc::{channel, Receiver, Sender},
|
||||
Mutex,
|
||||
};
|
||||
use std::thread;
|
||||
|
||||
use rocket::{fairing::AdHoc, http::Status, post, routes, State};
|
||||
use rocket::{http::Status, post, routes, State};
|
||||
use rocket_contrib::json::Json;
|
||||
|
||||
use log::error;
|
||||
|
|
@ -18,26 +19,24 @@ use gitea::GiteaWebHook;
|
|||
mod job;
|
||||
use job::Job;
|
||||
|
||||
struct HomeDir(PathBuf);
|
||||
struct JobSender(Mutex<Sender<Job>>);
|
||||
|
||||
#[post("/", data = "<payload>")]
|
||||
fn gitea_webhook(payload: Json<GiteaWebHook>, sender: State<JobSender>) -> Status {
|
||||
{
|
||||
let sender = sender.0.lock().unwrap();
|
||||
sender
|
||||
.send(Job::new(payload.repository.full_name.clone()))
|
||||
.unwrap();
|
||||
let repo = &payload.repository;
|
||||
sender.send(Job::new(repo.clone())).unwrap();
|
||||
}
|
||||
|
||||
Status::Ok
|
||||
}
|
||||
|
||||
fn repo_updater(rx: Receiver<Job>) {
|
||||
fn repo_updater(rx: Receiver<Job>, homedir: PathBuf) {
|
||||
loop {
|
||||
let job = rx.recv().unwrap();
|
||||
let mut job = rx.recv().unwrap();
|
||||
|
||||
if let Err(err) = job.run() {
|
||||
if let Err(err) = job.run(&homedir) {
|
||||
error!("couldn't process job: {}", err);
|
||||
}
|
||||
}
|
||||
|
|
@ -46,19 +45,16 @@ fn repo_updater(rx: Receiver<Job>) {
|
|||
fn main() {
|
||||
let (sender, receiver) = channel();
|
||||
|
||||
let homedir = env::var("LOHR_HOME").unwrap_or_else(|_| "./".to_string());
|
||||
let homedir: PathBuf = homedir.into();
|
||||
let homedir = homedir.canonicalize().expect("LOHR_HOME isn't valid!");
|
||||
|
||||
thread::spawn(move || {
|
||||
repo_updater(receiver);
|
||||
repo_updater(receiver, homedir);
|
||||
});
|
||||
|
||||
rocket::ignite()
|
||||
.mount("/", routes![gitea_webhook])
|
||||
.manage(JobSender(Mutex::new(sender)))
|
||||
.attach(AdHoc::on_attach("Assets Config", |rocket| {
|
||||
let home_dir = rocket.config().get_str("home").unwrap();
|
||||
|
||||
let home_dir = Path::new(home_dir).into();
|
||||
|
||||
Ok(rocket.manage(HomeDir(home_dir)))
|
||||
}))
|
||||
.launch();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue