forked from canonical/cloud-init
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
171 lines (133 loc) · 4.78 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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
CWD=$(shell pwd)
VARIANT ?= ubuntu
YAML_FILES=$(shell find cloudinit tests tools -name "*.yaml" -type f )
YAML_FILES+=$(shell find doc/examples -name "cloud-config*.txt" -type f )
PYTHON = python3
PIP_INSTALL := pip3 install
NUM_ITER ?= 100
ifeq ($(distro),)
distro = redhat
endif
READ_VERSION=$(shell $(PYTHON) $(CWD)/tools/read-version || echo read-version-failed)
CODE_VERSION=$(shell $(PYTHON) -c "from cloudinit import version; print(version.version_string())")
GENERATOR_F=./systemd/cloud-init-generator
DS_IDENTIFY=./tools/ds-identify
BENCHMARK=./tools/benchmark.sh
all: check
check: check_version test yaml
style-check: flake8
flake8:
@$(CWD)/tools/run-flake8
unittest: clean_pyc
python3 -m pytest -v tests/unittests cloudinit
render-template:
$(PYTHON) ./tools/render-cloudcfg --variant=$(VARIANT) $(FILE) $(subst .tmpl,,$(FILE))
# from systemd-generator(7) regarding generators:
# "We do recommend C code however, since generators are executed
# synchronously and hence delay the entire boot if they are slow."
#
# Our generator is a shell script. Make it easy to measure the
# generator. This should be monitored for performance regressions
benchmark-generator: FILE=$(GENERATOR_F).tmpl
benchmark-generator: export ITER=$(NUM_ITER)
benchmark-generator: render-template
$(BENCHMARK) $(GENERATOR_F)
benchmark-ds-identify: export ITER=$(NUM_ITER)
benchmark-ds-identify:
$(BENCHMARK) $(DS_IDENTIFY)
ci-deps-ubuntu:
@$(PYTHON) $(CWD)/tools/read-dependencies --distro ubuntu --test-distro
ci-deps-centos:
@$(PYTHON) $(CWD)/tools/read-dependencies --distro centos --test-distro
pip-requirements:
@echo "Installing cloud-init dependencies..."
$(PIP_INSTALL) -r "[email protected]" -q
pip-test-requirements:
@echo "Installing cloud-init test dependencies..."
$(PIP_INSTALL) -r "[email protected]" -q
test: unittest
check_version:
@if [ "$(READ_VERSION)" != "$(CODE_VERSION)" ]; then \
echo "Error: read-version version '$(READ_VERSION)'" \
"not equal to code version '$(CODE_VERSION)'"; \
exit 2; \
else true; fi
config/cloud.cfg:
$(PYTHON) ./tools/render-cloudcfg config/cloud.cfg.tmpl config/cloud.cfg
clean_pyc:
@find . -type f -name "*.pyc" -delete
@find . -type d -name __pycache__ -delete
clean_pytest:
rm -rf .cache htmlcov
clean_packaging:
rm -rf srpm cloud_init.egg-info/ \
cloud-init-*.tar.gz \
cloud-init-*.tar.gz.asc \
cloud-init.dsc \
cloud-init_*.build \
cloud-init_*.buildinfo \
cloud-init_*.changes \
cloud-init_*.deb \
cloud-init_*.dsc \
cloud-init_*.orig.tar.gz \
cloud-init_*.tar.xz \
cloud-init_*.upload
clean_release:
rm -rf new-upstream-changes.txt commit.msg
clean: clean_pyc clean_pytest clean_packaging clean_release
rm -rf doc/rtd_html .tox .coverage tags $(GENERATOR_F)
yaml:
@$(PYTHON) $(CWD)/tools/validate-yaml.py $(YAML_FILES)
rpm:
$(PYTHON) ./packages/brpm --distro=$(distro)
srpm:
$(PYTHON) ./packages/brpm --srpm --distro=$(distro)
deb:
@which debuild || \
{ echo "Missing devscripts dependency. Install with:"; \
echo sudo apt-get install devscripts; exit 1; }
$(PYTHON) ./packages/bddeb
deb-src:
@which debuild || \
{ echo "Missing devscripts dependency. Install with:"; \
echo sudo apt-get install devscripts; exit 1; }
$(PYTHON) ./packages/bddeb -S -d
doc:
tox -e doc
# Spell check && filter false positives
_CHECK_SPELLING := find doc -type f -exec spellintian {} + | \
grep -v -e 'doc/rtd/topics/cli.rst: modules modules' \
-e 'doc/examples/cloud-config-mcollective.txt: WARNING WARNING' \
-e 'doc/examples/cloud-config-power-state.txt: Bye Bye' \
-e 'doc/examples/cloud-config.txt: Bye Bye'
# For CI we require a failing return code when spellintian finds spelling errors
check_spelling:
@! $(_CHECK_SPELLING)
# Manipulate the output of spellintian into a valid "sed" command which is run
# to fix the error
#
# Example spellintian output:
#
# doc/examples/kernel-cmdline.txt: everthing -> everything
#
# The "fix_spelling" target manipulates the above output into the following command
# and runs that command.
#
# sed -i "s/everthing/everything/g" doc/examples/kernel-cmdline.txt
#
# awk notes:
#
# -F ': | -> ' means use the strings ": " or " -> " as field delimeters
# \046 is octal for double quote
# $$2 will contain the second field, ($ must be escaped because this is in a Makefile)
#
# Limitation: duplicate words with newline between them are not automatically fixed
fix_spelling:
@$(_CHECK_SPELLING) | \
sed 's/ (duplicate word)//g' | \
awk -F ': | -> ' '{printf "sed -i \047s/%s/%s/g\047 %s\n", $$2, $$3, $$1}' | \
sh
.PHONY: all check test flake8 clean rpm srpm deb deb-src yaml
.PHONY: check_version pip-test-requirements pip-requirements clean_pyc
.PHONY: unittest style-check fix_spelling render-template benchmark-generator
.PHONY: clean_pytest clean_packaging check_spelling clean_release doc