diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-11-07 10:19:30 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-11-07 14:53:15 +0100 |
commit | 541cc9dbe0e4bc87b3ba895a129b3eef79b18135 (patch) | |
tree | e94af01cbd73137da78ff7432da444cbdf8f405f /src/job/runnable.rs | |
parent | a7a13531c7c0c902f676d237351471cbb89a90dd (diff) |
Add runtime-dependencies in runnable job
This patch adds the runtime dependencies into the runnable job.
These might be required to execute tests for a package inside the
container.
Because of this we also copy them to the container.
The patch also generalizes the preparing mechansim into a helper
function and makes use of some nice iterator chaining to be more
readable.
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/job/runnable.rs')
-rw-r--r-- | src/job/runnable.rs | 58 |
1 files changed, 36 insertions, 22 deletions
diff --git a/src/job/runnable.rs b/src/job/runnable.rs index 971cb30..1654937 100644 --- a/src/job/runnable.rs +++ b/src/job/runnable.rs @@ -40,31 +40,21 @@ impl RunnableJob { let script = ScriptBuilder::new(&job.script_shebang) .build(&job.package, &job.script_phases)?; - let resources = job.package() + trace!("Preparing build dependencies"); + let build_resources = job.package() .dependencies() .build() .into_iter() - .map(|runtime_dep| { - let (name, version) = runtime_dep.parse_as_name_and_version()?; - let mut a = merged_stores.get_artifact_by_name_and_version(&name, &version)?; - - if a.is_empty() { - Err(anyhow!("Cannot find dependency: {:?} {:?}", name, version)) - .context("Building a runnable job") - .map_err(Error::from) - } else { - a.sort(); - let a_len = a.len(); - let found_dependency = a.into_iter().next().unwrap(); // save by above check - if a_len > 1 { - warn!("Found more than one dependency for {:?} {:?}", name, version); - warn!("Using: {:?}", found_dependency); - warn!("Please investigate, this might be a BUG"); - } - - Ok(JobResource::Artifact(found_dependency.clone())) - } - }) + .map(|dep| Self::build_resource(dep, merged_stores)); + + trace!("Preparing runtime dependencies"); + let runtime_resources = job.package() + .dependencies() + .runtime() + .into_iter() + .map(|dep| Self::build_resource(dep, merged_stores)); + + let resources = build_resources.chain(runtime_resources) .collect::<Result<Vec<JobResource>>>()?; Ok(RunnableJob { @@ -77,4 +67,28 @@ impl RunnableJob { }) } + + fn build_resource(dep: &dyn ParseDependency, merged_stores: &MergedStores) -> Result<JobResource> { + let (name, vers) = dep.parse_as_name_and_version()?; + trace!("Copying dep: {:?} {:?}", name, vers); + let mut a = merged_stores.get_artifact_by_name_and_version(&name, &vers)?; + + if a.is_empty() { + Err(anyhow!("Cannot find dependency: {:?} {:?}", name, vers)) + .context("Building a runnable job") + .map_err(Error::from) + } else { + a.sort(); + let a_len = a.len(); + let found_dependency = a.into_iter().next().unwrap(); // save by above check + if a_len > 1 { + warn!("Found more than one dependency for {:?} {:?}", name, vers); + warn!("Using: {:?}", found_dependency); + warn!("Please investigate, this might be a BUG"); + } + + Ok(JobResource::Artifact(found_dependency.clone())) + } + + } } |