-
Notifications
You must be signed in to change notification settings - Fork 26
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3,385 changed files
with
1,286,613 additions
and
191 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -15,6 +15,7 @@ | |
|
||
# Compiled binaries | ||
/bin/ | ||
/pkg/ | ||
|
||
# Local development tmp | ||
/tmp/ |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
|
||
[[constraint]] | ||
name = "github.com/hashicorp/vault" | ||
version = "0.8.3" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,195 @@ | ||
# Metadata about this makefile and position | ||
MKFILE_PATH := $(lastword $(MAKEFILE_LIST)) | ||
CURRENT_DIR := $(patsubst %/,%,$(dir $(realpath $(MKFILE_PATH)))) | ||
|
||
# Ensure GOPATH | ||
GOPATH ?= $(HOME)/go | ||
|
||
# List all our actual files, excluding vendor | ||
GOFILES ?= $(shell go list $(TEST) | grep -v /vendor/) | ||
|
||
# Tags specific for building | ||
GOTAGS ?= | ||
|
||
# Number of procs to use | ||
GOMAXPROCS ?= 4 | ||
|
||
# Get the project metadata | ||
GOVERSION := 1.9.2 | ||
PROJECT := $(CURRENT_DIR:$(GOPATH)/src/%=%) | ||
OWNER := $(notdir $(patsubst %/,%,$(dir $(PROJECT)))) | ||
NAME := $(notdir $(PROJECT)) | ||
GIT_COMMIT ?= $(shell git rev-parse --short HEAD) | ||
VERSION := $(shell awk -F\" '/Version/ { print $$2; exit }' "${CURRENT_DIR}/version/version.go") | ||
EXTERNAL_TOOLS = \ | ||
github.com/golang/dep/cmd/dep | ||
|
||
# Current system information | ||
GOOS ?= $(shell go env GOOS) | ||
GOARCH ?= $(shell go env GOARCH) | ||
|
||
# Default os-arch combination to build | ||
XC_OS ?= darwin freebsd linux netbsd openbsd solaris windows | ||
XC_ARCH ?= 386 amd64 arm | ||
XC_EXCLUDE ?= darwin/arm solaris/386 solaris/arm windows/arm | ||
|
||
# GPG Signing key (blank by default, means no GPG signing) | ||
GPG_KEY ?= | ||
|
||
# List of ldflags | ||
LD_FLAGS ?= \ | ||
-s \ | ||
-w \ | ||
-X ${PROJECT}/version.Name=${NAME} \ | ||
-X ${PROJECT}/version.GitCommit=${GIT_COMMIT} | ||
|
||
# List of tests to run | ||
TEST ?= ./... | ||
|
||
# Create a cross-compile target for every os-arch pairing. This will generate | ||
# a make target for each os/arch like "make linux/amd64" as well as generate a | ||
# meta target (build) for compiling everything. | ||
define make-xc-target | ||
$1/$2: | ||
ifneq (,$(findstring ${1}/${2},$(XC_EXCLUDE))) | ||
@printf "%s%20s %s\n" "-->" "${1}/${2}:" "${PROJECT} (excluded)" | ||
else | ||
@printf "%s%20s %s\n" "-->" "${1}/${2}:" "${PROJECT}" | ||
@docker run \ | ||
--interactive \ | ||
--rm \ | ||
--dns="8.8.8.8" \ | ||
--volume="${CURRENT_DIR}:/go/src/${PROJECT}" \ | ||
--workdir="/go/src/${PROJECT}" \ | ||
"golang:${GOVERSION}" \ | ||
env \ | ||
CGO_ENABLED="0" \ | ||
GOOS="${1}" \ | ||
GOARCH="${2}" \ | ||
go build \ | ||
-a \ | ||
-o="pkg/${1}_${2}/${NAME}${3}" \ | ||
-ldflags "${LD_FLAGS}" \ | ||
-tags "${GOTAGS}" | ||
endif | ||
.PHONY: $1/$2 | ||
|
||
$1:: $1/$2 | ||
.PHONY: $1 | ||
|
||
build:: $1/$2 | ||
.PHONY: build | ||
endef | ||
$(foreach goarch,$(XC_ARCH),$(foreach goos,$(XC_OS),$(eval $(call make-xc-target,$(goos),$(goarch),$(if $(findstring windows,$(goos)),.exe,))))) | ||
|
||
# bootstrap installs the necessary go tools for development or build. | ||
bootstrap: | ||
@echo "==> Bootstrapping ${PROJECT}" | ||
@for t in ${EXTERNAL_TOOLS}; do \ | ||
echo "--> Installing $$t" ; \ | ||
go get -u "$$t"; \ | ||
done | ||
.PHONY: bootstrap | ||
|
||
# deps updates all dependencies for this project. | ||
deps: | ||
@echo "==> Updating deps for ${PROJECT}" | ||
@dep ensure -update | ||
@dep prune | ||
.PHONY: deps | ||
|
||
# dev builds and installs the project locally. | ||
dev: | ||
@echo "==> Installing ${NAME} for ${GOOS}/${GOARCH}" | ||
@rm -f "${GOPATH}/pkg/${GOOS}_${GOARCH}/${PROJECT}/version.a" # ldflags change and go doesn't detect | ||
@env \ | ||
CGO_ENABLED="0" \ | ||
go install \ | ||
-ldflags "${LD_FLAGS}" \ | ||
-tags "${GOTAGS}" | ||
.PHONY: dev | ||
|
||
# dist builds the binaries and then signs and packages them for distribution | ||
dist: | ||
ifndef GPG_KEY | ||
@echo "==> ERROR: No GPG key specified! Without a GPG key, this release cannot" | ||
@echo " be signed. Set the environment variable GPG_KEY to the ID of" | ||
@echo " the GPG key to continue." | ||
@exit 127 | ||
else | ||
@$(MAKE) -f "${MKFILE_PATH}" _cleanup | ||
@$(MAKE) -f "${MKFILE_PATH}" -j4 build | ||
@$(MAKE) -f "${MKFILE_PATH}" _compress _checksum _sign | ||
endif | ||
.PHONY: dist | ||
|
||
# test runs the test suite. | ||
test: | ||
@echo "==> Testing ${NAME}" | ||
@go test -timeout=30s -parallel=20 -tags="${GOTAGS}" ${GOFILES} ${TESTARGS} | ||
.PHONY: test | ||
|
||
# test-race runs the test suite. | ||
test-race: | ||
@echo "==> Testing ${NAME} (race)" | ||
@go test -timeout=60s -race -tags="${GOTAGS}" ${GOFILES} ${TESTARGS} | ||
.PHONY: test-race | ||
|
||
# _cleanup removes any previous binaries | ||
_cleanup: | ||
@rm -rf "${CURRENT_DIR}/pkg/" | ||
@rm -rf "${CURRENT_DIR}/bin/" | ||
|
||
# _compress compresses all the binaries in pkg/* as tarball and zip. | ||
_compress: | ||
@mkdir -p "${CURRENT_DIR}/pkg/dist" | ||
@for platform in $$(find ./pkg -mindepth 1 -maxdepth 1 -type d); do \ | ||
osarch=$$(basename "$$platform"); \ | ||
if [ "$$osarch" = "dist" ]; then \ | ||
continue; \ | ||
fi; \ | ||
\ | ||
ext=""; \ | ||
if test -z "$${osarch##*windows*}"; then \ | ||
ext=".exe"; \ | ||
fi; \ | ||
cd "$$platform"; \ | ||
tar -czf "${CURRENT_DIR}/pkg/dist/${NAME}_${VERSION}_$${osarch}.tgz" "${NAME}$${ext}"; \ | ||
zip -q "${CURRENT_DIR}/pkg/dist/${NAME}_${VERSION}_$${osarch}.zip" "${NAME}$${ext}"; \ | ||
cd - &>/dev/null; \ | ||
done | ||
.PHONY: _compress | ||
|
||
# _checksum produces the checksums for the binaries in pkg/dist | ||
_checksum: | ||
@cd "${CURRENT_DIR}/pkg/dist" && \ | ||
shasum --algorithm 256 * > ${CURRENT_DIR}/pkg/dist/${NAME}_${VERSION}_SHA256SUMS && \ | ||
cd - &>/dev/null | ||
.PHONY: _checksum | ||
|
||
# _sign signs the binaries using the given GPG_KEY. This should not be called | ||
# as a separate function. | ||
_sign: | ||
@echo "==> Signing ${PROJECT} at v${VERSION}" | ||
@gpg \ | ||
--default-key "${GPG_KEY}" \ | ||
--detach-sig "${CURRENT_DIR}/pkg/dist/${NAME}_${VERSION}_SHA256SUMS" | ||
@git commit \ | ||
--allow-empty \ | ||
--gpg-sign="${GPG_KEY}" \ | ||
--message "Release v${VERSION}" \ | ||
--quiet \ | ||
--signoff | ||
@git tag \ | ||
--annotate \ | ||
--create-reflog \ | ||
--local-user "${GPG_KEY}" \ | ||
--message "Version ${VERSION}" \ | ||
--sign \ | ||
"v${VERSION}" master | ||
@echo "--> Do not forget to run:" | ||
@echo "" | ||
@echo " git push && git push --tags" | ||
@echo "" | ||
@echo "And then upload the binaries in dist/!" | ||
.PHONY: _sign |
Oops, something went wrong.