helpers/docker_cache.sh

Summary

Maintainability
Test Coverage
#!/bin/bash

_check_context() {
    if [[  -z $1 && -z $DOCKER_CACHE_FILE ]]; then
        echo "Please provide a parameter or DOCKER_CACHE_FILE."
        exit 1
    fi
}

_env_or_param() {
    if [[ -z $1 && -n $DOCKER_CACHE_FILE. ]]; then
        echo $DOCKER_CACHE_FILE
        return
    fi
    echo $1
}

load_cache() {  # cache_file
    _check_context $@
    local cache_file=$(_env_or_param $@)
    echo "After local. cache_file is $cache_file"

    if [[ -f "$cache_file" ]]; then
        echo "Unpacking cache file $cache_file"
        gunzip -c "$cache_file" | docker load || echo Cache loading failed
    else
        echo "ERROR: Cache file $cache_file does not exist."
        exit 255
    fi
}

save_cache() {  # cache_file
    if [[ -z $DOCKER_IMAGE_NAME ]]; then
        local image=pycroft
    else
        local image=$DOCKER_IMAGE_NAME
    fi

    _check_context $@
    local cache_file=$(_env_or_param $@)

    local images=$(docker history -q $image | sort  | uniq  | grep -v missing)
    echo "Attempting to save $images"
    docker save $images | gzip > $cache_file
}

if [[ $1 =~ ^(load_cache|save_cache)$ ]]; then
    $@
else
    echo -e "ERROR: Invalid command."
    echo "Usage: load_cache|save_cache"
    echo "The file can be applied as an argument or via DOCKER_CACHE_FILE."
    exit 1
fi