diff --git a/.cirrus.yml b/.cirrus.yml
index d5498eb5bf414ffca1cc86bdcd15c131dd9796ef..fcca28ba6ed2fd8d2b8fa3485e4f4cb6a1b2afbf 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -61,6 +61,8 @@ validate_task:
 
     validate_script:
       - make validate
+      - make vendor
+      - ./hack/tree_status.sh
       - make
 
 test_task:
diff --git a/Makefile b/Makefile
index 31f8370561885f5daca6e2272ce8aba82e8a9860..4d1cf4ce81ad1a0375a490dbecac1f3cc638496a 100644
--- a/Makefile
+++ b/Makefile
@@ -76,9 +76,16 @@ clean:
 test: .install.ginkgo
 	$(GO) test -v ./...
 
+vendor:
+	export GO111MODULE=on \
+		$(GO) mod tidy && \
+		$(GO) mod vendor && \
+		$(GO) mod verify
+
 .PHONY: \
 	binaries \
 	test \
 	gofmt \
 	lint \
-	validate
+	validate \
+	vendor
diff --git a/hack/tree_status.sh b/hack/tree_status.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ac874a3478fda0a6f8586391c1cbef14837c1baf
--- /dev/null
+++ b/hack/tree_status.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+set -e
+
+SUGGESTION="${SUGGESTION:-sync the vendor.conf and commit all changes.}"
+
+STATUS=$(git status --porcelain)
+if [[ -z $STATUS ]]
+then
+	echo "tree is clean"
+else
+	echo "tree is dirty, please $SUGGESTION"
+	echo ""
+	echo "$STATUS"
+	exit 1
+fi