diff --git a/ofborg/src/tasks/evaluate.rs b/ofborg/src/tasks/evaluate.rs index bb0cc14..e0d6c6a 100644 --- a/ofborg/src/tasks/evaluate.rs +++ b/ofborg/src/tasks/evaluate.rs @@ -202,52 +202,47 @@ impl<'a, E: stats::SysEvents + 'static> OneEval<'a, E> { } fn worker_actions(&mut self) -> worker::Actions { - let eval_result = self.evaluate_job(); - if let Ok(actions) = eval_result { - return actions; - } - let eval_result = - eval_result.expect_err("We have an OK, but just checked for an Ok before"); + let eval_result = self.evaluate_job().map_err(|eval_error| match eval_error { + // Handle error cases which expect us to post statuses + // to github. Convert Eval Errors in to Result<_, CommitStatusWrite> + EvalWorkerError::EvalError(eval::Error::Fail(msg)) => { + self.update_status(msg, None, hubcaps::statuses::State::Failure) + } + EvalWorkerError::EvalError(eval::Error::FailWithGist(msg, filename, content)) => self + .update_status( + msg, + self.make_gist(&filename, Some("".to_owned()), content), + hubcaps::statuses::State::Failure, + ), + EvalWorkerError::EvalError(eval::Error::CommitStatusWrite(e)) => Err(e), + EvalWorkerError::CommitStatusWrite(e) => Err(e), + }); match eval_result { - EvalWorkerError::CommitStatusWrite(e) - | EvalWorkerError::EvalError(eval::Error::CommitStatusWrite(e)) => { - if e.is_internal_error() { - error!( - "Internal error writing commit status: {:?}, marking internal error", - e - ); - let issue_ref = self.repo.issue(self.job.pr.number); - update_labels(&issue_ref, &[String::from("ofborg-internal-error")], &[]); - } else { - error!( - "Ignorable error writing commit status: {:?}, marking internal error", - e - ); - } + Ok(eval_actions) => eval_actions, + Err(Ok(())) => { + // There was an error during eval, but we successfully + // updated the PR. + + self.actions().skip(&self.job) } - EvalWorkerError::EvalError(eval::Error::Fail(msg)) => { - self.update_status(msg.clone(), None, hubcaps::statuses::State::Failure) - .unwrap_or_else(|e| { - panic!("Failed to set plain status: {}; e: {:?}", msg, e); - }); + Err(Err(cswerr)) if !cswerr.is_internal_error() => { + error!("Ignorable error writing commit status: {:?}", cswerr); + + self.actions().skip(&self.job) } - EvalWorkerError::EvalError(eval::Error::FailWithGist(msg, filename, content)) => { - self.update_status( - msg.clone(), - self.make_gist(&filename, Some("".to_owned()), content.clone()), - hubcaps::statuses::State::Failure, - ) - .unwrap_or_else(|e| { - panic!( - "Failed to set status with a gist: {}, {}, {}; e: {:?}", - msg, filename, content, e - ); - }); + + Err(Err(cswerr)) => { + error!( + "Internal error writing commit status: {:?}, marking internal error", + cswerr + ); + let issue_ref = self.repo.issue(self.job.pr.number); + update_labels(&issue_ref, &[String::from("ofborg-internal-error")], &[]); + + self.actions().skip(&self.job) } } - - self.actions().skip(&self.job) } fn evaluate_job(&mut self) -> Result {