forked from the-distro/ofborg
mass-rebuild workk
This commit is contained in:
parent
e6464dac06
commit
a6e29ab24f
|
@ -7,8 +7,9 @@ extern crate log;
|
||||||
|
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
use ofborg::worker::SimpleWorker;
|
||||||
use ofborg::tasks;
|
use ofborg::tasks;
|
||||||
|
use ofborg::message;
|
||||||
use ofborg::config;
|
use ofborg::config;
|
||||||
use ofborg::checkout;
|
use ofborg::checkout;
|
||||||
use ofborg::nix;
|
use ofborg::nix;
|
||||||
|
@ -49,8 +50,27 @@ fn main() {
|
||||||
let cloner = checkout::cached_cloner(Path::new(&cfg.checkout.root));
|
let cloner = checkout::cached_cloner(Path::new(&cfg.checkout.root));
|
||||||
let nix = nix::new(cfg.nix.system.clone(), cfg.nix.remote.clone());
|
let nix = nix::new(cfg.nix.system.clone(), cfg.nix.remote.clone());
|
||||||
|
|
||||||
|
|
||||||
|
let mrw = tasks::massrebuilder::MassRebuildWorker::new(cloner, nix, cfg.github());
|
||||||
|
println!("{:?}", mrw.consumer(&message::massrebuildjob::MassRebuildJob{
|
||||||
|
pr: ofborg::message::Pr {
|
||||||
|
head_sha: String::from("e82a34e55cc52e0eace0d9b5d4452c7359038a19"),
|
||||||
|
number: 30777,
|
||||||
|
target_branch: Some(String::from("master")),
|
||||||
|
},
|
||||||
|
repo: ofborg::message::Repo {
|
||||||
|
clone_url: String::from("https://github.com/NixOS/nixpkgs.git"),
|
||||||
|
full_name: String::from("NixOS/nixpkgs"),
|
||||||
|
owner: String::from("NixOS"),
|
||||||
|
name: String::from("nixpkgs"),
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
panic!();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
channel.basic_consume(
|
channel.basic_consume(
|
||||||
worker::new(tasks::massrebuilder::MassRebuildWorker::new(cloner, nix)),
|
worker::new(tasks::massrebuilder::MassRebuildWorker::new(cloner, nix, cfg.github())),
|
||||||
"mass-rebuild-check-jobs",
|
"mass-rebuild-check-jobs",
|
||||||
format!("{}-mass-rebuild-checker", cfg.whoami()).as_ref(),
|
format!("{}-mass-rebuild-checker", cfg.whoami()).as_ref(),
|
||||||
false,
|
false,
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
extern crate amqp;
|
extern crate amqp;
|
||||||
extern crate env_logger;
|
extern crate env_logger;
|
||||||
|
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::io::BufRead;
|
use std::io::BufRead;
|
||||||
|
@ -13,17 +14,20 @@ use ofborg::nix;
|
||||||
|
|
||||||
use ofborg::worker;
|
use ofborg::worker;
|
||||||
use amqp::protocol::basic::{Deliver,BasicProperties};
|
use amqp::protocol::basic::{Deliver,BasicProperties};
|
||||||
|
use hubcaps;
|
||||||
|
|
||||||
pub struct MassRebuildWorker {
|
pub struct MassRebuildWorker {
|
||||||
cloner: checkout::CachedCloner,
|
cloner: checkout::CachedCloner,
|
||||||
nix: nix::Nix,
|
nix: nix::Nix,
|
||||||
|
github: hubcaps::Github,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MassRebuildWorker {
|
impl MassRebuildWorker {
|
||||||
pub fn new(cloner: checkout::CachedCloner, nix: nix::Nix) -> MassRebuildWorker {
|
pub fn new(cloner: checkout::CachedCloner, nix: nix::Nix, github: hubcaps::Github) -> MassRebuildWorker {
|
||||||
return MassRebuildWorker{
|
return MassRebuildWorker{
|
||||||
cloner: cloner,
|
cloner: cloner,
|
||||||
nix: nix,
|
nix: nix,
|
||||||
|
github: github,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +52,10 @@ impl worker::SimpleWorker for MassRebuildWorker {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn consumer(&self, job: &massrebuildjob::MassRebuildJob) -> worker::Actions {
|
fn consumer(&self, job: &massrebuildjob::MassRebuildJob) -> worker::Actions {
|
||||||
|
let repo = self.github
|
||||||
|
.repo(job.repo.owner.clone(), job.repo.name.clone());
|
||||||
|
let gists = self.github.gists();
|
||||||
|
|
||||||
let project = self.cloner.project(job.repo.full_name.clone(), job.repo.clone_url.clone());
|
let project = self.cloner.project(job.repo.full_name.clone(), job.repo.clone_url.clone());
|
||||||
let co = project.clone_for("mr-est".to_string(),
|
let co = project.clone_for("mr-est".to_string(),
|
||||||
job.pr.number.to_string()).unwrap();
|
job.pr.number.to_string()).unwrap();
|
||||||
|
@ -146,7 +154,68 @@ impl worker::SimpleWorker for MassRebuildWorker {
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
eval_checks.into_iter().map(|check| check.execute((&refpath).to_owned()));
|
let eval_results: bool = eval_checks.into_iter()
|
||||||
|
.map(|check|
|
||||||
|
{
|
||||||
|
let statuses = repo.statuses();
|
||||||
|
|
||||||
|
statuses.create(
|
||||||
|
job.pr.head_sha.as_ref(),
|
||||||
|
&hubcaps::statuses::StatusOptions::builder(
|
||||||
|
hubcaps::statuses::State::Pending
|
||||||
|
)
|
||||||
|
.context(check.name())
|
||||||
|
.description(check.cli_cmd())
|
||||||
|
.target_url("")
|
||||||
|
.build()
|
||||||
|
).expect("Failed to mark pending status on commit");
|
||||||
|
|
||||||
|
let state: hubcaps::statuses::State;
|
||||||
|
let mut out: File;
|
||||||
|
match check.execute((&refpath).to_owned()) {
|
||||||
|
Ok(o) => {
|
||||||
|
out = o;
|
||||||
|
state = hubcaps::statuses::State::Success;
|
||||||
|
}
|
||||||
|
Err(o) => {
|
||||||
|
out = o;
|
||||||
|
state = hubcaps::statuses::State::Failure;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut files = HashMap::new();
|
||||||
|
files.insert(check.name(),
|
||||||
|
hubcaps::gists::Content {
|
||||||
|
filename: Some(check.name()),
|
||||||
|
content: file_to_str(&mut out),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
let gist_url = gists.create(
|
||||||
|
&hubcaps::gists::GistOptions {
|
||||||
|
description: Some(format!("{:?}", state)),
|
||||||
|
public: Some(true),
|
||||||
|
files: files,
|
||||||
|
}
|
||||||
|
).expect("Failed to create gist!").html_url;
|
||||||
|
|
||||||
|
statuses.create(
|
||||||
|
job.pr.head_sha.as_ref(),
|
||||||
|
&hubcaps::statuses::StatusOptions::builder(state.clone())
|
||||||
|
.context(check.name())
|
||||||
|
.description(check.cli_cmd())
|
||||||
|
.target_url(gist_url)
|
||||||
|
.build()
|
||||||
|
).expect("Failed to mark final status on commit");
|
||||||
|
|
||||||
|
if state == hubcaps::statuses::State::Success {
|
||||||
|
return Ok(())
|
||||||
|
} else {
|
||||||
|
return Err(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.all(|status| status == Ok(()));
|
||||||
|
|
||||||
return vec![];
|
return vec![];
|
||||||
}
|
}
|
||||||
|
@ -170,8 +239,18 @@ impl EvalChecker {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn execute(&self, path: String) {
|
fn name(&self) -> String {
|
||||||
self.nix.safely(&self.cmd, &Path::new(&path), self.args.clone());
|
format!("grahamcofborg-eval-{}", self.name)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn execute(&self, path: String) -> Result<File, File> {
|
||||||
|
self.nix.safely(&self.cmd, &Path::new(&path), self.args.clone())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn cli_cmd(&self) -> String {
|
||||||
|
let mut cli = vec![self.cmd.clone()];
|
||||||
|
cli.append(&mut self.args.clone());
|
||||||
|
return cli.join(" ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ pub struct Response {
|
||||||
|
|
||||||
pub type Actions = Vec<Action>;
|
pub type Actions = Vec<Action>;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
pub enum Action {
|
pub enum Action {
|
||||||
Ack,
|
Ack,
|
||||||
NackRequeue,
|
NackRequeue,
|
||||||
|
|
Loading…
Reference in a new issue