blob: b25a30497cb0b13916eb7b81541a4df4e5fc3bfb [file] [log] [blame]
Zack Williamsf354d5c2019-05-20 16:56:45 -07001# Makefile for cordctl
2
3# Set bash for fail quickly
4SHELL = bash -eu -o pipefail
5
Scott Baker2c0ebda2019-05-06 16:55:47 -07006ifeq ($(GOPATH),)
Zack Williamsf354d5c2019-05-20 16:56:45 -07007 $(error Please set your GOPATH)
Scott Baker2c0ebda2019-05-06 16:55:47 -07008endif
9
Zack Williamsf354d5c2019-05-20 16:56:45 -070010VERSION ?= $(shell cat $(GOPATH)/src/github.com/opencord/cordctl/VERSION)
11GOVERSION = $(shell go version 2>&1 | sed -E 's/.*(go[0-9]+\.[0-9]+\.[0-9]+).*/\1/g')
12
13GITCOMMIT ?= $(shell git log --pretty=format:"%h" -n 1)
Scott Baker63ce82e2019-05-15 09:01:42 -070014ifeq ($(shell git ls-files --others --modified --exclude-standard 2>/dev/null | wc -l | sed -e 's/ //g'),0)
Zack Williamsf354d5c2019-05-20 16:56:45 -070015 GITDIRTY := false
Scott Baker63ce82e2019-05-15 09:01:42 -070016else
Zack Williamsf354d5c2019-05-20 16:56:45 -070017 GITDIRTY := true
Scott Baker63ce82e2019-05-15 09:01:42 -070018endif
Scott Baker2c0ebda2019-05-06 16:55:47 -070019
Zack Williamsf354d5c2019-05-20 16:56:45 -070020# build target creates binaries for host OS and arch
21HOST_OS ?= $(shell uname -s | tr A-Z a-z)
22
23# uname and golang disagree on name of CPU architecture
24ifeq ($(shell uname -m),x86_64)
25 HOST_ARCH ?= amd64
26else
27 HOST_ARCH ?= $(shell uname -m)
28endif
29
30BUILDTIME = $(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
31
32LDFLAGS = -ldflags \
Matteo Scandolo722930f2019-05-21 15:55:31 -070033 "-X github.com/opencord/cordctl/cli/version.Version=$(VERSION) \
34 -X github.com/opencord/cordctl/cli/version.GitCommit=$(GITCOMMIT) \
35 -X github.com/opencord/cordctl/cli/version.GitDirty=$(GITDIRTY) \
36 -X github.com/opencord/cordctl/cli/version.GoVersion=$(GOVERSION) \
37 -X github.com/opencord/cordctl/cli/version.Os=$$GOOS \
38 -X github.com/opencord/cordctl/cli/version.Arch=$$GOARCH \
39 -X github.com/opencord/cordctl/cli/version.BuildTime=$(BUILDTIME)"
Scott Baker2c0ebda2019-05-06 16:55:47 -070040
41help:
42
43build: dependencies
Matteo Scandolo722930f2019-05-21 15:55:31 -070044 export GOOS=$(HOST_OS) ;\
45 export GOARCH=$(HOST_ARCH) ;\
46 go build $(LDFLAGS) cmd/cordctl.go
Scott Baker2c0ebda2019-05-06 16:55:47 -070047
48dependencies:
Scott Baker6cf525a2019-05-09 12:25:08 -070049 [ -d "vendor" ] || dep ensure
Scott Baker2c0ebda2019-05-06 16:55:47 -070050
51lint: dependencies
52 find $(GOPATH)/src/github.com/opencord/cordctl -name "*.go" -not -path '$(GOPATH)/src/github.com/opencord/cordctl/vendor/*' | xargs gofmt -l
53 go vet ./...
54 dep check
55
56test: dependencies
57 @mkdir -p ./tests/results
58 @go test -v -coverprofile ./tests/results/go-test-coverage.out -covermode count ./... 2>&1 | tee ./tests/results/go-test-results.out ;\
59 RETURN=$$? ;\
60 go-junit-report < ./tests/results/go-test-results.out > ./tests/results/go-test-results.xml ;\
61 gocover-cobertura < ./tests/results/go-test-coverage.out > ./tests/results/go-test-coverage.xml ;\
62 exit $$RETURN
Scott Baker6cf525a2019-05-09 12:25:08 -070063
Zack Williamsf354d5c2019-05-20 16:56:45 -070064
65# Release related items
66# Generates binaries in $RELEASE_DIR with name $RELEASE_NAME-$RELEASE_OS_ARCH
67# Inspired by: https://github.com/kubernetes/minikube/releases
68RELEASE_DIR ?= release
69RELEASE_NAME ?= cordctl
70RELEASE_OS_ARCH ?= linux-amd64 windows-amd64 darwin-amd64
71RELEASE_BINS := $(foreach rel,$(RELEASE_OS_ARCH),$(RELEASE_DIR)/$(RELEASE_NAME)-$(rel))
72
73# Functions to extract the OS/ARCH
74rel_os = $(word 2, $(subst -, ,$(notdir $@)))
75rel_arch = $(word 3, $(subst -, ,$(notdir $@)))
76
77$(RELEASE_BINS): dependencies
Matteo Scandolo722930f2019-05-21 15:55:31 -070078 export GOOS=$(rel_os) ;\
79 export GOARCH=$(rel_arch) ;\
80 go build -v $(LDFLAGS) -o "$@" cmd/cordctl.go
Zack Williamsf354d5c2019-05-20 16:56:45 -070081
82release: $(RELEASE_BINS)
83
Scott Baker6cf525a2019-05-09 12:25:08 -070084clean:
Zack Williamsf354d5c2019-05-20 16:56:45 -070085 rm -f cordctl $(RELEASE_BINS)
Scott Baker6cf525a2019-05-09 12:25:08 -070086 rm -rf vendor
87 rm -f Gopkg.lock
Zack Williamsf354d5c2019-05-20 16:56:45 -070088