forked from cloudnativelabs/kube-router
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
145 lines (124 loc) · 5.41 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
NAME?=kube-router
DEV_SUFFIX?=-git
LOCAL_PACKAGES?=app app/controllers app/options app/watchers
IMG_NAMESPACE?=cloudnativelabs
GIT_COMMIT=$(shell git describe --tags --dirty)
GIT_BRANCH?=$(shell git rev-parse --abbrev-ref HEAD)
IMG_TAG?=$(if $(IMG_TAG_PREFIX),$(IMG_TAG_PREFIX)-)$(GIT_BRANCH)
RELEASE_TAG?=$(shell build/get-git-tag.sh)
REGISTRY?=$(if $(IMG_FQDN),$(IMG_FQDN)/$(IMG_NAMESPACE)/$(NAME),$(IMG_NAMESPACE)/$(NAME))
REGISTRY_DEV?=$(REGISTRY)$(DEV_SUFFIX)
IN_DOCKER_GROUP=$(filter docker,$(shell groups))
IS_ROOT=$(filter 0,$(shell id -u))
DOCKER=$(if $(or $(IN_DOCKER_GROUP),$(IS_ROOT)),docker,sudo docker)
MAKEFILE_DIR=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
UPSTREAM_IMPORT_PATH=$(GOPATH)/src/github.com/cloudnativelabs/kube-router/
all: test kube-router container ## Default target. Runs tests, builds binaries and images.
kube-router: $(shell find . -name \*.go) ## Builds kube-router.
@echo Starting kube-router binary build.
CGO_ENABLED=0 go build -o kube-router kube-router.go
@echo Finished kube-router binary build.
test: gofmt ## Runs code quality pipelines (gofmt, tests, coverage, lint, etc)
run: kube-router ## Runs "kube-router --help".
./kube-router --help
container: kube-router gobgp ## Builds a Docker container image.
@echo Starting kube-router container image build.
$(DOCKER) build -t "$(REGISTRY_DEV):$(IMG_TAG)" .
@if [ "$(GIT_BRANCH)" = "master" ]; then \
$(DOCKER) tag "$(REGISTRY_DEV):$(IMG_TAG)" "$(REGISTRY_DEV)"; \
fi
@echo Finished kube-router container image build.
docker-login: ## Logs into a docker registry using {DOCKER,QUAY}_{USERNAME,PASSWORD} variables.
@echo Starting docker login target.
@if [ -n "$(DOCKER_USERNAME)" ] && [ -n "$(DOCKER_PASSWORD)" ]; then \
echo Starting DockerHub registry login.; \
$(DOCKER) login -u="$(value DOCKER_USERNAME)" -p="$(value DOCKER_PASSWORD)"; \
echo Finished DockerHub registry login.; \
fi
@if [ -n "$(QUAY_USERNAME)" ] && [ -n "$(QUAY_PASSWORD)" ]; then \
echo Starting quay.io registry login.; \
$(DOCKER) login -u="$(value QUAY_USERNAME)" -p="$(value QUAY_PASSWORD)" quay.io; \
echo Finished quay.io registry login.; \
fi
@echo Finished docker login target.
push: container docker-login ## Pushes a Docker container image to a registry.
@echo Starting kube-router container image push.
$(DOCKER) push "$(REGISTRY_DEV)"
@echo Finished kube-router container image push.
push-release: push
@echo Starting kube-router release container image push.
@test -n "$(RELEASE_TAG)"
$(DOCKER) tag "$(REGISTRY_DEV):$(IMG_TAG)" "$(REGISTRY):$(RELEASE_TAG)"
$(DOCKER) tag "$(REGISTRY):$(RELEASE_TAG)" "$(REGISTRY):latest"
$(DOCKER) push "$(REGISTRY)"
@echo Finished kube-router release container image push.
github-release: kube-router
@echo Starting kube-router GitHub release creation.
@[ -n "$(value GITHUB_TOKEN)" ] && \
GITHUB_TOKEN=$(value GITHUB_TOKEN); \
curl -sL https://git.io/goreleaser | bash
@echo Finished kube-router GitHub release creation.
release: push-release github-release ## Pushes a release to DockerHub and GitHub
@echo Finished kube-router release target.
clean: ## Removes the kube-router binary and Docker images
rm -f kube-router
$(DOCKER) rmi $(REGISTRY_DEV)
$(DOCKER) rmi $(REGISTRY)
gofmt: ## Tells you what files need to be gofmt'd.
@build/verify-gofmt.sh
gofmt-fix: ## Fixes files that need to be gofmt'd.
gofmt -s -w $(LOCAL_PACKAGES)
gopath: ## Warns about issues building from a directory that does not match upstream.
@echo 'Checking project path for import issues...'
@echo '- Project dir: $(MAKEFILE_DIR)'
@echo '- Import dir: $(UPSTREAM_IMPORT_PATH)'
@echo
ifeq ($(MAKEFILE_DIR),$(UPSTREAM_IMPORT_PATH))
@echo 'Looks good!'
else
@echo 'The project directory does not match $(UPSTREAM_IMPORT_PATH)'
@echo
@echo 'This could cause build issues. Consider moving this project'
@echo 'directory to $(UPSTREAM_IMPORT_PATH) and work from there.'
@echo 'This could be done for you by running: "make gopath-fix".'
@echo
endif
# This fixes GOPATH issues for contributers using their own Travis-CI account
# with their forked kube-router repo. It's also useful for contributors testing
# code and CI changes with their own Travis account.
gopath-fix: ## Copies this project directory to the upstream import path.
ifneq ($(wildcard $(UPSTREAM_IMPORT_PATH)/.*),)
@echo
@echo '$(UPSTREAM_IMPORT_PATH) already exists.'
@echo 'Aborting gopath-fix.'
@echo
else
@echo
@echo 'Copying $(MAKEFILE_DIR) to $(UPSTREAM_IMPORT_PATH)'
@echo
mkdir -p "$(UPSTREAM_IMPORT_PATH)"
cp -ar $(MAKEFILE_DIR)/. "$(UPSTREAM_IMPORT_PATH)"
@echo
@echo 'Success! Please use $(UPSTREAM_IMPORT_PATH)'
@echo
endif
gobgp:
$(DOCKER) run -v $(PWD):/pwd golang:alpine \
sh -c ' \
apk add -U git && \
CGO_ENABLED=0 go get github.com/osrg/gobgp/gobgp && \
cp /go/bin/gobgp /pwd'
# http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
# TODO: Uncomment this target when all deps are version-pinned in glide.yaml
# update-glide:
# # go get -d -u github.com/Masterminds/glide
# glide update --strip-vendor
# # go get -d -u github.com/sgotti/glide-vc
# glide vc --only-code --no-tests
.PHONY: build clean container run release goreleaser push gofmt gofmt-fix
.PHONY: update-glide test docker-login push-release github-release help
.PHONY: gopath gopath-fix
.DEFAULT: all