2017-10-23 16:38:30 +00:00
# Determine this makefile's path.
# Be sure to place this BEFORE `include` directives, if any.
THIS_FILE := $( lastword $( MAKEFILE_LIST) )
TEST ?= $$ ( go list ./... | grep -v /vendor/ | grep -v /integ)
2018-04-19 19:04:40 +00:00
TEST_TIMEOUT ?= 20m
EXTENDED_TEST_TIMEOUT = 45m
2015-03-04 07:14:18 +00:00
VETARGS ?= -asmdecl -atomic -bool -buildtags -copylocks -methods -nilfunc -printf -rangeloops -shift -structtags -unsafeptr
2015-05-31 23:32:36 +00:00
EXTERNAL_TOOLS = \
2018-04-03 14:46:45 +00:00
github.com/elazarl/go-bindata-assetfs/... \
github.com/hashicorp/go-bindata/... \
2017-06-01 14:18:40 +00:00
github.com/mitchellh/gox \
2017-10-19 16:55:39 +00:00
github.com/kardianos/govendor \
github.com/client9/misspell/cmd/misspell
2017-05-19 12:34:17 +00:00
GOFMT_FILES ?= $$ ( find . -name '*.go' | grep -v vendor)
2015-03-04 07:14:18 +00:00
2018-03-30 15:55:03 +00:00
GO_VERSION_MIN = 1.10
2018-07-16 14:18:09 +00:00
CGO_ENABLED = 0
i f n e q ( $( FDB_ENABLED ) , )
CGO_ENABLED = 1
BUILD_TAGS += foundationdb
e n d i f
2017-02-06 01:30:40 +00:00
default : dev
2015-03-04 07:14:18 +00:00
2018-03-20 18:54:10 +00:00
# bin generates the releasable binaries for Vault
2017-10-23 16:38:30 +00:00
bin : prep
2018-07-16 14:18:09 +00:00
@CGO_ENABLED= $( CGO_ENABLED) BUILD_TAGS = '$(BUILD_TAGS) ui' sh -c " ' $( CURDIR) /scripts/build.sh' "
2015-03-04 07:14:18 +00:00
# dev creates binaries for testing Vault locally. These are put
2018-04-09 21:36:05 +00:00
# into ./bin/ as well as $GOPATH/bin
2017-10-23 16:38:30 +00:00
dev : prep
2018-07-16 14:18:09 +00:00
@CGO_ENABLED= $( CGO_ENABLED) BUILD_TAGS = '$(BUILD_TAGS)' VAULT_DEV_BUILD = 1 sh -c " ' $( CURDIR) /scripts/build.sh' "
2018-04-03 17:54:33 +00:00
dev-ui : prep
2018-07-16 14:18:09 +00:00
@CGO_ENABLED= $( CGO_ENABLED) BUILD_TAGS = '$(BUILD_TAGS) ui' VAULT_DEV_BUILD = 1 sh -c " ' $( CURDIR) /scripts/build.sh' "
2017-09-04 23:16:11 +00:00
dev-dynamic : prep
2016-05-10 03:17:38 +00:00
@CGO_ENABLED= 1 BUILD_TAGS = '$(BUILD_TAGS)' VAULT_DEV_BUILD = 1 sh -c " ' $( CURDIR) /scripts/build.sh' "
2018-10-31 18:11:45 +00:00
# *-mem variants will enable memory profiling which will write snapshots of heap usage
# to $TMP/vaultprof every 5 minutes. These can be analyzed using `$ go tool pprof <profile_file>`.
# Note that any build can have profiling added via: `$ BUILD_TAGS=memprofiler make ...`
dev-mem : BUILD_TAGS +=memprofiler
dev-mem : dev
dev-ui-mem : BUILD_TAGS +=memprofiler
dev-ui-mem : dev -ui
dev-dynamic-mem : BUILD_TAGS +=memprofiler
dev-dynamic-mem : dev -dynamic
2018-07-16 14:18:09 +00:00
testtravis : BUILD_TAGS +=travis
2018-05-30 12:52:50 +00:00
testtravis : test
2018-07-16 14:18:09 +00:00
testracetravis : BUILD_TAGS +=travis
2018-05-30 12:52:50 +00:00
testracetravis : testrace
2015-03-04 07:14:18 +00:00
# test runs the unit tests and vets the code
2017-10-23 16:38:30 +00:00
test : prep
2018-07-16 14:18:09 +00:00
@CGO_ENABLED= $( CGO_ENABLED) \
2017-09-05 03:51:29 +00:00
VAULT_ADDR = \
VAULT_TOKEN = \
VAULT_DEV_ROOT_TOKEN_ID = \
VAULT_ACC = \
2018-04-19 19:04:40 +00:00
go test -tags= '$(BUILD_TAGS)' $( TEST) $( TESTARGS) -timeout= $( TEST_TIMEOUT) -parallel= 20
2015-03-04 07:14:18 +00:00
2017-10-23 16:38:30 +00:00
testcompile : prep
2017-02-16 20:15:02 +00:00
@for pkg in $( TEST) ; do \
go test -v -c -tags= '$(BUILD_TAGS)' $$ pkg -parallel= 4 ; \
done
2015-03-20 16:59:48 +00:00
# testacc runs acceptance tests
2017-10-23 16:38:30 +00:00
testacc : prep
2015-03-20 16:59:48 +00:00
@if [ " $( TEST) " = "./..." ] ; then \
echo "ERROR: Set TEST to a specific package" ; \
exit 1; \
fi
2018-04-19 19:04:40 +00:00
VAULT_ACC = 1 go test -tags= '$(BUILD_TAGS)' $( TEST) -v $( TESTARGS) -timeout= $( EXTENDED_TEST_TIMEOUT)
2015-03-20 16:59:48 +00:00
2015-03-04 07:14:18 +00:00
# testrace runs the race checker
2017-10-23 16:38:30 +00:00
testrace : prep
2017-09-05 03:51:29 +00:00
@CGO_ENABLED= 1 \
VAULT_ADDR = \
VAULT_TOKEN = \
VAULT_DEV_ROOT_TOKEN_ID = \
VAULT_ACC = \
2018-04-19 19:04:40 +00:00
go test -tags= '$(BUILD_TAGS)' -race $( TEST) $( TESTARGS) -timeout= $( EXTENDED_TEST_TIMEOUT) -parallel= 20
2015-03-04 07:14:18 +00:00
cover :
2015-04-29 02:02:46 +00:00
./scripts/coverage.sh --html
2015-03-04 07:14:18 +00:00
# vet runs the Go source code static analysis tool `vet` to find
# any common errors.
vet :
2016-02-18 19:19:02 +00:00
@go list -f '{{.Dir}}' ./... | grep -v /vendor/ \
2015-04-28 20:18:55 +00:00
| grep -v '.*github.com/hashicorp/vault$$' \
| xargs go tool vet ; if [ $$ ? -eq 1 ] ; then \
echo "" ; \
echo "Vet found suspicious constructs. Please check the reported constructs" ; \
echo "and fix them if necessary before submitting the code for reviewal." ; \
fi
2015-03-04 07:14:18 +00:00
2017-09-04 23:16:11 +00:00
# prep runs `go generate` to build the dynamically generated
2015-03-04 07:14:18 +00:00
# source files.
2017-10-23 16:38:30 +00:00
prep : fmtcheck
2017-10-19 20:30:19 +00:00
@sh -c " ' $( CURDIR) /scripts/goversioncheck.sh' ' $( GO_VERSION_MIN) ' "
2018-09-18 21:28:37 +00:00
@go generate $( go list ./... | grep -v /vendor/)
2017-10-27 17:11:02 +00:00
@if [ -d .git/hooks ] ; then cp .hooks/* .git/hooks/; fi
2015-03-04 07:14:18 +00:00
2015-05-31 23:32:36 +00:00
# bootstrap the build by downloading additional tools
bootstrap :
@for tool in $( EXTERNAL_TOOLS) ; do \
2017-06-01 14:18:40 +00:00
echo " Installing/Updating $$ tool " ; \
2016-09-14 19:10:00 +00:00
go get -u $$ tool; \
2015-05-31 23:32:36 +00:00
done
2018-05-30 01:09:57 +00:00
# Note: if you have plugins in GOPATH you can update all of them via something like:
# for i in $(ls | grep vault-plugin-); do cd $i; git remote update; git reset --hard origin/master; dep ensure -update; git add .; git commit; git push; cd ..; done
2018-04-10 06:32:41 +00:00
update-plugins :
grep vault-plugin- vendor/vendor.json | cut -d '"' -f 4 | xargs govendor fetch
2018-04-03 14:46:45 +00:00
static-assets :
@echo "--> Generating static assets"
2018-04-20 19:47:45 +00:00
@go-bindata-assetfs -o bindata_assetfs.go -pkg http -prefix pkg -modtime 1480000000 -tags ui ./pkg/web_ui/...
2018-04-03 14:46:45 +00:00
@mv bindata_assetfs.go http
@$( MAKE) -f $( THIS_FILE) fmt
test-ember :
@echo "--> Installing JavaScript assets"
2018-11-14 18:57:03 +00:00
@cd ui && yarn --ignore-optional
2018-04-03 14:46:45 +00:00
@echo "--> Running ember tests"
2018-05-08 15:43:20 +00:00
@cd ui && yarn run test-oss
2018-04-03 14:46:45 +00:00
ember-dist :
@echo "--> Installing JavaScript assets"
2018-11-14 18:57:03 +00:00
@cd ui && yarn --ignore-optional
2018-04-03 14:46:45 +00:00
@cd ui && npm rebuild node-sass
@echo "--> Building Ember application"
2018-05-08 15:43:20 +00:00
@cd ui && yarn run build
2018-04-03 14:46:45 +00:00
@rm -rf ui/if-you-need-to-delete-this-open-an-issue-async-disk-cache
2018-06-25 20:30:11 +00:00
ember-dist-dev :
@echo "--> Installing JavaScript assets"
2018-11-14 18:57:03 +00:00
@cd ui && yarn --ignore-optional
2018-06-25 20:30:11 +00:00
@cd ui && npm rebuild node-sass
@echo "--> Building Ember application"
@cd ui && yarn run build-dev
2018-04-03 14:46:45 +00:00
static-dist : ember -dist static -assets
2018-06-25 20:30:11 +00:00
static-dist-dev : ember -dist -dev static -assets
2018-04-03 14:46:45 +00:00
2016-10-20 16:39:19 +00:00
proto :
2018-06-04 14:19:26 +00:00
protoc vault/*.proto --go_out= plugins = grpc:../../..
protoc helper/storagepacker/types.proto --go_out= plugins = grpc:../../..
protoc helper/forwarding/types.proto --go_out= plugins = grpc:../../..
protoc logical/*.proto --go_out= plugins = grpc:../../..
2018-08-29 23:13:10 +00:00
protoc physical/types.proto --go_out= plugins = grpc:../../..
2018-09-18 03:03:00 +00:00
protoc helper/identity/mfa/types.proto --go_out= plugins = grpc:../../..
2018-06-04 14:19:26 +00:00
protoc helper/identity/types.proto --go_out= plugins = grpc:../../..
protoc builtin/logical/database/dbplugin/*.proto --go_out= plugins = grpc:../../..
protoc logical/plugin/pb/*.proto --go_out= plugins = grpc:../../..
2018-09-18 03:03:00 +00:00
sed -i '1s;^;// +build !enterprise\n;' helper/identity/mfa/types.pb.go
2018-09-20 16:38:05 +00:00
sed -i -e 's/Idp/IDP/' -e 's/Url/URL/' -e 's/Id/ID/' -e 's/IDentity/Identity/' -e 's/EntityId/EntityID/' -e 's/Api/API/' -e 's/Qr/QR/' -e 's/Totp/TOTP/' -e 's/Mfa/MFA/' -e 's/Pingid/PingID/' -e 's/protobuf:"/sentinel:"" protobuf:"/' -e 's/namespaceId/namespaceID/' -e 's/Ttl/TTL/' -e 's/BoundCidrs/BoundCIDRs/' helper/identity/types.pb.go helper/storagepacker/types.pb.go logical/plugin/pb/backend.pb.go logical/identity.pb.go
2018-10-19 21:43:57 +00:00
sed -i -e 's/Iv/IV/' -e 's/Hmac/HMAC/' physical/types.pb.go
2016-10-20 16:39:19 +00:00
2017-05-19 12:34:17 +00:00
fmtcheck :
2018-09-01 15:10:29 +00:00
@true
2018-09-01 15:17:02 +00:00
#@sh -c "'$(CURDIR)/scripts/gofmtcheck.sh'"
2017-05-19 12:34:17 +00:00
fmt :
2018-09-18 03:03:00 +00:00
gofmt -w $( GOFMT_FILES)
2017-05-19 12:34:17 +00:00
2017-10-19 16:55:39 +00:00
spellcheck :
@echo "==> Spell checking website..."
@misspell -error -source= text website/source
2017-08-11 01:28:18 +00:00
mysql-database-plugin :
@CGO_ENABLED= 0 go build -o bin/mysql-database-plugin ./plugins/database/mysql/mysql-database-plugin
mysql-legacy-database-plugin :
@CGO_ENABLED= 0 go build -o bin/mysql-legacy-database-plugin ./plugins/database/mysql/mysql-legacy-database-plugin
cassandra-database-plugin :
@CGO_ENABLED= 0 go build -o bin/cassandra-database-plugin ./plugins/database/cassandra/cassandra-database-plugin
postgresql-database-plugin :
@CGO_ENABLED= 0 go build -o bin/postgresql-database-plugin ./plugins/database/postgresql/postgresql-database-plugin
mssql-database-plugin :
@CGO_ENABLED= 0 go build -o bin/mssql-database-plugin ./plugins/database/mssql/mssql-database-plugin
hana-database-plugin :
@CGO_ENABLED= 0 go build -o bin/hana-database-plugin ./plugins/database/hana/hana-database-plugin
mongodb-database-plugin :
@CGO_ENABLED= 0 go build -o bin/mongodb-database-plugin ./plugins/database/mongodb/mongodb-database-plugin
2018-06-25 20:30:11 +00:00
.PHONY : bin default prep test vet bootstrap fmt fmtcheck mysql -database -plugin mysql -legacy -database -plugin cassandra -database -plugin postgresql -database -plugin mssql -database -plugin hana -database -plugin mongodb -database -plugin static -assets ember -dist ember -dist -dev static -dist static -dist -dev