diff --git a/src/cli/build.rs b/src/cli/build.rs index c32918e..b0533c7 100644 --- a/src/cli/build.rs +++ b/src/cli/build.rs @@ -260,34 +260,37 @@ impl From for quadlet::Resource { } } -impl TryFrom for Build { +impl TryFrom<(service::Build, Option)> for Build { type Error = color_eyre::Report; fn try_from( - service::Build { - context, - dockerfile, - args, - ssh, - cache_from, - cache_to, - additional_contexts, - entitlements, - extra_hosts, - isolation, - privileged, - labels, - no_cache, - pull, - network, - shm_size, - target, - secrets, - tags, - ulimits, - platforms, - extensions, - }: service::Build, + ( + service::Build { + context, + dockerfile, + args, + ssh, + cache_from, + cache_to, + additional_contexts, + entitlements, + extra_hosts, + isolation, + privileged, + labels, + no_cache, + pull, + network, + shm_size, + target, + secrets, + tags, + ulimits, + platforms, + extensions, + }, + image, + ): (service::Build, Option), ) -> Result { ensure!(entitlements.is_empty(), "`entitlements` are not supported"); ensure!(!privileged, "`privileged` is not supported"); @@ -356,8 +359,8 @@ impl TryFrom for Build { }; let mut tags = tags.into_iter(); - let tag = tags - .next() + let tag = image + .or_else(|| tags.next()) .ok_or_eyre("an image tag is required")? .into_inner(); ensure!( diff --git a/src/cli/compose.rs b/src/cli/compose.rs index 2f00a28..d18e0fd 100644 --- a/src/cli/compose.rs +++ b/src/cli/compose.rs @@ -323,15 +323,9 @@ fn services_try_into_quadlet_files<'a>( pod_ports: &'a mut Vec, ) -> impl Iterator> + 'a { services.into_iter().flat_map(move |(name, mut service)| { - if service.image.is_some() && service.build.is_some() { - return iter::once(Err(eyre!( - "error converting service `{name}`: `image` and `build` cannot both be set" - ))) - .chain(None); - } - let build = service.build.take().map(|build| { - let build = Build::try_from(build.into_long()).wrap_err_with(|| { + let image = service.image.take(); + let build = Build::try_from((build.into_long(), image)).wrap_err_with(|| { format!( "error converting `build` for service `{name}` into a Quadlet `.build` file" )