summaryrefslogtreecommitdiffstats
path: root/src/job/runnable.rs
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-10-22 18:27:09 +0200
committerMatthias Beyer <mail@beyermatthias.de>2020-10-26 15:31:44 +0100
commit1dd65c869c8ca3511a430ec6981f1d83bb8d787e (patch)
tree04ed498b69394a53a74eb6e9de337dee5e6579a2 /src/job/runnable.rs
parentadaad3a4c1665bbfe74875b3dd4bdf51ca05adca (diff)
Add job related types
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/job/runnable.rs')
-rw-r--r--src/job/runnable.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/job/runnable.rs b/src/job/runnable.rs
new file mode 100644
index 0000000..4377d27
--- /dev/null
+++ b/src/job/runnable.rs
@@ -0,0 +1,46 @@
+use getset::Getters;
+use uuid::Uuid;
+use anyhow::Result;
+
+use crate::job::Job;
+use crate::job::JobResource;
+use crate::package::Package;
+use crate::package::Script;
+use crate::package::ScriptBuilder;
+use crate::phase::PhaseName;
+use crate::util::docker::ImageName;
+
+/// A job configuration that can be run. All inputs are clear here.
+#[derive(Debug, Getters)]
+pub struct RunnableJob {
+ uuid: Uuid,
+
+ #[getset(get = "pub")]
+ package: Package,
+
+ #[getset(get = "pub")]
+ image: ImageName,
+
+ #[getset(get = "pub")]
+ script: Script,
+
+ #[getset(get = "pub")]
+ resources: Vec<JobResource>,
+}
+
+impl RunnableJob {
+ pub fn build_from_job(job: Job) -> Result<Self> {
+ let script = ScriptBuilder::new(&job.script_shebang)
+ .build(&job.package, &job.script_phases)?;
+
+ Ok(RunnableJob {
+ uuid: job.uuid,
+ package: job.package,
+ image: job.image,
+ resources: job.resources,
+
+ script,
+ })
+
+ }
+}