-
Notifications
You must be signed in to change notification settings - Fork 10
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
1 parent
731612a
commit 5dcda15
Showing
2 changed files
with
196 additions
and
0 deletions.
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 |
---|---|---|
@@ -0,0 +1,164 @@ | ||
# A Self-Documenting Makefile: http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html | ||
|
||
OS = $(shell uname) | ||
|
||
# Project variables | ||
PACKAGE = github.com/banzaicloud/banzai-cli | ||
BINARY_NAME = banzai | ||
|
||
# Build variables | ||
BUILD_DIR ?= build | ||
BUILD_PACKAGE = ${PACKAGE}/cmd/banzai | ||
VERSION ?= $(shell git describe --tags --exact-match 2>/dev/null || git symbolic-ref -q --short HEAD) | ||
COMMIT_HASH ?= $(shell git rev-parse --short HEAD 2>/dev/null) | ||
BUILD_DATE ?= $(shell date +%FT%T%z) | ||
LDFLAGS += -X main.Version=${VERSION} -X main.CommitHash=${COMMIT_HASH} -X main.BuildDate=${BUILD_DATE} | ||
export CGO_ENABLED ?= 0 | ||
export GOOS = $(shell go env GOOS) | ||
ifeq (${VERBOSE}, 1) | ||
ifeq ($(filter -v,${GOARGS}),) | ||
GOARGS += -v | ||
endif | ||
TEST_FORMAT = short-verbose | ||
endif | ||
|
||
# Dependency versions | ||
DEP_VERSION = 0.5.0 | ||
GOLANGCI_VERSION = 1.12.2 | ||
GOTESTSUM_VERSION = 0.3.2 | ||
LICENSEI_VERSION = 0.0.7 | ||
|
||
GOLANG_VERSION = 1.11 | ||
|
||
# Add the ability to override some variables | ||
# Use with care | ||
-include override.mk | ||
|
||
bin/dep: bin/dep-${DEP_VERSION} | ||
@ln -sf dep-${DEP_VERSION} bin/dep | ||
bin/dep-${DEP_VERSION}: | ||
@mkdir -p bin | ||
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | INSTALL_DIRECTORY=bin DEP_RELEASE_TAG=v${DEP_VERSION} sh | ||
@mv bin/dep $@ | ||
|
||
.PHONY: vendor | ||
vendor: bin/dep ## Install dependencies | ||
bin/dep ensure -v -vendor-only | ||
|
||
.PHONY: build | ||
build: ## Build a binary | ||
ifeq (${VERBOSE}, 1) | ||
go env | ||
endif | ||
ifneq (${IGNORE_GOLANG_VERSION_REQ}, 1) | ||
@printf "${GOLANG_VERSION}\n$$(go version | awk '{sub(/^go/, "", $$3);print $$3}')" | sort -t '.' -k 1,1 -k 2,2 -k 3,3 -g | head -1 | grep -q -E "^${GOLANG_VERSION}$$" || (printf "Required Go version is ${GOLANG_VERSION}\nInstalled: `go version`" && exit 1) | ||
endif | ||
|
||
go build ${GOARGS} -tags "${GOTAGS}" -ldflags "${LDFLAGS}" -o ${BUILD_DIR}/${BINARY_NAME} ${BUILD_PACKAGE} | ||
|
||
.PHONY: build-release | ||
build-release: LDFLAGS += -w | ||
build-release: build ## Build a binary without debug information | ||
|
||
.PHONY: check | ||
check: test lint ## Run tests and linters | ||
|
||
bin/gotestsum: bin/gotestsum-${GOTESTSUM_VERSION} | ||
@ln -sf gotestsum-${GOTESTSUM_VERSION} bin/gotestsum | ||
bin/gotestsum-${GOTESTSUM_VERSION}: | ||
@mkdir -p bin | ||
ifeq (${OS}, Darwin) | ||
curl -L https://github.com/gotestyourself/gotestsum/releases/download/v${GOTESTSUM_VERSION}/gotestsum_${GOTESTSUM_VERSION}_darwin_amd64.tar.gz | tar -zOxf - gotestsum > ./bin/gotestsum-${GOTESTSUM_VERSION} && chmod +x ./bin/gotestsum-${GOTESTSUM_VERSION} | ||
endif | ||
ifeq (${OS}, Linux) | ||
curl -L https://github.com/gotestyourself/gotestsum/releases/download/v${GOTESTSUM_VERSION}/gotestsum_${GOTESTSUM_VERSION}_linux_amd64.tar.gz | tar -zOxf - gotestsum > ./bin/gotestsum-${GOTESTSUM_VERSION} && chmod +x ./bin/gotestsum-${GOTESTSUM_VERSION} | ||
endif | ||
|
||
TEST_PKGS ?= ./... | ||
TEST_REPORT_NAME ?= results.xml | ||
.PHONY: test | ||
test: TEST_REPORT ?= main | ||
test: TEST_FORMAT ?= short | ||
test: SHELL = /bin/bash | ||
test: bin/gotestsum ## Run tests | ||
@mkdir -p ${BUILD_DIR}/test_results/${TEST_REPORT} | ||
bin/gotestsum --no-summary=skipped --junitfile ${BUILD_DIR}/test_results/${TEST_REPORT}/${TEST_REPORT_NAME} --format ${TEST_FORMAT} -- $(filter-out -v,${GOARGS}) $(if ${TEST_PKGS},${TEST_PKGS},./...) | ||
|
||
bin/golangci-lint: bin/golangci-lint-${GOLANGCI_VERSION} | ||
@ln -sf golangci-lint-${GOLANGCI_VERSION} bin/golangci-lint | ||
bin/golangci-lint-${GOLANGCI_VERSION}: | ||
@mkdir -p bin | ||
curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | bash -s -- -b ./bin/ v${GOLANGCI_VERSION} | ||
@mv bin/golangci-lint $@ | ||
|
||
.PHONY: lint | ||
lint: bin/golangci-lint ## Run linter | ||
bin/golangci-lint run | ||
|
||
bin/licensei: bin/licensei-${LICENSEI_VERSION} | ||
@ln -sf licensei-${LICENSEI_VERSION} bin/licensei | ||
bin/licensei-${LICENSEI_VERSION}: | ||
@mkdir -p bin | ||
curl -sfL https://raw.githubusercontent.com/goph/licensei/master/install.sh | bash -s v${LICENSEI_VERSION} | ||
@mv bin/licensei $@ | ||
|
||
.PHONY: license-check | ||
license-check: bin/licensei ## Run license check | ||
bin/licensei check | ||
./scripts/check-header.sh | ||
|
||
.PHONY: license-cache | ||
license-cache: bin/licensei ## Generate license cache | ||
bin/licensei cache | ||
|
||
#release-%: TAG_PREFIX = v | ||
release-%: | ||
# @sed -e "s/^## \[Unreleased\]$$/## [Unreleased]\\"$$'\n'"\\"$$'\n'"\\"$$'\n'"## [$*] - $$(date +%Y-%m-%d)/g" CHANGELOG.md > CHANGELOG.md.new | ||
# @mv CHANGELOG.md.new CHANGELOG.md | ||
|
||
# @sed -e "s|^\[Unreleased\]: \(.*\)HEAD$$|[Unreleased]: https://${PACKAGE}/compare/${TAG_PREFIX}$*...HEAD\\"$$'\n'"[$*]: \1${TAG_PREFIX}$*|g" CHANGELOG.md > CHANGELOG.md.new | ||
# @mv CHANGELOG.md.new CHANGELOG.md | ||
|
||
ifeq (${TAG}, 1) | ||
# git add CHANGELOG.md | ||
# git commit -m 'Prepare release $*' | ||
git tag -m 'Release $*' ${TAG_PREFIX}$* | ||
endif | ||
|
||
@echo "Version updated to $*!" | ||
@echo | ||
@echo "Review the changes made by this script then execute the following:" | ||
ifneq (${TAG}, 1) | ||
@echo | ||
# @echo "git add CHANGELOG.md && git commit -m 'Prepare release $*' && git tag -m 'Release $*' ${TAG_PREFIX}$*" | ||
@echo "git tag -m 'Release $*' ${TAG_PREFIX}$*" | ||
@echo | ||
@echo "Finally, push the changes:" | ||
endif | ||
@echo | ||
@echo "git push; git push origin ${TAG_PREFIX}$*" | ||
|
||
.PHONY: patch | ||
patch: ## Release a new patch version | ||
@${MAKE} release-$(shell git describe --abbrev=0 --tags | sed 's/^v//' | awk -F'[ .]' '{print $$1"."$$2"."$$3+1}') | ||
|
||
.PHONY: minor | ||
minor: ## Release a new minor version | ||
@${MAKE} release-$(shell git describe --abbrev=0 --tags | sed 's/^v//' | awk -F'[ .]' '{print $$1"."$$2+1".0"}') | ||
|
||
.PHONY: major | ||
major: ## Release a new major version | ||
@${MAKE} release-$(shell git describe --abbrev=0 --tags | sed 's/^v//' | awk -F'[ .]' '{print $$1+1".0.0"}') | ||
|
||
.PHONY: list | ||
list: ## List all make targets | ||
@${MAKE} -pRrn : -f $(MAKEFILE_LIST) 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' | sort | ||
|
||
.PHONY: help | ||
.DEFAULT_GOAL := help | ||
help: | ||
@grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' | ||
|
||
# Variable outputting/exporting rules | ||
var-%: ; @echo $($*) | ||
varexport-%: ; @echo $*=$($*) |
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,32 @@ | ||
#!/usr/bin/env bash | ||
|
||
read -r -d '' EXPECTED <<EOF | ||
// Copyright © DATE Banzai Cloud | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
EOF | ||
|
||
STATUS=0 | ||
FILES=$(find . -name "*.go" -not -path "./vendor/*") | ||
|
||
for FILE in $FILES; do | ||
# Replace the actual year with DATE so we can ignore the year when | ||
# checking for the license header. | ||
HEADER=$(head -n 13 $FILE | sed -E -e 's/Copyright © [0-9]+/Copyright © DATE/') | ||
if [ "$HEADER" != "$EXPECTED" ]; then | ||
echo "incorrect license header: $FILE" | ||
STATUS=1 | ||
fi | ||
done | ||
|
||
exit $STATUS |