浏览代码

Makefile: Add check for out of date protocol buffer code

'make check' will now fail if the files produced by re-running protoc
differ from those which are checked into the repository.

Signed-off-by: Euan Harris <euan.harris@docker.com>
Euan Harris 7 年之前
父节点
当前提交
56c4a6dd3f
共有 1 个文件被更改,包括 15 次插入3 次删除
  1. 15 3
      libnetwork/Makefile

+ 15 - 3
libnetwork/Makefile

@@ -1,4 +1,4 @@
-.PHONY: all all-local build build-local clean cross cross-local gosimple vet lint misspell check check-local check-code check-format unit-tests protobuf protobuf-local
+.PHONY: all all-local build build-local clean cross cross-local gosimple vet lint misspell check check-local check-code check-format unit-tests protobuf protobuf-local check-protobuf
 SHELL=/bin/bash
 
 dockerbuildargs ?= --target dev - < Dockerfile
@@ -90,8 +90,15 @@ cross-local:
 PROTO_FILES=$(shell find . -path ./vendor -prune -o -name \*.proto -print)
 PB_FILES=$(PROTO_FILES:.proto=.pb.go)
 
+# Pattern rule for protoc.   If PROTOC_CHECK is defined, it checks
+# whether the generated files are up to date and fails if they are not
 %.pb.go: %.proto
-	protoc ${PROTOC_FLAGS} --gogo_out=./ $<
+	if [ ${PROTOC_CHECK} ]; then \
+	protoc ${PROTOC_FLAGS} --gogo_out=/tmp $< ; \
+	diff -q $@ /tmp/$@ >/dev/null || (echo "👹 $@ is out of date; please run 'make protobuf' and check in updates" && exit 1) ; \
+	else \
+	protoc ${PROTOC_FLAGS} --gogo_out=./ $< ; \
+	fi
 
 .PHONY: $(PROTO_FILES)
 protobuf: builder
@@ -108,7 +115,7 @@ check: builder
 
 check-local: check-code check-format
 
-check-code: lint gosimple vet ineffassign
+check-code: check-protobuf lint gosimple vet ineffassign
 
 check-format: fmt misspell
 
@@ -161,6 +168,11 @@ gosimple: ## run gosimple
 	@echo "🐳 $@"
 	@test -z "$$(gosimple . | grep -v vendor/ | grep -v ".pb.go:" | grep -v ".mock.go" | tee /dev/stderr)"
 
+# check-protobuf rebuilds .pb.go files and fails if they have changed
+check-protobuf: PROTOC_CHECK=1
+check-protobuf: $(PB_FILES)
+	@echo "🐳 $@"
+
 
 ###########################################################################
 # Utility targets