summaryrefslogtreecommitdiff
path: root/Makefile
blob: cf9eaf3356ae9bdda9966512e6f5cebedbb65ecb (plain)
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# Copyright 2017 AT&T Intellectual Property.  All other rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

BUILD_DIR       := $(shell mkdir -p build && mktemp -d -p build)
DOCKER_REGISTRY ?= quay.io
IMAGE_NAME      ?= drydock
IMAGE_PREFIX    ?= airshipit
IMAGE_TAG       ?= dev
HELM            := $(shell realpath $(BUILD_DIR))/helm
PROXY           ?= http://proxy.foo.com:8000
NO_PROXY        ?= localhost,127.0.0.1,.svc.cluster.local
USE_PROXY       ?= false
PUSH_IMAGE      ?= false
# use this variable for image labels added in internal build process
LABEL           ?= org.airshipit.build=community
COMMIT          ?= $(shell git rev-parse HEAD)
IMAGE           ?= ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG}
GO_BUILDER      ?= docker.io/golang:1.10-stretch

export

# Build all docker images for this project
.PHONY: images
images: build_drydock

# Run an image locally and exercise simple tests
.PHONY: run_images
run_images: run_drydock

# Run tests
.PHONY: tests
tests: pep8 security docs unit_tests test_baclient

# Install external (not managed by tox/pip) dependencies
external_dep: requirements-host.txt requirements-host-test.txt
	sudo ./hostdeps.sh
	touch external_dep

# Run unit and Postgres integration tests in coverage mode
.PHONY: coverage_test
coverage_test: build_drydock
	tox -re cover

# Run just unit tests
.PHONY: unit_tests
unit_tests: external_dep
	tox -re py35 $(TESTS)

# Run just DB integration tests
.PHONY: db_integration_tests
db_integration_tests: external_dep
	tox -re integration $(TESTS)

# Freeze full set of Python requirements
.PHONY: req_freeze
req_freeze:
	tox -re freeze

# Run the drydock container and exercise simple tests
.PHONY: run_drydock
run_drydock: build_drydock
	tools/drydock_image_run.sh

# It seems CICD expects the target 'drydock' to
# build the chart
.PHONY: drydock
drydock: charts

# Create tgz of the chart
.PHONY: charts
charts: helm-init
	$(HELM) dep up charts/drydock
	$(HELM) package charts/drydock

# Perform Linting
.PHONY: lint
lint: pep8 helm_lint

# Dry run templating of chart
.PHONY: dry-run
dry-run: helm-init
	$(HELM) template --set manifests.secret_ssh_key=true --set conf.ssh.private_key=foo charts/drydock

# Initialize local helm config
.PHONY: helm-init
helm-init: helm-install
	tools/helm_tk.sh $(HELM)

# Install helm binary
.PHONY: helm-install
helm-install:
	tools/helm_install.sh $(HELM)

# Make targets intended for use by the primary targets above.

.PHONY: build_drydock
build_drydock: external_dep build_baclient
	export; tools/drydock_image_build.sh
ifeq ($(PUSH_IMAGE), true)
	docker push $(IMAGE)
endif

# Make target for building bootaction signal client
.PHONY: build_baclient
build_baclient: external_dep
	docker run -tv $(shell realpath go):/work -v $(shell realpath $(BUILD_DIR)):/build -e GOPATH=/work $(GO_BUILDER)  go build -o /build/baclient baclient

# Make target for testing bootaction signal client
.PHONY: test_baclient
test_baclient: external_dep
	docker run -tv $(shell realpath go):/work -e GOPATH=/work $(GO_BUILDER)  go test -v baclient

.PHONY: docs
docs: clean drydock_docs

.PHONY: security
security: external_dep
	tox -e bandit

.PHONY: drydock_docs
drydock_docs: external_dep render_diagrams genpolicy genconfig
	tox -e docs

.PHONY: render_diagrams
render_diagrams:
	plantuml -v -tpng -o ../source/images docs/diagrams/*.uml

.PHONY: genpolicy
genpolicy:
	tox -e genpolicy

.PHONY: genconfig
genconfig:
	tox -e genconfig

.PHONY: clean
clean:
	rm -rf build
	rm -rf docs/build
	rm -rf charts/drydock/charts
	rm -rf charts/drydock/requirements.lock

.PHONY: pep8
pep8: external_dep
	tox -e pep8

.PHONY: helm_lint
helm_lint: helm-init
	$(HELM) lint charts/drydock