Files
weave-scope/rebuild-image
Tom Wilkie 8b5ff7765a Squashed 'tools/' changes from c342e83..f9aa081
f9aa081 Correctly fail when spelling mistakes are found.
f8950ed Merge pull request #19 from weaveworks/18-misspell
b377e46 Add misspell to the lint script.
f26a5b2 Merge pull request #20 from weaveworks/socks-update
f904203 Update socks proxy for upstream changes.
495e875 Add reciept to spellchecker

git-subtree-dir: tools
git-subtree-split: f9aa081666
2016-03-23 11:18:39 +00:00

65 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
# Rebuild a cached docker image if the input files have changed.
# Usage: ./rebuild-image <image name> <image dir> <image files...>
set -eux
IMAGENAME=$1
SAVEDNAME=$(echo $IMAGENAME | sed "s/[\/\-]/\./g")
IMAGEDIR=$2
shift 2
INPUTFILES=$@
CACHEDIR=$HOME/docker/
# Rebuild the image
rebuild() {
mkdir -p $CACHEDIR
rm $CACHEDIR/$SAVEDNAME* || true
docker build -t $IMAGENAME $IMAGEDIR
docker save $IMAGENAME:latest | gzip - > $CACHEDIR/$SAVEDNAME-$CIRCLE_SHA1.gz
}
# Get the revision the cached image was build at
cached_image_rev() {
find $CACHEDIR -name "$SAVEDNAME-*" -type f | sed -n 's/^[^\-]*\-\([a-z0-9]*\).gz$/\1/p'
}
# Have there been any revision between $1 and $2
has_changes() {
local rev1=$1
local rev2=$2
local changes=$(git diff --oneline $rev1..$rev2 -- $INPUTFILES | wc -l)
[ "$changes" -gt 0 ]
}
commit_timestamp() {
local rev=$1
git show -s --format=%ct $rev
}
cached_revision=$(cached_image_rev)
if [ -z "$cached_revision" ]; then
echo ">>> No cached image found; rebuilding"
rebuild
exit 0
fi
echo ">>> Found cached image rev $cached_revision"
if has_changes $cached_revision $CIRCLE_SHA1 ; then
echo ">>> Found changes, rebuilding"
rebuild
exit 0
fi
IMAGE_TIMEOUT="$(( 3 * 24 * 60 * 60 ))"
if [ "$(commit_timestamp $cached_revision)" -lt "${IMAGE_TIMEOUT}" ]; then
echo ">>> Image is more the 24hrs old; rebuilding"
rebuild
exit 0
fi
# we didn't rebuild; import cached version
echo ">>> No changes found, importing cached image"
zcat $CACHEDIR/$SAVEDNAME-$cached_revision.gz | docker load