From 8ea4310945bb982daee2192f7ae8981b6334042f Mon Sep 17 00:00:00 2001 From: Valentin Lab Date: Thu, 15 Feb 2024 15:08:55 +0100 Subject: [PATCH] new: dev: [compose-core] refactor ``service_base_docker_image()`` --- bin/compose-core | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/bin/compose-core b/bin/compose-core index 46c2b91..1a59610 100755 --- a/bin/compose-core +++ b/bin/compose-core @@ -1432,34 +1432,31 @@ service_base_docker_image() { err "Could not get docker-compose service definition for $DARKYELLOW$master_service$NORMAL." return 1 } - service_image=$(echo "$service_def" | shyaml get-value image 2>/dev/null) - if [ "$?" != 0 ]; then - ## According to https://stackoverflow.com/questions/32230577 , if there's a build, - ## then the builded image will get name ${project}_${service} - project=$(get_default_project_name) || return 1 - image_name="${project}_${master_service}" - if ! docker_has_image "$image_name"; then - service_build=$(echo "$service_def" | shyaml get-value build 2>/dev/null) - if [ "$?" != 0 ]; then - err "Service $DARKYELLOW$service$NORMAL has no ${WHITE}image${NORMAL} nor ${WHITE}build${NORMAL} parameter." - echo "$service_def" >&2 - return 1 - fi + if service_image=$(echo "$service_def" | shyaml get-value image 2>/dev/null); then + printf "%s" "${service_image}" | tee "$cache_file" + return $? + fi - docker build "$service_build" -t "${image_name}" >&2 || { - err "Failed to build image '${image_name}' for ${DARKYELLOW}$service${NORMAL}." - return 1 - } - fi - printf "%s" "${image_name}" - else - printf "%s" "${service_image}" - fi | tee "$cache_file" - if [ "${PIPESTATUS[0]}" != 0 ]; then - rm "$cache_file" + ## According to https://stackoverflow.com/questions/32230577 , if there's a build, + ## then the built image will get name ${project}_${service} + project=$(get_default_project_name) || return 1 + image_name="${project}_${master_service}" + if docker_has_image "$image_name"; then + printf "%s" "${image_name}" | tee "$cache_file" + return $? + fi + if ! service_build=$(echo "$service_def" | shyaml get-value build 2>/dev/null); then + err "Service $DARKYELLOW$service$NORMAL has no ${WHITE}image${NORMAL} nor ${WHITE}build${NORMAL} parameter." + echo "$service_def" >&2 return 1 fi + docker build "$service_build" -t "${image_name}" >&2 || { + err "Failed to build image '${image_name}' for ${DARKYELLOW}$service${NORMAL}." + return 1 + } + printf "%s" "${image_name}" | tee "$cache_file" + return $? } export -f service_base_docker_image