From 54578efb4fe92e26a25bc9329c07ac0a8dc33deb Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 30 Oct 2021 00:29:20 +0200 Subject: driver: read pins from YAML file --- .gitignore | 1 + crates/driver/src/context.rs | 4 ++-- crates/driver/src/main.rs | 6 +++++- crates/driver/src/pin.rs | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 crates/driver/src/pin.rs diff --git a/.gitignore b/.gitignore index ea8c4bf..ff9dbb2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +/examples/*.yml diff --git a/crates/driver/src/context.rs b/crates/driver/src/context.rs index a7ea302..b77655f 100644 --- a/crates/driver/src/context.rs +++ b/crates/driver/src/context.rs @@ -16,7 +16,7 @@ use common::{ types::TaskID, }; -use crate::{args::*, paths, task::*}; +use crate::{args::*, paths, pin::Pins, task::*}; #[derive(Debug, Clone, Copy)] pub enum ErrorKind<'ctx> { @@ -140,7 +140,7 @@ pub struct Context { } impl Context { - pub fn new(tasks: HashMap) -> Self { + pub fn new(tasks: HashMap, _pins: Pins) -> Self { let platforms: HashMap<_, _> = [ arg( "build", diff --git a/crates/driver/src/main.rs b/crates/driver/src/main.rs index b9a6173..2763dfa 100644 --- a/crates/driver/src/main.rs +++ b/crates/driver/src/main.rs @@ -2,6 +2,7 @@ mod args; mod context; mod driver; mod paths; +mod pin; mod recipe; mod resolve; mod task; @@ -28,7 +29,10 @@ fn main() { let runner = unsafe { Runner::new(&runner::Options { jobs: opts.jobs }) }.unwrap(); - let ctx = context::Context::new(recipe::read_recipes("examples/recipes").unwrap()); + let ctx = context::Context::new( + recipe::read_recipes("examples/recipes").unwrap(), + pin::read_pins("examples/pins.yml").unwrap(), + ); let mut rsv = resolve::Resolver::new(&ctx); diff --git a/crates/driver/src/pin.rs b/crates/driver/src/pin.rs new file mode 100644 index 0000000..26e445c --- /dev/null +++ b/crates/driver/src/pin.rs @@ -0,0 +1,39 @@ +use std::{collections::HashMap, fs::File, path::Path}; + +use serde::{Deserialize, Serialize}; + +use common::{error::*, string_hash::*}; + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct Args { + pub host: Option, + pub target: Option, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct Provides { + pub recipe: String, + pub task: String, + pub output: Vec, + pub args: Args, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "kebab-case")] +pub struct Pin { + pub hash: Option, + #[serde(default)] + pub provides: Vec, + #[serde(default)] + pub is_rootfs: bool, +} + +pub type Pins = HashMap; + +pub fn read_pins>(path: P) -> Result { + let f = File::open(path)?; + let pins: Pins = serde_yaml::from_reader(f) + .map_err(Error::new) + .context("YAML error")?; + Ok(pins) +} -- cgit v1.2.3