-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
136 lines (102 loc) · 3.73 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
# (c) Copyright 2018-2019 Hewlett Packard Enterprise Development LP
include project-name.mk
# Makes a recipe passed to a single invocation of the shell.
.ONESHELL:
MAKE_SOURCES:=makefile.mk project-name.mk Makefile
PROJECT_SOURCES:=$(shell find ./pkg -regex '.*.\.\(go\|json\)$$')
BUILD_DIR:=build/
GLIDE_CACHE_DIR:=cache/
GLIDE_VENDOR_DIR:=vendor/
export VERSION?=latest
GO_CHECK_PACKAGES:=$(shell [ -d '${CURDIR}/pkg' ] && \
find '${CURDIR}/pkg' \
-type f -name '*.go' \
-printf '%h\n' | sort --uniq)
ALL_SHELL_DIRS:=$(shell [ -d '${CURDIR}' ] && \
find '${CURDIR}' \
-type f -name '*.sh' \
-a -not -path '${CURDIR}/vendor/*' \
-a -not -path '${CURDIR}/cache/*' \
-printf '%h\n' | sort --uniq)
BUILDER_ARTIFACT:=${BUILD_DIR}${PROJECT}-builder-${VERSION}-docker.tar
GLIDE_CACHE_ARTIFACT:=${GLIDE_CACHE_DIR}._glide
GLIDE_VENDOR_ARTIFACT:=${GLIDE_VENDOR_DIR}._glide
GO_DOCS_ARTIFACTS:=$(shell echo $(subst $() $(),\\n,$(GO_CHECK_PACKAGES)) | \
sed 's:\(.*[/\]\)\(.*\):\1\2/\2.md:')
YELLOW:=\033[0;33m
GREEN:=\033[0;32m
NC:=\033[0m
# Targets that do not represent filenames need to be registered as phony or
# Make won't always rebuild them.
.PHONY: all check build clean ci-check clean-godocs _godocs-build godocs \
clean-glide glide glide-update clean-${PROJECT}-check ${PROJECT}-check \
clean-shellcheck shellcheck docker-builder
# Stop prints each line of the recipe.
.SILENT:
# Allow secondary expansion of explicit rules.
.SECONDEXPANSION: %.md %-docker.tar
all: check docker-builder
check: shellcheck
build: ${PROJECT}-check godocs
clean: clean-godocs clean-${PROJECT}-check clean-glide clean-docker-builder \
clean-shellcheck clean-${BUILD_DIR}
ci-check: all
clean-${BUILD_DIR}:
rm -rf ${BUILD_DIR}
${BUILD_DIR}:
mkdir -p $@
clean-godocs:
rm -f ${GO_DOCS_ARTIFACTS}
godocs:
$(MAKE) --no-print-directory _godocs-build
_godocs-build: ${GO_DOCS_ARTIFACTS}
%.md: $$(wildcard $$(dir $$@)*.go)
echo "${YELLOW}Running godocdown: $@${NC}" && \
godocdown -output $@ $(shell dirname $@)
clean-glide:
rm -rf ${GLIDE_VENDOR_DIR} ${GLIDE_CACHE_DIR}
glide.yaml:
rm -rf ${GLIDE_VENDOR_DIR} ${GLIDE_CACHE_DIR} && \
glide --home ${CURDIR} create --non-interactive
glide: glide.lock
glide.lock: ${GLIDE_CACHE_ARTIFACT} ${GLIDE_VENDOR_ARTIFACT}
%._glide: glide.yaml
rm -rf ${GLIDE_VENDOR_DIR} && \
glide --home ${CURDIR} install --strip-vendor && \
touch ${GLIDE_CACHE_ARTIFACT} ${GLIDE_VENDOR_ARTIFACT}
glide-update: glide.yaml ${PROJECT_SOURCES}
rm -rf ${GLIDE_VENDOR_DIR} ${GLIDE_CACHE_DIR} && \
glide --home ${CURDIR} update --strip-vendor && \
touch ${GLIDE_CACHE_ARTIFACT} ${GLIDE_VENDOR_ARTIFACT}
clean-${PROJECT}-check:
$(foreach target,${GO_CHECK_PACKAGES}, \
$(MAKE) -C ${target} \
--makefile=${CURDIR}/makefile.mk clean-coverage clean-lint || exit;)
${PROJECT}-check: glide.lock
$(foreach target,${GO_CHECK_PACKAGES}, \
$(MAKE) -C ${target} \
--makefile=${CURDIR}/makefile.mk lint coverage || exit;)
clean-shellcheck:
$(foreach target,${ALL_SHELL_DIRS}, \
$(MAKE) -C ${target} \
--makefile=${CURDIR}/makefile.mk clean-docker-shellcheck || exit;)
shellcheck:
$(foreach target,${ALL_SHELL_DIRS}, \
$(MAKE) -C ${target} \
--makefile=${CURDIR}/makefile.mk docker-shellcheck || exit;)
clean-docker-builder:
rm -f ${BUILDER_ARTIFACT}
docker-builder: DOCKER_SOURCES=Dockerfile ${MAKE_SOURCES} ${PROJECT_SOURCES}
docker-builder: DOCKER_BUILD_OPTIONS=--target builder --build-arg VERSION
docker-builder: TAG=${ORG}/${PROJECT}-builder:${VERSION}
docker-builder: ${BUILD_DIR} ${BUILDER_ARTIFACT}
%-docker.tar: $${DOCKER_SOURCES}
docker build --rm --pull=true \
${DOCKER_BUILD_OPTIONS} \
--build-arg http_proxy \
--build-arg https_proxy \
--build-arg no_proxy \
--tag ${TAG} \
--file $< \
. && \
docker save --output $@ ${TAG}