Add rebuild-image from scope.git

This commit is contained in:
Tom Wilkie
2015-07-30 13:58:29 +00:00
parent 704f5bd4e4
commit 85b6d16ee7

47
rebuild-image Executable file
View File

@@ -0,0 +1,47 @@
#!/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 # no dashes in the name please!
IMAGEDIR=$2
shift 2
INPUTFILES=$@
CACHEDIR=$HOME/docker/
# Rebuild the image
rebuild() {
mkdir -p $CACHEDIR
rm $CACHEDIR/$IMAGENAME* || true
docker build -t $IMAGENAME $IMAGEDIR
docker save $IMAGENAME:latest > $CACHEDIR/image-$CIRCLE_SHA1
}
# Get the revision the cached image was build at
cached_image_rev() {
find $CACHEDIR -name '$IMAGENAME-*' -type f | sed 's/[^\-]*\-//'
}
# Have there been any revision beween $1 and $2
has_changes() {
local rev1=$1
local rev2=$2
local changes=$(git log --oneline $rev1..$rev2 -- $INPUTFILES | wc -l)
[ "$changes" -gt 0 ]
}
cached_revision=$(cached_image_rev)
if [ -z "$cached_revision" ]; then
rebuild
exit 0
fi
if has_changes $cached_revision $CIRCLE_SHA1 ; then
rebuild
exit 0
fi
# we didn't rebuild; import cached version
docker load -i $CACHEDIR/$IMAGENAME-*