### Makefile for wormhole

# Ensure GOPATH is set before running build process.
ifeq "$(GOPATH)" ""
        $(error Please set the environment variable GOPATH before running `make`)
endif

GO	  := GO15VENDOREXPERIMENT="1" go
GOBUILD   :=  CGO_ENABLED=0 $(GO) build
GOTEST    :=  CGO_ENABLED=1 $(GO) test
GOBUILD_LINUX   :=  CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build

PACKAGES := $$(go list ./...| grep -vE 'vendor')

FILES     := $$(find . -name "*.go" | grep -vE "vendor")
GOFILTER := grep -vE 'vendor|render.Delims|bindata_assetfs|testutil|whpb|asset'
GOCHECKER := $(GOFILTER) | awk '{ print } END { if (NR > 0) { exit 1 } }'

LDFLAGS += -X "github.com/pingcap/wormhole/pkg/util.BuildTS=$(shell date -u '+%Y-%m-%d %I:%M:%S')"
LDFLAGS += -X "github.com/pingcap/wormhole/pkg/util.GitHash=$(shell git rev-parse HEAD)"

DOCKER_REGISTRY := uhub.ucloud.cn

default: build

dev: fe build

circleci: build check test	

all: proto build check test

build: portal stargate ether

build_linux: portal_linux stargate_linux ether_linux

proto:
	sh generate-proto.sh

portal:
	$(GOBUILD) -ldflags '$(LDFLAGS)' -o bin/portal cmd/portal/main.go

stargate:
	$(GOBUILD) -ldflags '$(LDFLAGS)' -o bin/stargate cmd/stargate/main.go

ether:
	@test -s go-bindata || go get github.com/jteeuwen/go-bindata/... && go build -o go-bindata github.com/jteeuwen/go-bindata/go-bindata
	@./go-bindata -o asset/asset.go -pkg=asset -ignore admin-ui/build/\\.git -prefix admin-ui/build  admin-ui/build/...
	$(GOBUILD) -ldflags '$(LDFLAGS)' -o bin/ether cmd/ether/main.go

portal_linux:
	$(GOBUILD_LINUX) -ldflags '$(LDFLAGS)' -o bin/portal cmd/portal/main.go

stargate_linux:
	$(GOBUILD_LINUX) -ldflags '$(LDFLAGS)' -o bin/stargate cmd/stargate/main.go

ether_linux:
	@test -s go-bindata || go get github.com/jteeuwen/go-bindata/... && go build -o go-bindata github.com/jteeuwen/go-bindata/go-bindata
	@./go-bindata -o asset/asset.go -pkg=asset -ignore admin-ui/build/\\.git -prefix admin-ui/build  admin-ui/build/...
	$(GOBUILD_LINUX) -ldflags '$(LDFLAGS)' -o bin/ether cmd/ether/main.go

docker: build_linux 
	mkdir -p docker/bin && cp bin/{portal,stargate,ether} docker/bin/ 
	cd docker && docker build --tag "$(DOCKER_REGISTRY)"/pingcap/wormhole:latest .

test:
	@echo "test"
	$(GOTEST) --race $(PACKAGES)

check:
	go get github.com/golang/lint/golint
	@echo "vet"
	@ go tool vet -all -shadow . 2>&1 | $(GOCHECKER)
	@echo "golint"
	@ golint ./... 2>&1 | $(GOCHECKER)
	@echo "gofmt"
	@ gofmt -s -l -w $(FILES) . 2>&1 | $(GOCHECKER)

update:
	go get -u github.com/golang/dep/cmd/dep
ifdef PKG
	dep ensure ${PKG}
else
	dep ensure -update
endif
	dep prune

clean:
	$(GO) clean -i ./...

fe:
	@rm -rf admin-ui/build && git clone -b release-frontend --single-branch  git@github.com:pingcap/wormhole.git admin-ui/build

.PHONY: default dev all circleci build build_linux proto portal stargate ether portal_linux stargate_linux ether_linux docker test check update clean fe
