私は普段、GoのソースをビルドするMakefileにdep ensure
で依存解決するターゲットを書いてます。
チーム開発時は、このターゲットをビルド前に必ず呼び出すようにしていて、依存パッケージがメンバー全員の開発環境で常に最新になるようにしています。
ただ毎回、ビルド時にこれをやってしまうと、環境次第でビルドが遅くなってしまうので、せっかくGoのコンパイルは速いのに残念な感じでした。
そこで、一度dep ensure
したら、Gopkg.lockのチェックサムを保存し、次回の依存解決はチェックサムが変わるまでやらないようにしています。
Makefile
VENDOR_MD5 := $(shell if [[ -f vendor/lock.md5 ]]; then cat vendor/lock.md5; fi)
GOPKG_MD5 :=
ifneq ($(shell type md5 2> /dev/null),)
GOPKG_MD5 := $(shell md5 -q Gopkg.lock)
endif
ifneq ($(shell type md5sum 2> /dev/null),)
GOPKG_MD5 := $(shell md5sum Gopkg.lock | sed -E 's/ .*//g')
endif
.PHONY: build vendor
build: vendor
go build -i -o piyo ./*.go
vendor: dep-install
ifneq ($(VENDOR_MD5),$(GOPKG_MD5))
dep ensure
ifneq ($(shell type md5 2> /dev/null),)
md5 -q Gopkg.lock >| vendor/lock.md5
else ifneq ($(shell type md5sum 2> /dev/null),)
md5sum Gopkg.lock | sed -E 's/ .*//g' >| vendor/lock.md5
else
@echo vendor/lock.md5 was not created 1>&2
endif
else
@echo vendor/ is already up-to-date
endif
dep-install:
ifeq ($(shell type dep 2> /dev/null),)
go get -u github.com/golang/dep/...
endif
dep-ensure: dep-install
dep ensure
めでたし
md5のチェックをせずにdep ensure
をする場合はmake dep-ensure
します。(その場合は普通にdep ensure
すればいいのだけど)