summaryrefslogtreecommitdiffstats
path: root/src/job
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-11-07 10:19:30 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-11-07 14:53:15 +0100
commit541cc9dbe0e4bc87b3ba895a129b3eef79b18135 (patch)
treee94af01cbd73137da78ff7432da444cbdf8f405f /src/job
parenta7a13531c7c0c902f676d237351471cbb89a90dd (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')
-rw-r--r--src/job/runnable.rs58
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()))
+ }
+
+ }
}