[snowpatch] [PATCH v2] main: Run multiple branch tests in parallel
Andrew Donnellan
ajd at linux.ibm.com
Thu Jun 6 17:17:50 AEST 2019
Spawn multiple Jenkins tests for different branches in parallel for the
same patch.
This is very very simplistic but should significantly enhance Jenkins
utilisation.
Signed-off-by: Andrew Donnellan <ajd at linux.ibm.com>
---
v1->v2:
- cargo fmt
---
src/main.rs | 46 +++++++++++++++++++++++++++++-----------------
1 file changed, 29 insertions(+), 17 deletions(-)
diff --git a/src/main.rs b/src/main.rs
index 5ec0c37b2d7f..02c5e5574e0d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -208,6 +208,9 @@ fn test_patch(
push_opts.remote_callbacks(push_callbacks);
let mut successfully_applied = false;
+
+ let mut test_threads = vec![];
+
for branch_name in project.branches.clone() {
let tag = format!("{}_{}", tag, branch_name);
info!("Configuring local branch for {}.", tag);
@@ -285,30 +288,39 @@ fn test_patch(
let base = commit.id().to_string();
// We've set up a remote branch, time to kick off tests
- let test = thread::Builder::new()
- .name(tag.to_string())
- .spawn(move || {
- run_tests(
- &settings,
- client,
- &project,
- &tag,
- &branch_name,
- &base,
- hefty_tests,
- )
- })
- .unwrap();
- results.append(&mut test.join().unwrap());
+ let test = thread::Builder::new().name(tag.to_string()).spawn(move || {
+ run_tests(
+ &settings,
+ client,
+ &project,
+ &tag,
+ &branch_name,
+ &base,
+ hefty_tests,
+ )
+ });
- // Delete the remote branch now it's not needed any more
- git::push_to_remote(&mut remote, &branch, true, &mut push_opts).unwrap();
+ match test {
+ Ok(thread) => test_threads.push((thread, branch)),
+ Err(e) => {
+ error!("Error spawning thread: {}", e);
+ git::push_to_remote(&mut remote, &branch, true, &mut push_opts).unwrap();
+ }
+ }
if !test_all_branches {
break;
}
}
+ // Wait for results
+ for (thread, branch) in test_threads {
+ results.append(&mut thread.join().unwrap());
+
+ // Delete the remote branch now it's not needed any more
+ git::push_to_remote(&mut remote, &branch, true, &mut push_opts).unwrap();
+ }
+
if !successfully_applied {
results.push(TestResult {
state: TestState::Fail,
--
2.20.1
More information about the snowpatch
mailing list