-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathMakefile
133 lines (107 loc) · 4.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
GO ?= go
V ?=
PKGS = $(shell go list ./...)
PKGFILES = $(shell find . \( -path ./vendor -o -path ./Godeps \) -prune \
-o -type f -name '*.go' -print)
PKGFILES_notest = $(shell echo $(PKGFILES) | tr ' ' '\n' | grep -v _test.go)
GO_TEST_TOOLS = \
github.com/opennota/check/cmd/varcheck \
github.com/mendersoftware/deadcode
VERSION = $(shell git describe --tags --dirty --exact-match 2>/dev/null || git rev-parse --short HEAD)
GO_LDFLAGS = \
-ldflags "-X github.com/mendersoftware/mender-cli/cmd.Version=$(VERSION)"
ifeq ($(V),1)
BUILDV = -v
endif
TAGS =
ifeq ($(LOCAL),1)
TAGS += local
endif
ifneq ($(TAGS),)
BUILDTAGS = -tags '$(TAGS)'
endif
build:
CGO_ENABLED=0 $(GO) build $(GO_LDFLAGS) $(BUILDV) $(BUILDTAGS)
build-autocomplete-scripts: build
@./mender-cli --generate-autocomplete
build-multiplatform:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build $(GO_LDFLAGS) $(BUILDV) $(BUILDTAGS) \
-o mender-cli.linux.amd64
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 $(GO) build $(GO_LDFLAGS) $(BUILDV) $(BUILDTAGS) \
-o mender-cli.darwin.amd64
build-coverage:
CGO_ENABLED=0 $(GO) test -c -o mender-cli-test \
-coverpkg $(shell echo $(PKGS) | tr ' ' ',')
install:
CGO_ENABLED=0 $(GO) install $(GO_LDFLAGS) $(BUILDV) $(BUILDTAGS)
install-autocomplete-scripts: build-autocomplete-scripts
@echo "Installing Bash auto-complete script into ${DESTDIR}${PREFIX}/etc/bash_completion.d/"
@install -d ${DESTDIR}$(PREFIX)/etc/bash_completion.d/
@install -m 644 ./autocomplete/autocomplete.sh $(DESTDIR)$(PREFIX)/etc/bash_completion.d/
@if which zsh >/dev/null 2>&1 ; then \
echo "Installing zsh auto-complete script into ${DESTDIR}${PREFIX}/usr/local/share/zsh/site-functions/" && \
install -d $(DESTDIR)$(PREFIX)/usr/local/share/zsh/site-functions/ && \
install -m 644 ./autocomplete/autocomplete.zsh $(DESTDIR)$(PREFIX)/usr/local/share/zsh/site-functions/_mender-cli \
; fi
clean:
$(GO) clean
rm -f coverage.txt coverage-tmp.txt
get-go-tools:
set -e ; for t in $(GO_TEST_TOOLS); do \
echo "-- go getting $$t"; \
GO111MODULE=off go get -u $$t; \
done
get-build-deps:
apt-get update -qq
apt-get install -yyq $(shell cat deb-requirements.txt)
get-deps: get-go-tools get-build-deps
test-unit:
$(GO) test $(BUILDV) $(PKGS)
build-acceptance-tools:
# set PROJECT_DIR="$(pwd)" for local builds
@if [ -z ${PROJECT_DIR} ]; then\
echo "aborting: PROJECT_DIR not set";\
exit 1;\
fi
wget -q -O ${PROJECT_DIR}/mender-artifact https://downloads.mender.io/mender-artifact/master/linux/mender-artifact
chmod +x ${PROJECT_DIR}/mender-artifact
build-acceptance-image:
docker build -t testing -f tests/Dockerfile .
build-acceptance: build-acceptance-tools build-acceptance-image
run-acceptance:
# set e.g. SHARED_PATH="$(pwd)/shared" for local builds
@if [ -z ${SHARED_PATH} ]; then\
echo "aborting: SHARED_PATH not set";\
exit 1;\
fi
mkdir -p ${SHARED_PATH}
cp -r mender-artifact mender-cli mender-cli-test tests/* ${SHARED_PATH}
git clone -b master https://github.com/mendersoftware/integration.git ${SHARED_PATH}/integration
# this is basically https://github.com/mendersoftware/integration/blob/master/tests/run.sh#L51
# to allow the tests to be run, as the composition is now generated during test image build
sed -e '/9000:9000/d' -e '/8080:8080/d' -e '/80:80/d' -e '/443:443/d' -e '/ports:/d' ${SHARED_PATH}/integration/docker-compose.demo.yml > ${SHARED_PATH}/integration/docker-compose.testing.yml
sed -e 's/DOWNLOAD_SPEED/#DOWNLOAD_SPEED/' -i ${SHARED_PATH}/integration/docker-compose.testing.yml
sed -e 's/ALLOWED_HOSTS:\ .*/ALLOWED_HOSTS:\ _/' -i ${SHARED_PATH}/integration/docker-compose.testing.yml
TESTS_DIR=${SHARED_PATH} ${SHARED_PATH}/integration/extra/travis-testing/run-test-environment acceptance ${SHARED_PATH}/integration ${SHARED_PATH}/docker-compose.acceptance.yml ;
test-static:
echo "-- checking for dead code"
deadcode -ignore version.go:Version
echo "-- checking with varcheck"
varcheck .
cover: coverage
$(GO) tool cover -func=coverage.txt
htmlcover: coverage
$(GO) tool cover -html=coverage.txt
coverage:
rm -f coverage.txt
echo 'mode: set' > coverage.txt
set -e ; for p in $(PKGS); do \
rm -f coverage-tmp.txt; \
$(GO) test -coverprofile=coverage-tmp.txt $$p ; \
if [ -f coverage-tmp.txt ]; then \
cat coverage-tmp.txt | grep -v 'mode:' >> coverage.txt || /bin/true; \
fi; \
done
rm -f coverage-tmp.txt
.PHONY: build clean get-go-tools get-apt-deps get-deps test check \
cover htmlcover coverage