mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-03 18:20:27 +00:00
Add rebuild-image from scope.git
This commit is contained in:
47
rebuild-image
Executable file
47
rebuild-image
Executable 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-*
|
||||
Reference in New Issue
Block a user