blob: f55f82b9811fd44f1de358ba9b5f5a6f21dc4f13 [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)
Scott Baker85e36902019-07-01 10:36:23 -070011GOVERSION = $(shell go version 2>&1 | awk '{print $$3;}' )
Zack Williamsf354d5c2019-05-20 16:56:45 -070012
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
Scott Baker14c8f182019-05-22 18:05:29 -070041# Settings for running with mock server
42TEST_PROTOSET = $(shell pwd)/mock/xos-core.protoset
43TEST_MOCK_DIR = $(shell pwd)/mock
44TEST_SERVER = localhost:50051
45TEST_USERNAME = admin@opencord.org
46TEST_PASSWORD = letmein
47
Scott Baker2c0ebda2019-05-06 16:55:47 -070048help:
49
50build: dependencies
Matteo Scandolo722930f2019-05-21 15:55:31 -070051 export GOOS=$(HOST_OS) ;\
52 export GOARCH=$(HOST_ARCH) ;\
Scott Baker28a39562019-07-12 09:34:15 -070053 go build $(LDFLAGS) cmd/cordctl/cordctl.go
Scott Baker2c0ebda2019-05-06 16:55:47 -070054
55dependencies:
Scott Baker6cf525a2019-05-09 12:25:08 -070056 [ -d "vendor" ] || dep ensure
Scott Baker2c0ebda2019-05-06 16:55:47 -070057
58lint: dependencies
59 find $(GOPATH)/src/github.com/opencord/cordctl -name "*.go" -not -path '$(GOPATH)/src/github.com/opencord/cordctl/vendor/*' | xargs gofmt -l
60 go vet ./...
61 dep check
62
63test: dependencies
64 @mkdir -p ./tests/results
Scott Baker14c8f182019-05-22 18:05:29 -070065 @set +e; \
66 CORDCTL_PROTOSET=$(TEST_PROTOSET)\
67 CORDCTL_SERVER=$(TEST_SERVER) \
68 CORDCTL_MOCK_DIR=$(TEST_MOCK_DIR) \
69 CORDCTL_USERNAME=$(TEST_USERNAME) \
70 CORDCTL_PASSWORD=$(TEST_PASSWORD) \
71 go test -v -coverprofile ./tests/results/go-test-coverage.out -covermode count ./... 2>&1 | tee ./tests/results/go-test-results.out ;\
Scott Baker2c0ebda2019-05-06 16:55:47 -070072 RETURN=$$? ;\
73 go-junit-report < ./tests/results/go-test-results.out > ./tests/results/go-test-results.xml ;\
74 gocover-cobertura < ./tests/results/go-test-coverage.out > ./tests/results/go-test-coverage.xml ;\
Scott Baker14c8f182019-05-22 18:05:29 -070075 cd mock; \
76 docker-compose down; \
Scott Baker2c0ebda2019-05-06 16:55:47 -070077 exit $$RETURN
Scott Baker6cf525a2019-05-09 12:25:08 -070078
Zack Williamsf354d5c2019-05-20 16:56:45 -070079# Release related items
80# Generates binaries in $RELEASE_DIR with name $RELEASE_NAME-$RELEASE_OS_ARCH
81# Inspired by: https://github.com/kubernetes/minikube/releases
82RELEASE_DIR ?= release
83RELEASE_NAME ?= cordctl
Zack Williamsd5cf75a2019-07-08 08:02:54 -070084RELEASE_OS_ARCH ?= linux-amd64 linux-arm64 windows-amd64 darwin-amd64
Zack Williamsf354d5c2019-05-20 16:56:45 -070085RELEASE_BINS := $(foreach rel,$(RELEASE_OS_ARCH),$(RELEASE_DIR)/$(RELEASE_NAME)-$(rel))
86
87# Functions to extract the OS/ARCH
88rel_os = $(word 2, $(subst -, ,$(notdir $@)))
89rel_arch = $(word 3, $(subst -, ,$(notdir $@)))
90
91$(RELEASE_BINS): dependencies
Matteo Scandolo722930f2019-05-21 15:55:31 -070092 export GOOS=$(rel_os) ;\
93 export GOARCH=$(rel_arch) ;\
Scott Baker28a39562019-07-12 09:34:15 -070094 go build -v $(LDFLAGS) -o "$@" cmd/cordctl/cordctl.go
Zack Williamsf354d5c2019-05-20 16:56:45 -070095
96release: $(RELEASE_BINS)
97
Scott Baker6cf525a2019-05-09 12:25:08 -070098clean:
Zack Williamsf354d5c2019-05-20 16:56:45 -070099 rm -f cordctl $(RELEASE_BINS)
Scott Baker6cf525a2019-05-09 12:25:08 -0700100 rm -rf vendor
101 rm -f Gopkg.lock
Zack Williamsf354d5c2019-05-20 16:56:45 -0700102