From 6170d8fc3f336b6e1a6563704dde8579fa083a6b Mon Sep 17 00:00:00 2001 From: Lachlan Donald Date: Mon, 13 Aug 2018 09:49:13 +1000 Subject: [PATCH] Support cache_from directive in composefile 2.2+ --- lib/shared.bash | 12 ++++++++++-- tests/docker-compose-config.bats | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/lib/shared.bash b/lib/shared.bash index dbb10686..c8a1b7e8 100644 --- a/lib/shared.bash +++ b/lib/shared.bash @@ -97,6 +97,14 @@ function build_image_override_file() { "$(docker_compose_config_version)" "$@" } +# Checks that a specific version of docker-compose supports cache_from +function docker_compose_supports_cache_from() { + local version="$1" + if [[ -z "$version" || "$version" == 1* || "$version" =~ ^(2|3)(\.[01])?$ ]] ; then + return 1 + fi +} + # Build an docker-compose file that overrides the image for a specific # docker-compose version and set of [ service, image, cache_from ] tuples function build_image_override_file_with_version() { @@ -118,9 +126,9 @@ function build_image_override_file_with_version() { printf " image: %s\\n" "$2" if [[ -n "$3" ]] ; then - if [[ -z "$version" || "$version" == 2* || "$version" == 3 || "$version" == 3.0* || "$version" == 3.1* ]]; then + if ! docker_compose_supports_cache_from "$version" ; then echo "Unsupported Docker Compose config file version: $version" - echo "The 'cache_from' option can only be used with Compose file versions 3.2 and above." + echo "The 'cache_from' option can only be used with Compose file versions 2.2 or 3.2 and above." echo "For more information on Docker Compose configuration file versions, see:" echo "https://docs.docker.com/compose/compose-file/compose-versioning/#versioning" exit 1 diff --git a/tests/docker-compose-config.bats b/tests/docker-compose-config.bats index e09c71c6..aee136bd 100644 --- a/tests/docker-compose-config.bats +++ b/tests/docker-compose-config.bats @@ -51,3 +51,35 @@ load '../lib/shared' assert_success assert_output "2.1" } + +@test "Whether docker-compose supports cache_from directive" { + run docker_compose_supports_cache_from "" + assert_failure + + run docker_compose_supports_cache_from "1.0" + assert_failure + + run docker_compose_supports_cache_from "2" + assert_failure + + run docker_compose_supports_cache_from "2.1" + assert_failure + + run docker_compose_supports_cache_from "2.2" + assert_success + + run docker_compose_supports_cache_from "2.3" + assert_success + + run docker_compose_supports_cache_from "3" + assert_failure + + run docker_compose_supports_cache_from "3.1" + assert_failure + + run docker_compose_supports_cache_from "3.2" + assert_success + + run docker_compose_supports_cache_from "3.3" + assert_success +}