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) )
2019-10-17 19:48:45 +00:00
export RELEASE_GPG_KEY_FINGERPRINT := 91A6 E7F8 5D05 C656 30BE F189 5185 2D87 348F FC4C
2020-01-09 17:35:32 +00:00
TEST ?= $$ ( $( GO_CMD) list ./... | grep -v /vendor/ | grep -v /integ)
2019-07-22 17:11:00 +00:00
TEST_TIMEOUT ?= 45m
EXTENDED_TEST_TIMEOUT = 60m
INTEG_TEST_TIMEOUT = 120m
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 = \
2019-07-25 18:02:16 +00:00
golang.org/x/tools/cmd/goimports \
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 \
2019-07-22 17:11:00 +00:00
github.com/client9/misspell/cmd/misspell \
github.com/golangci/golangci-lint/cmd/golangci-lint
2019-12-08 02:01:11 +00:00
GOFMT_FILES ?= $$ ( find . -name '*.go' | grep -v pb.go | grep -v vendor)
2015-03-04 07:14:18 +00:00
2020-02-11 15:03:49 +00:00
GO_VERSION_MIN = 1.13.7
2020-01-09 17:35:32 +00:00
GO_CMD ?= go
2019-05-22 12:17:55 +00:00
CGO_ENABLED ?= 0
2018-07-16 14:18:09 +00:00
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' "
2019-03-25 17:07:14 +00:00
dev-ui : assetcheck 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
2019-03-25 17:07:14 +00:00
dev-ui-mem : assetcheck dev -ui
2018-10-31 18:11:45 +00:00
dev-dynamic-mem : BUILD_TAGS +=memprofiler
dev-dynamic-mem : dev -dynamic
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 = \
2020-01-09 17:35:32 +00:00
$( GO_CMD) 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 \
2020-01-09 17:35:32 +00:00
$( GO_CMD) test -v -c -tags= '$(BUILD_TAGS)' $$ pkg -parallel= 4 ; \
2017-02-16 20:15:02 +00:00
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
2020-01-09 17:35:32 +00:00
VAULT_ACC = 1 $( GO_CMD) 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 = \
2020-01-09 17:35:32 +00:00
$( GO_CMD) 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 :
2020-01-09 17:35:32 +00:00
@$( GO_CMD) list -f '{{.Dir}}' ./... | grep -v /vendor/ \
2015-04-28 20:18:55 +00:00
| grep -v '.*github.com/hashicorp/vault$$' \
2020-01-09 17:35:32 +00:00
| xargs $( GO_CMD) vet ; if [ $$ ? -eq 1 ] ; then \
2015-04-28 20:18:55 +00:00
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
2019-07-22 17:11:00 +00:00
# lint runs vet plus a number of other checkers, it is more comprehensive, but louder
lint :
2020-01-09 17:35:32 +00:00
@$( GO_CMD) list -f '{{.Dir}}' ./... | grep -v /vendor/ \
2019-07-22 17:11:00 +00:00
| xargs golangci-lint run; if [ $$ ? -eq 1 ] ; then \
echo "" ; \
echo "Lint found suspicious constructs. Please check the reported constructs" ; \
echo "and fix them if necessary before submitting the code for reviewal." ; \
fi
# for ci jobs, runs lint against the changed packages in the commit
ci-lint :
@golangci-lint run --deadline 10m --new-from-rev= HEAD~
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) ' "
2020-01-09 17:35:32 +00:00
@$( GO_CMD) generate $( $( GO_CMD) list ./... | grep -v /vendor/)
2019-06-11 14:55:53 +00:00
@# Remove old ( now broken) husky git hooks.
@[ ! -d .git/hooks ] || grep -l '^# husky$$' .git/hooks/* | xargs rm -f
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
2019-06-26 14:14:23 +00:00
.PHONY : ci -config
2019-06-11 14:55:53 +00:00
ci-config :
2019-06-26 14:14:23 +00:00
@$( MAKE) -C .circleci ci-config
.PHONY : ci -verify
2019-06-11 14:55:53 +00:00
ci-verify :
@$( MAKE) -C .circleci ci-verify
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 " ; \
2020-01-09 17:35:32 +00:00
GO111MODULE = off $( GO_CMD) 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
2019-12-06 18:58:40 +00:00
static-assets-dir :
@mkdir -p ./pkg/web_ui
static-assets : static -assets -dir
2018-04-03 14:46:45 +00:00
@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"
2019-10-17 19:48:45 +00:00
@cd ui && yarn --ignore-optional
2018-04-03 14:46:45 +00:00
@echo "--> Running ember tests"
2019-12-18 17:12:44 +00:00
@cd ui && yarn run test:oss
2018-04-03 14:46:45 +00:00
2019-05-24 12:02:51 +00:00
ember-ci-test : # Deprecated, to be removed soon.
@echo "ember-ci-test is deprecated in favour of test-ui-browserstack"
@exit 1
check-vault-in-path :
@VAULT_BIN= $$ ( command -v vault) || { echo "vault command not found" ; exit 1; } ; \
[ -x " $$ VAULT_BIN " ] || { echo " $$ VAULT_BIN not executable " ; exit 1; } ; \
printf " Using Vault at %s:\n\$ $ vault version\n%s\n " " $$ VAULT_BIN " " $$ (vault version) "
check-browserstack-creds :
@[ -n " $$ BROWSERSTACK_ACCESS_KEY " ] || { echo "BROWSERSTACK_ACCESS_KEY not set" ; exit 1; }
@[ -n " $$ BROWSERSTACK_USERNAME " ] || { echo "BROWSERSTACK_USERNAME not set" ; exit 1; }
test-ui-browserstack : check -vault -in -path check -browserstack -creds
2019-05-03 22:20:14 +00:00
@echo "--> Installing JavaScript assets"
2019-10-17 19:48:45 +00:00
@cd ui && yarn --ignore-optional
2019-05-03 22:20:14 +00:00
@echo "--> Running ember tests in Browserstack"
@cd ui && yarn run test:browserstack
2018-04-03 14:46:45 +00:00
ember-dist :
@echo "--> Installing JavaScript assets"
2019-10-17 19:48:45 +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"
2019-10-17 19:48:45 +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"
2019-10-17 19:48:45 +00:00
@cd ui && yarn run build-dev
2018-06-25 20:30:11 +00:00
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 :
2019-04-12 21:54:35 +00:00
protoc vault/*.proto --go_out= plugins = grpc,paths= source_relative:.
protoc helper/storagepacker/types.proto --go_out= plugins = grpc,paths= source_relative:.
protoc helper/forwarding/types.proto --go_out= plugins = grpc,paths= source_relative:.
protoc sdk/logical/*.proto --go_out= plugins = grpc,paths= source_relative:.
2019-06-20 19:14:58 +00:00
protoc physical/raft/types.proto --go_out= plugins = grpc,paths= source_relative:.
2019-04-12 21:54:35 +00:00
protoc helper/identity/mfa/types.proto --go_out= plugins = grpc,paths= source_relative:.
protoc helper/identity/types.proto --go_out= plugins = grpc,paths= source_relative:.
2019-04-15 18:10:07 +00:00
protoc sdk/database/dbplugin/*.proto --go_out= plugins = grpc,paths= source_relative:.
2019-04-12 21:54:35 +00:00
protoc sdk/plugin/pb/*.proto --go_out= plugins = grpc,paths= source_relative:.
2020-02-14 21:45:37 +00:00
protoc sdk/physical/encrypted_blob.proto --go_out= paths = source_relative:.
2019-06-20 19:14:58 +00:00
sed -i -e 's/Id/ID/' vault/request_forwarding_service.pb.go
2020-02-14 21:45:37 +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/' -e 's/Iv/IV/' -e 's/Hmac/HMAC/' helper/identity/types.pb.go helper/identity/mfa/types.pb.go helper/storagepacker/types.pb.go sdk/plugin/pb/backend.pb.go sdk/logical/identity.pb.go sdk/physical/encrypted_blob.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 :
2019-07-19 01:04:56 +00:00
goimports -w $( GOFMT_FILES)
2017-05-19 12:34:17 +00:00
2019-03-25 17:07:14 +00:00
assetcheck :
@echo "==> Checking compiled UI assets..."
@sh -c " ' $( CURDIR) /scripts/assetcheck.sh' "
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 :
2020-01-09 17:35:32 +00:00
@CGO_ENABLED= 0 $( GO_CMD) build -o bin/mysql-database-plugin ./plugins/database/mysql/mysql-database-plugin
2017-08-11 01:28:18 +00:00
mysql-legacy-database-plugin :
2020-01-09 17:35:32 +00:00
@CGO_ENABLED= 0 $( GO_CMD) build -o bin/mysql-legacy-database-plugin ./plugins/database/mysql/mysql-legacy-database-plugin
2017-08-11 01:28:18 +00:00
cassandra-database-plugin :
2020-01-09 17:35:32 +00:00
@CGO_ENABLED= 0 $( GO_CMD) build -o bin/cassandra-database-plugin ./plugins/database/cassandra/cassandra-database-plugin
2017-08-11 01:28:18 +00:00
2019-01-18 01:14:57 +00:00
influxdb-database-plugin :
2020-01-09 17:35:32 +00:00
@CGO_ENABLED= 0 $( GO_CMD) build -o bin/influxdb-database-plugin ./plugins/database/influxdb/influxdb-database-plugin
2019-01-18 01:14:57 +00:00
2017-08-11 01:28:18 +00:00
postgresql-database-plugin :
2020-01-09 17:35:32 +00:00
@CGO_ENABLED= 0 $( GO_CMD) build -o bin/postgresql-database-plugin ./plugins/database/postgresql/postgresql-database-plugin
2017-08-11 01:28:18 +00:00
mssql-database-plugin :
2020-01-09 17:35:32 +00:00
@CGO_ENABLED= 0 $( GO_CMD) build -o bin/mssql-database-plugin ./plugins/database/mssql/mssql-database-plugin
2017-08-11 01:28:18 +00:00
hana-database-plugin :
2020-01-09 17:35:32 +00:00
@CGO_ENABLED= 0 $( GO_CMD) build -o bin/hana-database-plugin ./plugins/database/hana/hana-database-plugin
2017-08-11 01:28:18 +00:00
mongodb-database-plugin :
2020-01-09 17:35:32 +00:00
@CGO_ENABLED= 0 $( GO_CMD) build -o bin/mongodb-database-plugin ./plugins/database/mongodb/mongodb-database-plugin
2017-08-11 01:28:18 +00:00
2019-10-17 19:48:45 +00:00
# GPG_KEY_VARS sets FPR to the fingerprint with no spaces and GIT_GPG_KEY_ID to a git compatible gpg key id.
d e f i n e G P G _ K E Y _ V A R S
FPR = $$ ( echo " $( RELEASE_GPG_KEY_FINGERPRINT) " | sed 's/ //g' ) && GIT_GPG_KEY_ID = " 0x $$ (printf $$ FPR | tail -c 16) "
e n d e f
d e f i n e F A I L _ I F _ G P G _ K E Y _ M I S S I N G
@$( GPG_KEY_VARS) && echo " Checking for key ' $$ FPR' (git key id: $$ GIT_GPG_KEY_ID) " ; \
gpg --list-secret-keys " $$ FPR " >/dev/null 2>& 1 || { \
echo " ERROR: Secret GPG key missing: $$ FPR " ; \
exit 1; \
}
e n d e f
d e f i n e F A I L _ I F _ U N C O M M I T T E D _ C H A N G E S
@{ git diff --exit-code && git diff --cached --exit-code; } >/dev/null 2>& 1 || { \
echo "ERROR: Uncommitted changes detected." ; \
exit 1; \
}
e n d e f
stage-commit :
$( FAIL_IF_GPG_KEY_MISSING)
$( FAIL_IF_UNCOMMITTED_CHANGES)
@[ -n " $( STAGE_VERSION) " ] || { echo "You must set STAGE_VERSION to the version in semver-like format." ; exit 1; }
set -x; $( GPG_KEY_VARS) && git commit --allow-empty --gpg-sign= $$ GIT_GPG_KEY_ID -m 'release: stage v$(STAGE_VERSION)'
publish-commit :
$( FAIL_IF_GPG_KEY_MISSING)
$( FAIL_IF_UNCOMMITTED_CHANGES)
@[ -n " $( PUBLISH_VERSION) " ] || { echo "You must set PUBLISH_VERSION to the version in semver-like format." ; exit 1; }
set -x; $( GPG_KEY_VARS) && git commit --allow-empty --gpg-sign= $$ GIT_GPG_KEY_ID -m 'release: publish v$(PUBLISH_VERSION)'
.PHONY : bin default prep test vet bootstrap fmt fmtcheck mysql -database -plugin mysql -legacy -database -plugin cassandra -database -plugin influxdb -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 assetcheck check -vault -in -path check -browserstack -creds test -ui -browserstack stage -commit publish -commit
2019-01-17 23:19:54 +00:00
.NOTPARALLEL : ember -dist ember -dist -dev static -assets