diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-10-24 21:46:06 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-10-24 21:46:06 +0200 |
commit | 9f34a37677cee792cb6c578ad60c7babafaaa115 (patch) | |
tree | 14ba2ec0527fa7e686195e11babf6c654f0f25fd | |
parent | 152272df6e28af35b13d393ec30b8fd3a333bccf (diff) | |
download | rebel-9f34a37677cee792cb6c578ad60c7babafaaa115.tar rebel-9f34a37677cee792cb6c578ad60c7babafaaa115.zip |
runner: merge TaskInput struct into Task
-rw-r--r-- | src/executor.rs | 8 | ||||
-rw-r--r-- | src/runner/container/task.rs | 13 | ||||
-rw-r--r-- | src/runner/mod.rs | 9 |
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>>; } |