diff --git a/src/lib.rs b/src/lib.rs index 81e2518..5f88a71 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -558,6 +558,8 @@ pub struct AdvancedBuildStep { #[serde(default, skip_serializing_if = "Option::is_none")] pub dockerfile: Option, #[serde(default, skip_serializing_if = "Option::is_none")] + pub dockerfile_inline: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] pub args: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub shm_size: Option, diff --git a/tests/fixtures/dockerfile-inline/docker-compose.yml b/tests/fixtures/dockerfile-inline/docker-compose.yml new file mode 100644 index 0000000..f77b3b3 --- /dev/null +++ b/tests/fixtures/dockerfile-inline/docker-compose.yml @@ -0,0 +1,7 @@ +services: + busybox: + build: + context: . + dockerfile_inline: | + FROM busybox + RUN ls / \ No newline at end of file diff --git a/tests/mod.rs b/tests/mod.rs index f6fc088..e7189bc 100644 --- a/tests/mod.rs +++ b/tests/mod.rs @@ -106,3 +106,28 @@ volumes: } let _parsed: Container = from_str(v).unwrap(); } + +#[test] +fn parse_dockerfile_inline() { + use docker_compose_types::BuildStep; + use docker_compose_types::Compose; + + let file_payload = + std::fs::read_to_string("tests/fixtures/dockerfile-inline/docker-compose.yml").unwrap(); + + let mut actual_parsed: Compose = from_str(&file_payload).unwrap(); + + let dockerfile_inline = actual_parsed + .services + .0 + .swap_remove("busybox") + .flatten() + .and_then(|service| service.build_) + .map(|build_| match build_ { + BuildStep::Advanced(adv) => adv, + BuildStep::Simple(_) => panic!("Not advanced BuildStep"), + }) + .and_then(|adv| adv.dockerfile_inline) + .expect("No dockerfile_inline"); + assert!(dockerfile_inline.contains("FROM busybox")); +}