2019-02-25 17:32:34 -05:00
|
|
|
PYTESTS = $(wildcard test/test_*.py)
|
2020-12-29 17:50:03 -05:00
|
|
|
IMAGE = yadm/testbed:2020-12-29
|
2019-02-25 17:32:34 -05:00
|
|
|
|
2017-09-04 12:56:33 -04:00
|
|
|
.PHONY: all
|
2019-02-25 17:32:34 -05:00
|
|
|
all:
|
|
|
|
@$(MAKE) usage | less
|
2015-07-16 20:38:17 -04:00
|
|
|
|
2019-02-25 17:32:34 -05:00
|
|
|
# Display usage for all make targets
|
|
|
|
.PHONY: usage
|
|
|
|
usage:
|
|
|
|
@echo
|
|
|
|
@echo 'make TARGET [option=value, ...]'
|
|
|
|
@echo
|
|
|
|
@echo 'TESTING'
|
|
|
|
@echo
|
|
|
|
@echo ' make test [testargs=ARGS]'
|
|
|
|
@echo ' - Run all tests. "testargs" can specify a single string of arguments'
|
|
|
|
@echo ' for py.test.'
|
|
|
|
@echo
|
|
|
|
@echo ' make <testfile>.py [testargs=ARGS]'
|
|
|
|
@echo ' - Run tests from a specific test file. "testargs" can specify a'
|
|
|
|
@echo ' single string of arguments for py.test.'
|
|
|
|
@echo
|
|
|
|
@echo ' make testhost [version=VERSION]'
|
|
|
|
@echo ' - Create an ephemeral container for doing adhoc yadm testing. The'
|
|
|
|
@echo ' HEAD revision of yadm will be used unless "version" is'
|
|
|
|
@echo ' specified. "version" can be set to any commit, branch, tag, etc.'
|
|
|
|
@echo ' The targeted "version" will be retrieved from the repo, and'
|
|
|
|
@echo ' linked into the container as a local volume.'
|
|
|
|
@echo
|
2019-02-28 23:59:04 -05:00
|
|
|
@echo ' make scripthost [version=VERSION]'
|
|
|
|
@echo ' - Create an ephemeral container for demonstrating a bug. After'
|
|
|
|
@echo ' exiting the shell, a log of the commands used to illustrate the'
|
|
|
|
@echo ' problem will be written to the file "script.txt". This file can'
|
|
|
|
@echo ' be useful to developers to make a repeatable test for the'
|
|
|
|
@echo ' problem.'
|
|
|
|
@echo
|
2019-02-25 17:32:34 -05:00
|
|
|
@echo 'LINTING'
|
|
|
|
@echo
|
|
|
|
@echo ' make testenv'
|
2019-03-07 09:26:17 -05:00
|
|
|
@echo ' - Create a python virtual environment with the same dependencies'
|
|
|
|
@echo " used by yadm's testbed environment. Creating and activating"
|
|
|
|
@echo ' this environment might be useful if your editor does real time'
|
2019-02-25 17:32:34 -05:00
|
|
|
@echo ' linting of python files. After creating the virtual environment,'
|
2019-03-07 09:26:17 -05:00
|
|
|
@echo ' you can activate it by typing:'
|
|
|
|
@echo
|
|
|
|
@echo ' source testenv/bin/activate'
|
2019-02-25 17:32:34 -05:00
|
|
|
@echo
|
|
|
|
@echo 'MANPAGES'
|
|
|
|
@echo
|
|
|
|
@echo ' make man'
|
2019-03-07 09:26:17 -05:00
|
|
|
@echo ' - View yadm.1 as a standard man page.'
|
2019-02-25 17:32:34 -05:00
|
|
|
@echo
|
|
|
|
@echo ' make man-wide'
|
2019-03-07 09:26:17 -05:00
|
|
|
@echo ' - View yadm.1 as a man page, using all columns of your display.'
|
2019-02-25 17:32:34 -05:00
|
|
|
@echo
|
|
|
|
@echo ' make man-ps'
|
2019-03-07 09:26:17 -05:00
|
|
|
@echo ' - Create a postscript version of the man page.'
|
2019-02-25 17:32:34 -05:00
|
|
|
@echo
|
|
|
|
@echo 'FILE GENERATION'
|
|
|
|
@echo
|
|
|
|
@echo ' make yadm.md'
|
2019-03-07 09:26:17 -05:00
|
|
|
@echo ' - Generate the markdown version of the man page (for viewing on'
|
2019-02-25 17:32:34 -05:00
|
|
|
@echo ' the web).'
|
|
|
|
@echo
|
|
|
|
@echo ' make contrib'
|
|
|
|
@echo ' - Generate the CONTRIBUTORS file, from the repo history.'
|
|
|
|
@echo
|
2019-11-09 16:48:14 -05:00
|
|
|
@echo 'INSTALLATION'
|
|
|
|
@echo
|
|
|
|
@echo ' make install PREFIX=<prefix>'
|
|
|
|
@echo ' - Install yadm, manpage, etc. to <prefix>'
|
|
|
|
@echo
|
2019-02-25 17:32:34 -05:00
|
|
|
@echo 'UTILITIES'
|
|
|
|
@echo
|
|
|
|
@echo ' make sync-clock'
|
|
|
|
@echo ' - Reset the hardware clock for the docker hypervisor host. This'
|
|
|
|
@echo ' can be useful for docker engine hosts which are not'
|
|
|
|
@echo ' Linux-based.'
|
|
|
|
@echo
|
2015-07-16 20:38:17 -04:00
|
|
|
|
2019-02-25 17:32:34 -05:00
|
|
|
# Make it possible to run make specifying a py.test test file
|
|
|
|
.PHONY: $(PYTESTS)
|
|
|
|
$(PYTESTS):
|
|
|
|
@$(MAKE) test testargs="-k $@ $(testargs)"
|
|
|
|
%.py:
|
|
|
|
@$(MAKE) test testargs="-k $@ $(testargs)"
|
2015-07-16 20:38:17 -04:00
|
|
|
|
2019-02-25 17:32:34 -05:00
|
|
|
# Run all tests with additional testargs
|
2016-03-23 20:18:33 -04:00
|
|
|
.PHONY: test
|
2019-02-25 17:32:34 -05:00
|
|
|
test:
|
|
|
|
@if [ -f /.yadmtestbed ]; then \
|
|
|
|
cd /yadm && \
|
2020-07-08 01:58:54 -04:00
|
|
|
py.test -v $(testargs); \
|
2019-02-25 17:32:34 -05:00
|
|
|
else \
|
2020-12-29 07:57:51 -05:00
|
|
|
$(MAKE) -s require-docker && \
|
2020-12-30 06:52:36 -05:00
|
|
|
docker run \
|
|
|
|
--rm -t$(shell test -t 0 && echo i) \
|
|
|
|
-v "$(CURDIR):/yadm:ro" \
|
|
|
|
$(IMAGE) \
|
|
|
|
make test testargs="$(testargs)"; \
|
2019-02-25 17:32:34 -05:00
|
|
|
fi
|
2016-04-07 09:16:13 -04:00
|
|
|
|
2020-12-30 06:01:40 -05:00
|
|
|
.PHONY: .testyadm
|
|
|
|
.testyadm: version ?= HEAD
|
|
|
|
.testyadm:
|
|
|
|
@echo "Using yadm version=\"$(version)\""
|
2020-11-25 23:05:24 -05:00
|
|
|
@if [ "$(version)" = "local" ]; then \
|
2020-12-30 06:01:40 -05:00
|
|
|
cp -f yadm $@; \
|
2020-11-25 23:05:24 -05:00
|
|
|
else \
|
2020-12-30 06:01:40 -05:00
|
|
|
git show $(version):yadm > $@; \
|
2020-11-25 23:05:24 -05:00
|
|
|
fi
|
2020-12-30 06:01:40 -05:00
|
|
|
@chmod a+x $@
|
|
|
|
|
|
|
|
.PHONY: testhost
|
|
|
|
testhost: require-docker .testyadm
|
|
|
|
@echo "Starting testhost"
|
2019-02-28 23:59:04 -05:00
|
|
|
@docker run \
|
|
|
|
-w /root \
|
|
|
|
--hostname testhost \
|
|
|
|
--rm -it \
|
2020-12-30 06:01:40 -05:00
|
|
|
-v "$(CURDIR)/.testyadm:/bin/yadm:ro" \
|
2020-07-08 01:58:54 -04:00
|
|
|
$(IMAGE) \
|
2019-02-28 23:59:04 -05:00
|
|
|
bash -l
|
|
|
|
|
|
|
|
.PHONY: scripthost
|
2020-12-30 06:01:40 -05:00
|
|
|
scripthost: require-docker .testyadm
|
|
|
|
@echo "Starting scripthost \(recording script\)"
|
2019-02-28 23:59:04 -05:00
|
|
|
@printf '' > script.gz
|
|
|
|
@docker run \
|
|
|
|
-w /root \
|
|
|
|
--hostname scripthost \
|
|
|
|
--rm -it \
|
2020-12-30 06:01:40 -05:00
|
|
|
-v "$(CURDIR)/script.gz:/script.gz:rw" \
|
|
|
|
-v "$(CURDIR)/.testyadm:/bin/yadm:ro" \
|
2020-07-08 01:58:54 -04:00
|
|
|
$(IMAGE) \
|
2019-02-28 23:59:04 -05:00
|
|
|
bash -c "script /tmp/script -q -c 'bash -l'; gzip < /tmp/script > /script.gz"
|
|
|
|
@echo
|
2020-12-30 06:01:40 -05:00
|
|
|
@echo "Script saved to $(CURDIR)/script.gz"
|
2019-02-28 23:59:04 -05:00
|
|
|
|
2019-02-25 17:32:34 -05:00
|
|
|
|
|
|
|
.PHONY: testenv
|
|
|
|
testenv:
|
|
|
|
@echo 'Creating a local virtual environment in "testenv/"'
|
|
|
|
@echo
|
2020-01-29 01:14:37 -05:00
|
|
|
python3 -m venv --clear testenv
|
2019-02-25 17:32:34 -05:00
|
|
|
testenv/bin/pip3 install --upgrade pip setuptools
|
2020-12-21 16:30:28 -05:00
|
|
|
testenv/bin/pip3 install --upgrade -r test/requirements.txt;
|
2020-12-30 06:22:14 -05:00
|
|
|
@for v in $$(sed -rn -e 's:.*/yadm-([0-9.]+)$$:\1:p' test/Dockerfile); do \
|
|
|
|
git show $$v:yadm > testenv/bin/yadm-$$v; \
|
|
|
|
chmod +x testenv/bin/yadm-$$v; \
|
|
|
|
done
|
2019-02-25 17:32:34 -05:00
|
|
|
@echo
|
|
|
|
@echo 'To activate this test environment type:'
|
|
|
|
@echo ' source testenv/bin/activate'
|
2017-09-04 12:48:45 -04:00
|
|
|
|
2020-12-21 16:30:28 -05:00
|
|
|
.PHONY: image
|
|
|
|
image:
|
|
|
|
@docker build -f test/Dockerfile . -t "$(IMAGE)"
|
|
|
|
|
|
|
|
|
2017-09-04 12:56:33 -04:00
|
|
|
.PHONY: man
|
2015-07-16 20:38:17 -04:00
|
|
|
man:
|
2019-02-25 17:32:34 -05:00
|
|
|
@groff -man -Tascii ./yadm.1 | less
|
|
|
|
|
|
|
|
.PHONY: man-wide
|
|
|
|
man-wide:
|
|
|
|
@man ./yadm.1
|
|
|
|
|
|
|
|
.PHONY: man-ps
|
|
|
|
man-ps:
|
|
|
|
@groff -man -Tps ./yadm.1 > yadm.ps
|
|
|
|
|
|
|
|
yadm.md: yadm.1
|
|
|
|
@groff -man -Tascii ./yadm.1 | col -bx | sed 's/^[A-Z]/## &/g' | sed '/yadm(1)/d' > yadm.md
|
2015-07-16 20:38:17 -04:00
|
|
|
|
2019-02-25 17:32:34 -05:00
|
|
|
.PHONY: contrib
|
2020-12-29 09:38:51 -05:00
|
|
|
contrib: SHELL = /bin/bash
|
2019-02-25 17:32:34 -05:00
|
|
|
contrib:
|
2020-12-29 09:38:51 -05:00
|
|
|
@echo -e "CONTRIBUTORS\n" > CONTRIBUTORS
|
2020-08-08 16:40:29 -04:00
|
|
|
@IFS=$$'\n'; for author in $$(git shortlog -ns master gh-pages develop dev-pages | cut -f2); do \
|
|
|
|
git log master gh-pages develop dev-pages \
|
|
|
|
--author="$$author" --format=tformat: --numstat | \
|
|
|
|
awk "{sum += \$$1 + \$$2} END {print sum \"\t\" \"$$author\"}"; \
|
|
|
|
done | sort -nr | cut -f2 >> CONTRIBUTORS
|
2018-07-11 08:50:42 -04:00
|
|
|
|
2019-11-09 16:48:14 -05:00
|
|
|
.PHONY: install
|
|
|
|
install:
|
|
|
|
@[ -n "$(PREFIX)" ] || { echo "PREFIX is not set"; exit 1; }
|
|
|
|
@{\
|
|
|
|
set -e ;\
|
|
|
|
bin="$(PREFIX)/bin" ;\
|
|
|
|
doc="$(PREFIX)/share/doc/yadm" ;\
|
|
|
|
man="$(PREFIX)/share/man/man1" ;\
|
|
|
|
install -d "$$bin" "$$doc" "$$man" ;\
|
|
|
|
install -m 0755 yadm "$$bin" ;\
|
|
|
|
install -m 0644 yadm.1 "$$man" ;\
|
|
|
|
install -m 0644 CHANGES CONTRIBUTORS LICENSE "$$doc" ;\
|
|
|
|
cp -r contrib "$$doc" ;\
|
|
|
|
}
|
|
|
|
|
2018-07-11 08:50:42 -04:00
|
|
|
.PHONY: sync-clock
|
|
|
|
sync-clock:
|
|
|
|
docker run --rm --privileged alpine hwclock -s
|
2019-02-28 23:59:04 -05:00
|
|
|
|
|
|
|
.PHONY: require-docker
|
|
|
|
require-docker:
|
2020-10-09 16:55:10 -04:00
|
|
|
@if ! command -v "docker" > /dev/null 2>&1; then \
|
2019-02-28 23:59:04 -05:00
|
|
|
echo "Sorry, this make target requires docker to be installed."; \
|
|
|
|
false; \
|
|
|
|
fi
|