From 26ba56306458b647ebeea98b8ec2ca64c6ac0bcb Mon Sep 17 00:00:00 2001 From: 9seconds Date: Wed, 30 May 2018 22:35:04 +0300 Subject: [PATCH] Add Makefile --- Makefile | 80 +++++++++++++++++++++++++++++++++++++ main.go | 3 ++ scripts/generate_version.sh | 12 ++++++ 3 files changed, 95 insertions(+) create mode 100644 Makefile create mode 100755 scripts/generate_version.sh diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..53ea512 --- /dev/null +++ b/Makefile @@ -0,0 +1,80 @@ +ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) +IMAGE_NAME := mtg +APP_NAME := $(IMAGE_NAME) +GOMETALINTER := gometalinter.v2 + +VENDOR_FILES := $(shell find "$(ROOT_DIR)/vendor" 2>/dev/null || echo -n "vendor") +CC_BINARIES := $(shell bash -c "echo -n $(APP_NAME)-{linux,windows,darwin,freebsd,openbsd}-{386,amd64} $(APP_NAME)-linux-{arm,arm64}") +APP_DEPS := version.go $(VENDOR_FILES) + +COMMON_BUILD_FLAGS := -ldflags="-s -w" + +# ----------------------------------------------------------------------------- + +$(APP_NAME): $(APP_DEPS) + @go build $(COMMON_BUILD_FLAGS) -o "$(APP_NAME)" + +static-$(APP_NAME): $(APP_DEPS) + @env CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo $(COMMON_BUILD_FLAGS) -o "$(APP_NAME)" + +$(APP_NAME)-%: GOOS=$(shell echo -n "$@" | sed 's?$(APP_NAME)-??' | cut -f1 -d-) +$(APP_NAME)-%: GOARCH=$(shell echo -n "$@" | sed 's?$(APP_NAME)-??' | cut -f2 -d-) +$(APP_NAME)-%: $(APP_DEPS) ccbuilds + @env "GOOS=$(GOOS)" "GOARCH=$(GOARCH)" \ + go build \ + $(COMMON_BUILD_FLAGS) \ + -o "./ccbuilds/$(APP_NAME)-$(GOOS)-$(GOARCH)" + +ccbuilds: + @rm -rf ./ccbuilds && mkdir -p ./ccbuilds + +version.go: + @go generate main.go + +vendor: Gopkg.lock Gopkg.toml install-cli + @dep ensure + +# ----------------------------------------------------------------------------- + +.PHONY: all +all: $(APP_NAME) + +.PHONY: static +static: static-$(APP_NAME) + +.PHONY: crosscompile +crosscompile: $(CC_BINARIES) + +.PHONY: crosscompile-dir +crosscompile-dir: + @rm -rf "$(CC_DIR)" && mkdir -p "$(CC_DIR)" + +.PHONY: test +test: vendor install-cli + @go test -v ./... + +.PHONY: lint +lint: vendor install-cli + @$(GOMETALINTER) --deadline=2m ./... + +.PHONY: clean +clean: + @git clean -xfd && \ + git reset --hard >/dev/null && \ + git submodule foreach --recursive sh -c 'git clean -xfd && git reset --hard' >/dev/null + +.PHONY: docker +docker: + @docker build --pull -t "$(IMAGE_NAME)" "$(ROOT_DIR)" + +.PHONY: install-cli +install-cli: install-dep install-lint + +.PHONY: install-dep +install-dep: + @go get github.com/golang/dep/cmd/dep + +.PHONY: install-lint +install-lint: + @go get gopkg.in/alecthomas/gometalinter.v2 && \ + $(GOMETALINTER) --install >/dev/null diff --git a/main.go b/main.go index 244cd48..03ef63f 100644 --- a/main.go +++ b/main.go @@ -1,5 +1,7 @@ package main +//go:generate scripts/generate_version.sh + import ( "encoding/hex" "fmt" @@ -68,6 +70,7 @@ var ( ) func main() { + app.Version(version) kingpin.MustParse(app.Parse(os.Args[1:])) secretBytes, err := hex.DecodeString(*secret) diff --git a/scripts/generate_version.sh b/scripts/generate_version.sh new file mode 100755 index 0000000..8a964ec --- /dev/null +++ b/scripts/generate_version.sh @@ -0,0 +1,12 @@ +#!/bin/sh +set -eu + +PROJECT_DIR="$(git rev-parse --show-toplevel)" +OUTPUT_FILE="${PROJECT_DIR}/version.go" + +cat > "$OUTPUT_FILE" <