2019-02-25 17:32:34 -05:00
PYTESTS = $( wildcard test/test_*.py)
2022-08-27 05:39:22 -04:00
IMAGE = docker.io/yadm/testbed:2022-01-07
OCI = docker
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'
2021-01-01 18:05:00 -05:00
@echo ' working copy version of yadm will be used unless "version" is'
2019-02-25 17:32:34 -05:00
@echo ' specified. "version" can be set to any commit, branch, tag, etc.'
@echo ' The targeted "version" will be retrieved from the repo, and'
2021-01-01 18:05:00 -05:00
@echo ' linked into the container as a local volume.'
2019-02-25 17:32:34 -05:00
@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'
2020-12-30 06:28:55 -05:00
@echo ' problem. The version parameter works as for "testhost" above.'
2019-02-28 23:59:04 -05:00
@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) :
2020-12-30 06:50:35 -05:00
@$( MAKE) test testargs = " $@ $( testargs) "
2019-02-25 17:32:34 -05:00
%.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 && \
2022-08-27 05:39:22 -04:00
$( OCI) run \
2020-12-30 06:52:36 -05:00
--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
2021-01-01 18:05:00 -05:00
.testyadm : version ?= local
2020-12-30 06:01:40 -05:00
.testyadm :
2021-01-01 18:05:00 -05:00
@rm -f $@
2020-11-25 23:05:24 -05:00
@if [ " $( version) " = "local" ] ; then \
2021-01-01 18:05:00 -05:00
ln -sf yadm $@ ; \
echo " Using local yadm ( $$ (git describe --tags --dirty)) " ; \
2020-11-25 23:05:24 -05:00
else \
2020-12-30 06:01:40 -05:00
git show $( version) :yadm > $@ ; \
2021-01-01 18:05:00 -05:00
echo " Using yadm version $$ (git describe --tags $( version) ) " ; \
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"
2022-08-27 05:39:22 -04:00
@$( OCI) run \
2019-02-28 23:59:04 -05:00
-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
2022-08-27 05:39:22 -04:00
@$( OCI) run \
2019-02-28 23:59:04 -05:00
-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-12-30 15:43:47 -05:00
@rm -rf testenv
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 15:43:47 -05:00
@for v in $$ ( sed -En -e 's:.*/yadm-([0-9.]+)$$:\1:p' test/Dockerfile) ; do \
2020-12-30 06:22:14 -05:00
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 :
2022-08-27 05:39:22 -04:00
@$( OCI) build -f test/Dockerfile . -t " $( IMAGE) "
2020-12-21 16:30:28 -05:00
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 ; \
2021-11-25 16:19:53 -05:00
bin = " $( DESTDIR) $( PREFIX) /bin " ; \
doc = " $( DESTDIR) $( PREFIX) /share/doc/yadm " ; \
man = " $( DESTDIR) $( PREFIX) /share/man/man1 " ; \
2019-11-09 16:48:14 -05:00
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 :
2022-08-27 05:39:22 -04:00
$( OCI) run --rm --privileged alpine hwclock -s
2019-02-28 23:59:04 -05:00
.PHONY : require -docker
require-docker :
2022-08-27 05:39:22 -04:00
@if ! command -v $( OCI) > /dev/null 2>& 1; then \
echo "Sorry, this make target requires docker to be installed, to use another docker-compatible engine, like podman, re-run the make command adding OCI=podman" ; \
2019-02-28 23:59:04 -05:00
false; \
fi