[snowpatch] [PATCH] jenkins: get build result
Andrew Donnellan
andrew.donnellan at au1.ibm.com
Fri Feb 3 17:39:07 AEDT 2017
When a build completes, get the result (success, failure or unstable) from
Jenkins, and use it to update Patchwork.
Closes: #14 ("Submit Jenkins test results to patchwork")
Signed-off-by: Andrew Donnellan <andrew.donnellan at au1.ibm.com>
---
for information only, already merged
---
src/jenkins.rs | 15 +++++++++++++++
src/main.rs | 3 ++-
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/jenkins.rs b/src/jenkins.rs
index 1c63e75..0122a06 100644
--- a/src/jenkins.rs
+++ b/src/jenkins.rs
@@ -34,6 +34,8 @@ use hyper::client::{IntoUrl, RequestBuilder};
use hyper::header::{Headers, Basic, Authorization, Location};
use rustc_serialize::json::Json;
+use patchwork::TestState;
+
// Constants
const JENKINS_POLLING_INTERVAL: u64 = 5000; // Polling interval in milliseconds
@@ -139,6 +141,19 @@ impl JenkinsBackend {
}
}
+ pub fn get_build_result(&self, build_url: &str) -> Option<TestState> {
+ match self.get_api_json_object(build_url).get("result").unwrap()
+ .as_string() {
+ None => None,
+ Some(result) => match result { // TODO: Improve this...
+ "SUCCESS" => Some(TestState::success),
+ "FAILURE" => Some(TestState::failure),
+ "UNSTABLE" => Some(TestState::warning),
+ _ => Some(TestState::pending),
+ },
+ }
+ }
+
pub fn wait_build(&self, build_url: &str) -> JenkinsBuildStatus {
// TODO: Implement a timeout?
while self.get_build_status(build_url) != JenkinsBuildStatus::Done {
diff --git a/src/main.rs b/src/main.rs
index 9909243..c1bf0bf 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -131,10 +131,11 @@ fn run_tests(settings: &Config, client: Arc<Client>, project: &Project, tag: &st
}
debug!("Build URL: {}", build_url_real);
jenkins.wait_build(&build_url_real);
+ let test_result = jenkins.get_build_result(&build_url_real).unwrap();
info!("Jenkins job for {}/{} complete.", branch_name, job_name);
results.push(TestResult {
test_name: format!("{}/{}", branch_name.to_string(), job_name.to_string()),
- state: TestState::success,
+ state: test_result,
url: None, // TODO: link to Jenkins job log
summary: Some("TODO: get this summary from Jenkins".to_string()),
});
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan at au1.ibm.com IBM Australia Limited
More information about the snowpatch
mailing list