summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2021-10-24 21:46:06 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2021-10-24 21:46:06 +0200
commit9f34a37677cee792cb6c578ad60c7babafaaa115 (patch)
tree14ba2ec0527fa7e686195e11babf6c654f0f25fd
parent152272df6e28af35b13d393ec30b8fd3a333bccf (diff)
downloadrebel-9f34a37677cee792cb6c578ad60c7babafaaa115.tar
rebel-9f34a37677cee792cb6c578ad60c7babafaaa115.zip
runner: merge TaskInput struct into Task
-rw-r--r--src/executor.rs8
-rw-r--r--src/runner/container/task.rs13
-rw-r--r--src/runner/mod.rs9
3 files changed, 10 insertions, 20 deletions
diff --git a/src/executor.rs b/src/executor.rs
index 10bb57f..a13b358 100644
--- a/src/executor.rs
+++ b/src/executor.rs
@@ -235,18 +235,14 @@ impl<'ctx> Executor<'ctx> {
format!("Failed to evaluate command template for task {}", task_ref)
})?;
- let input = runner::TaskInput {
+ let task = runner::Task {
+ label: format!("{:#}", task_ref),
command,
inherit: inherit_chain,
depends: task_deps,
outputs: task_output,
};
- let task = runner::Task {
- label: format!("{:#}", task_ref),
- input,
- };
-
Ok(runner.spawn(&task))
}
diff --git a/src/runner/container/task.rs b/src/runner/container/task.rs
index bc75fd1..2d6d9f1 100644
--- a/src/runner/container/task.rs
+++ b/src/runner/container/task.rs
@@ -34,7 +34,7 @@ fn dependency_hash(dep: &runner::Dependency) -> DependencyHash {
))
}
-fn input_hash(task: &runner::TaskInput) -> InputHash {
+fn input_hash(task: &runner::Task) -> InputHash {
#[derive(Debug, Serialize)]
struct HashInput<'a> {
pub command: &'a str,
@@ -75,11 +75,11 @@ fn init_task(input_hash: &InputHash, task: &runner::Task) -> Result<fs::Mount> {
let taskdir = paths::join(&[&task_tmp_dir, paths::TASK_TASKDIR]);
fs::mkdir(&taskdir)?;
let runfile = paths::join(&[&taskdir, paths::TASK_RUN]);
- std::fs::write(&runfile, &task.input.command)
+ std::fs::write(&runfile, &task.command)
.with_context(|| format!("Failed to write {}", runfile))?;
let mount_target = paths::join(&[&task_tmp_dir, paths::TASK_WORKDIR]);
- let mount = if task.input.inherit.is_empty() {
+ let mount = if task.inherit.is_empty() {
fs::mount(task_layer_dir, &mount_target, None, MsFlags::MS_BIND, None)
.with_context(|| format!("Failed to bind mount to {:?}", mount_target))?
} else {
@@ -88,7 +88,6 @@ fn init_task(input_hash: &InputHash, task: &runner::Task) -> Result<fs::Mount> {
fs::fixup_permissions(&task_work_dir)?;
let lower = task
- .input
.inherit
.iter()
.rev()
@@ -168,7 +167,7 @@ fn unpack_dependencies(input_hash: &InputHash, task: &runner::Task) -> Result<()
fs::mkdir(&downloads_dir)?;
fs::mkdir(&depends_dir)?;
- for dep in &task.input.depends {
+ for dep in &task.depends {
match dep {
runner::Dependency::Fetch { name, .. } => {
fs::copy(
@@ -226,7 +225,7 @@ fn collect_outputs(
) -> Result<HashMap<String, ArchiveHash>> {
let mut ret = HashMap::new();
- for (name, path) in &task.input.outputs {
+ for (name, path) in &task.outputs {
if let Some(hash) = collect_output(input_hash, path)? {
ret.insert(name.clone(), hash);
}
@@ -429,7 +428,7 @@ fn save_cached(input_hash: &InputHash, output: &runner::TaskOutput) -> Result<()
}
pub fn handle(task: runner::Task, jobserver: Jobserver) -> Result<runner::TaskOutput> {
- let input_hash = input_hash(&task.input);
+ let input_hash = input_hash(&task);
if let Ok(task_output) = load_cached(&input_hash) {
return Ok(task_output);
diff --git a/src/runner/mod.rs b/src/runner/mod.rs
index 92f28f0..b140a84 100644
--- a/src/runner/mod.rs
+++ b/src/runner/mod.rs
@@ -14,7 +14,8 @@ pub enum Dependency {
}
#[derive(Clone, Debug, Deserialize, Serialize)]
-pub struct TaskInput {
+pub struct Task {
+ pub label: String,
pub command: String,
pub inherit: Vec<LayerHash>,
pub depends: HashSet<Dependency>,
@@ -28,12 +29,6 @@ pub struct TaskOutput {
pub outputs: HashMap<String, ArchiveHash>,
}
-#[derive(Clone, Debug, Deserialize, Serialize)]
-pub struct Task {
- pub label: String,
- pub input: TaskInput,
-}
-
pub trait Runner {
fn spawn(&self, task: &Task) -> ipc::IpcReceiver<Result<TaskOutput>>;
}