diff --git a/.travis.yml b/.travis.yml index 0e93bda..e1bbc82 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,5 +13,5 @@ script: - if [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_BRANCH" == "master" ]; then export PUSH=latest; fi # log into quay.io so we can push - echo "$QUAY_PASSWORD" | docker login quay.io -u "$QUAY_USER" --password-stdin -# build and push all components -- ./build +# build and push all components. Try to pull and re-use layers from images for all parent commits. +- 'CACHE_FROM=$(git rev-list HEAD -n1 --parents | cut -d" " -f 2-) ./build' diff --git a/build b/build index 13d2e07..cae3c89 100755 --- a/build +++ b/build @@ -26,6 +26,25 @@ if [ "$#" -gt 0 ]; then COMPONENTS=("$@") fi +# If CACHE_FROM is set, explicitly pull and re-use specified image versions +CACHE_IMAGES=() +CACHE_ARGS=() +if [ -n "${CACHE_FROM:-}" ]; then + # Note lack of quotes here - we want to word split + for commit in $CACHE_FROM; do + tag=$(git rev-parse --short "$commit") + for component in "${COMPONENTS[@]}"; do + CACHE_IMAGES+=("$BASE/wubloader-$component:$tag") + CACHE_ARGS+=("--cache-from" "$BASE/wubloader-$component:$tag") + done + done + echo "Trying to pull images for commits $CACHE_FROM if they exist, to re-use layers if possible" + for image in "${CACHE_IMAGES[@]}"; do + echo "Pulling $image" + docker pull "$image" || true # don't exit on failure + done +fi + for component in "${COMPONENTS[@]}"; do echo "Building image for $component" latest="$BASE/wubloader-$component:latest" @@ -34,6 +53,7 @@ for component in "${COMPONENTS[@]}"; do -f "$component/Dockerfile" \ -t "$latest" \ -t "$specific" \ + "${CACHE_ARGS[@]}" \ . echo "Built image wubloader-$component:$TAG" if [ -n "$PUSH" ]; then