File: Makefile

package info (click to toggle)
custodia 0.6.0-5.2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 880 kB
  • sloc: python: 6,074; makefile: 317; sh: 62
file content (195 lines) | stat: -rw-r--r-- 5,924 bytes parent folder | download | duplicates (2)
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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
CONF := custodia.conf
PREFIX := /usr
PYTHON := python3
TOX := $(PYTHON) -m tox --sitepackages
DOCS_DIR = docs
SERVER_SOCKET = $(CURDIR)/server_socket
QUICK_GUIDE = docs/source/quick
QUICK_SOCKET = $(QUICK_GUIDE)/quick

RPMBUILD = $(CURDIR)/dist/rpmbuild

VERSION ?= $(shell $(PYTHON) setup.py --quiet version)

DOCKER_CMD = docker
DOCKER_IMAGE = latchset/custodia
DOCKER_RELEASE_ARGS = --no-cache=true --pull=true

CONTAINER_NAME = custodia_container
CONTAINER_VOL = $(CURDIR)/vol
CONTAINER_SOCKET = $(CONTAINER_VOL)/run/sock
CONTAINER_CLI = $(CONTAINER_VOL)/custodia-cli

# helper script for demo
define CUSTODIA_CLI_SCRIPT
#!/bin/sh
set -e
PYTHONPATH=$(CURDIR)/src $(PYTHON) -Wignore -m custodia.cli \
    --server $(CONTAINER_SOCKET) $$@
endef
export CUSTODIA_CLI_SCRIPT


.NOTPARALLEL:
.PHONY: all clean clean_socket cscope docs lint pep8 test

all: clean_socket lint pep8 test docs
	echo "All tests passed"

clean_socket:
	rm -f $(SERVER_SOCKET) $(CONTAINER_SOCKET) $(QUICK_SOCKET)

clean_coverage:
	rm -f .coverage .coverage.*

lint: clean_socket
	$(TOX) -e lint

pep8: clean_socket
	$(TOX) -e pep8py2
	$(TOX) -e pep8py3

clean: clean_socket clean_coverage
	rm -fr build dist *.egg-info .tox MANIFEST .cache
	rm -f custodia.audit.log secrets.db
	rm -rf docs/build
	find ./ -name '*.py[co]' -exec rm -f {} \;
	find ./ -depth -name __pycache__ -exec rm -rf {} \;
	rm -rf tests/tmp
	rm -rf vol
	rm -f $(QUICK_GUIDE)/quick.audit.log \
	    $(QUICK_GUIDE)/quick.db \
	    $(QUICK_GUIDE)/quick.key

cscope:
	git ls-files | xargs pycscope

test: clean_socket clean_coverage
	$(TOX) --skip-missing-interpreters -e py27-extra,py27-noextra
	$(TOX) --skip-missing-interpreters -e py35-extra,py35-noextra
	$(TOX) --skip-missing-interpreters -e py36-extra,py36-noextra
	$(TOX) --skip-missing-interpreters -e doc
	$(TOX) -e coverage-report

README: README.md
	echo -e '.. WARNING: AUTO-GENERATED FILE. DO NOT EDIT.\n' > $@
	pandoc --from=markdown --to=rst $< >> $@

$(DOCS_DIR)/source/readme.rst: README
	grep -ve '^|Build Status|' < $< | grep -v travis-ci.org > $@

docs: $(DOCS_DIR)/source/readme.rst
	sort $(DOCS_DIR)/source/spelling_wordlist.txt > \
	    $(DOCS_DIR)/source/spelling_wordlist.txt.bak
	mv $(DOCS_DIR)/source/spelling_wordlist.txt.bak \
	    $(DOCS_DIR)/source/spelling_wordlist.txt
	PYTHONPATH=$(CURDIR)/src \
	    $(MAKE) -C $(DOCS_DIR) html SPHINXBUILD="$(PYTHON) -m sphinx"

.PHONY: install egg_info run quickrun packages release releasecheck
install: clean_socket egg_info
	$(PYTHON) setup.py install --root "$(PREFIX)"
	install -d "$(PREFIX)/share/man/man7"
	install -t "$(PREFIX)/share/man/man7" man/custodia.7
	install -d "$(PREFIX)/share/doc/custodia/examples"
	install -t "$(PREFIX)/share/doc/custodia" LICENSE README API.md
	install -t "$(PREFIX)/share/doc/custodia/examples" custodia.conf

egg_info:
	$(PYTHON) setup.py egg_info

packages: egg_info README
	$(PYTHON) setup.py packages
	cd dist && for F in *.gz; do sha512sum $${F} > $${F}.sha512sum.txt; done

release: clean
	@echo "dnf install python3-wheel python3-twine"
	$(MAKE) packages
	@echo -e "\nCustodia release"
	@echo -e "----------------\n"
	@echo "* Upload all release files to github:"
	@echo "  $$(find dist -type f -printf '%p ')"
	@echo "* Upload source dist and wheel to PyPI:"
	@echo "  twine-3 upload dist/*.gz dist/*.whl"

releasecheck: clean
	@ # ensure README is rebuild
	touch README.md
	$(MAKE) README $(DOCS_DIR)/source/readme.rst
	@ # check for version in spec
	grep -q 'version $(VERSION)' custodia.spec || exit 1
	@ # re-run tox
	tox -r
	$(MAKE) packages
	$(MAKE) rpm
	$(MAKE) dockerbuild

run: egg_info
	$(PYTHON) $(CURDIR)/bin/custodia $(CONF)

quickrun: egg_info
	@ # sed -n -e 's/.*\$$ \(alias\|curl\)/\1/p' docs/source/quick.rst
	@ # sed 's,./quick,$(QUICK_SOCKET),g'
	$(PYTHON) bin/custodia $(QUICK_GUIDE)/quick.conf

.PHONY: rpmroot rpmfiles rpm
rpmroot:
	mkdir -p $(RPMBUILD)/BUILD
	mkdir -p $(RPMBUILD)/RPMS
	mkdir -p $(RPMBUILD)/SOURCES
	mkdir -p $(RPMBUILD)/SPECS
	mkdir -p $(RPMBUILD)/SRPMS

rpmfiles: rpmroot packages
	mv dist/custodia-$(VERSION).tar.gz* $(RPMBUILD)/SOURCES
	cp contrib/config/custodia/custodia.conf $(RPMBUILD)/SOURCES/
	cp contrib/config/systemd/system/custodia@.service $(RPMBUILD)/SOURCES/
	cp contrib/config/systemd/system/custodia@.socket $(RPMBUILD)/SOURCES/
	cp contrib/config/tmpfiles.d/custodia.conf $(RPMBUILD)/SOURCES/custodia.tmpfiles.conf

rpm: clean rpmfiles egg_info
	rpmbuild \
	    --define "_topdir $(RPMBUILD)" \
	    --define "version $(VERSION)" \
	    -ba custodia.spec
	echo "$(RPMBUILD)/RPMS"


.PHONY: dockerbuild dockerdemo dockerdemoinit dockershell dockerreleasebuild
dockerbuild:
	rm -f dist/custodia*.whl
	$(PYTHON) setup.py bdist_wheel
	$(DOCKER_CMD) build $(DOCKER_BUILD_ARGS) \
		-f contrib/docker/Dockerfile \
		-t $(DOCKER_IMAGE) .

dockerdemo: dockerbuild
	@mkdir -p -m755 $(CONTAINER_VOL)/lib $(CONTAINER_VOL)/log $(CONTAINER_VOL)/run
	@echo "$$CUSTODIA_CLI_SCRIPT" > $(CONTAINER_CLI)
	@chmod 755 $(CONTAINER_CLI)
	@echo "Custodia CLI: $(CONTAINER_CLI)"

	@$(DOCKER_CMD) rm $(CONTAINER_NAME) >/dev/null 2>&1|| true
	$(DOCKER_CMD) run \
	    --name $(CONTAINER_NAME) \
	    --user $(shell id -u):$(shell id -g) \
	    -e CREDS_UID=$(shell id -u) -e CREDS_GID=$(shell id -g) \
	    -v $(CONTAINER_VOL)/lib:/var/lib/custodia:Z \
	    -v $(CONTAINER_VOL)/log:/var/log/custodia:Z \
	    -v $(CONTAINER_VOL)/run:/var/run/custodia:Z \
	    $(DOCKER_IMAGE):latest \
	    /usr/bin/custodia /etc/custodia/demo.conf

dockerdemoinit:
	$(CONTAINER_VOL)/custodia-cli mkdir /container
	$(CONTAINER_VOL)/custodia-cli set /container/key value
	$(CONTAINER_VOL)/custodia-cli get /container/key

dockershell:
	$(DOCKER_CMD) exec -ti $(CONTAINER_NAME) /bin/bash

dockerreleasebuild:
	$(MAKE) dockerbuild \
	    DOCKER_BUILD_ARGS="$(DOCKER_RELEASE_ARGS)" \
	    DOCKER_IMAGE="$(DOCKER_IMAGE):$(VERSION)" && \
	echo -e "\n\nRun: $(DOCKER_CMD) push $(DOCKER_IMAGE):$(VERSION)"