diff --git a/Makefile b/Makefile index 8ad6066c..69ec2879 100644 --- a/Makefile +++ b/Makefile @@ -43,15 +43,19 @@ build-images: clean-images $(MAKE) .bin-image .deb-image .bin-image: - @if [ -z "$(shell docker images --quiet --filter=reference=$(BIN_IMAGE):latest)" ]; then \ + @if [ $$(build/tools/image_status.sh $(BIN_IMAGE):latest build/docker) != "ok" ]; then \ echo "Building image $(BIN_IMAGE)..."; \ docker build --no-cache=$(NO_CACHE) -t $(BIN_IMAGE) build/docker/bin; \ + else \ + echo "Image $(BIN_IMAGE) is up to date"; \ fi .deb-image: .bin-image - @if [ -z "$(shell docker images --quiet --filter=reference=$(DEB_IMAGE):latest)" ]; then \ + @if [ $$(build/tools/image_status.sh $(DEB_IMAGE):latest build/docker) != "ok" ]; then \ echo "Building image $(DEB_IMAGE)..."; \ docker build --no-cache=$(NO_CACHE) -t $(DEB_IMAGE) build/docker/deb; \ + else \ + echo "Image $(DEB_IMAGE) is up to date"; \ fi clean: clean-bin clean-deb diff --git a/build/tools/image_status.sh b/build/tools/image_status.sh new file mode 100755 index 00000000..f74bcba3 --- /dev/null +++ b/build/tools/image_status.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -e + +if [ $# -ne 2 ]; then + echo "Invalid parameters" 1>&2 + exit 1 +fi + +IMG=$1 +DIR=$2 + +IMG_CREATED_TIME=$(docker inspect --format='{{json .Metadata.LastTagTime}}' $IMG 2>/dev/null | tr -d '"') + +if [ -z "$IMG_CREATED_TIME" ]; then + echo "missing" + exit 0 +fi + +IMG_CREATED_TS=$(date -d $IMG_CREATED_TIME +%s) +GIT_COMMIT_TS=$(date -d $(git log --pretty="format:%cI" -1 $DIR) +%s) + +if [ $IMG_CREATED_TS -lt $GIT_COMMIT_TS ]; then + echo "out-of-time" +else + echo "ok" +fi + +exit 0