blob: a72f9ee616031823a8006c4740ccfe4da39c2d93 [file] [log] [blame]
# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
# Makefile for utility work on coverage.py.
help: ## Show this help.
@echo "Available targets:"
@grep '^[a-zA-Z]' $(MAKEFILE_LIST) | sort | awk -F ':.*?## ' 'NF==2 {printf " %-26s%s\n", $$1, $$2}'
clean_platform: ## Remove files that clash across platforms.
rm -f *.so */*.so
rm -rf __pycache__ */__pycache__ */*/__pycache__ */*/*/__pycache__ */*/*/*/__pycache__ */*/*/*/*/__pycache__
rm -f *.pyc */*.pyc */*/*.pyc */*/*/*.pyc */*/*/*/*.pyc */*/*/*/*/*.pyc
rm -f *.pyo */*.pyo */*/*.pyo */*/*/*.pyo */*/*/*/*.pyo */*/*/*/*/*.pyo
clean: clean_platform ## Remove artifacts of test execution, installation, etc.
-pip uninstall -y coverage
rm -f *.pyd */*.pyd
rm -rf build coverage.egg-info dist htmlcov
rm -f *.bak */*.bak */*/*.bak */*/*/*.bak */*/*/*/*.bak */*/*/*/*/*.bak
rm -f *$$py.class */*$$py.class */*/*$$py.class */*/*/*$$py.class */*/*/*/*$$py.class */*/*/*/*/*$$py.class
rm -f coverage/*,cover
rm -f MANIFEST
rm -f .coverage .coverage.* coverage.xml .metacov*
rm -f .tox/*/lib/*/site-packages/zzz_metacov.pth
rm -f */.coverage */*/.coverage */*/*/.coverage */*/*/*/.coverage */*/*/*/*/.coverage */*/*/*/*/*/.coverage
rm -f tests/covmain.zip tests/zipmods.zip
rm -rf tests/eggsrc/build tests/eggsrc/dist tests/eggsrc/*.egg-info
rm -f setuptools-*.egg distribute-*.egg distribute-*.tar.gz
rm -rf doc/_build doc/_spell doc/sample_html_beta
rm -rf tmp
rm -rf .cache .pytest_cache .hypothesis
rm -rf $$TMPDIR/coverage_test
-make -C tests/gold/html clean
sterile: clean ## Remove all non-controlled content, even if expensive.
rm -rf .tox
-docker image rm -f quay.io/pypa/manylinux1_i686 quay.io/pypa/manylinux1_x86_64
CSS = coverage/htmlfiles/style.css
SCSS = coverage/htmlfiles/style.scss
css: $(CSS) ## Compile .scss into .css.
$(CSS): $(SCSS)
pysassc --style=compact $(SCSS) $@
cp $@ tests/gold/html/styled
LINTABLE = coverage tests igor.py setup.py __main__.py
lint: ## Run linters and checkers.
tox -e lint
todo:
-grep -R --include=*.py TODO $(LINTABLE)
pep8:
pycodestyle --filename=*.py --repeat $(LINTABLE)
test:
tox -e py27,py35 $(ARGS)
PYTEST_SMOKE_ARGS = -n 6 -m "not expensive" --maxfail=3 $(ARGS)
smoke: ## Run tests quickly with the C tracer in the lowest supported Python versions.
COVERAGE_NO_PYTRACER=1 tox -q -e py27,py35 -- $(PYTEST_SMOKE_ARGS)
pysmoke: ## Run tests quickly with the Python tracer in the lowest supported Python versions.
COVERAGE_NO_CTRACER=1 tox -q -e py27,py35 -- $(PYTEST_SMOKE_ARGS)
DOCKER_RUN = docker run -it --init --rm -v `pwd`:/io
RUN_MANYLINUX_X86 = $(DOCKER_RUN) quay.io/pypa/manylinux1_x86_64 /io/ci/manylinux.sh
RUN_MANYLINUX_I686 = $(DOCKER_RUN) quay.io/pypa/manylinux1_i686 /io/ci/manylinux.sh
test_linux: ## Run the tests in Linux under Docker.
# The Linux .pyc files clash with the host's because of file path
# changes, so clean them before and after running tests.
make clean_platform
$(RUN_MANYLINUX_X86) test $(ARGS)
make clean_platform
meta_linux: ## Run meta-coverage in Linux under Docker.
ARGS="meta $(ARGS)" make test_linux
# Coverage measurement of coverage.py itself (meta-coverage). See metacov.ini
# for details.
metacov: ## Run meta-coverage, measuring ourself.
COVERAGE_COVERAGE=yes tox $(ARGS)
metahtml: ## Produce meta-coverage HTML reports.
python igor.py combine_html
# Kitting
kit: ## Make the source distribution.
python setup.py sdist
wheel: ## Make the wheels for distribution.
tox -c tox_wheels.ini $(ARGS)
kit_linux: ## Make the Linux wheels.
$(RUN_MANYLINUX_X86) build
$(RUN_MANYLINUX_I686) build
kit_upload: ## Upload the built distributions to PyPI.
twine upload --verbose dist/*
test_upload: ## Upload the distrubutions to PyPI's testing server.
twine upload --verbose --repository testpypi dist/*
kit_local:
# pip.conf looks like this:
# [global]
# find-links = file:///Users/ned/Downloads/local_pypi
cp -v dist/* `awk -F "//" '/find-links/ {print $$2}' ~/.pip/pip.conf`
# pip caches wheels of things it has installed. Clean them out so we
# don't go crazy trying to figure out why our new code isn't installing.
find ~/Library/Caches/pip/wheels -name 'coverage-*' -delete
download_appveyor: ## Download the latest Windows artifacts from AppVeyor.
python ci/download_appveyor.py nedbat/coveragepy
build_ext:
python setup.py build_ext
# Documentation
DOCBIN = .tox/doc/bin
SPHINXOPTS = -aE
SPHINXBUILD = $(DOCBIN)/sphinx-build $(SPHINXOPTS)
SPHINXAUTOBUILD = $(DOCBIN)/sphinx-autobuild -p 9876 --ignore '.git/**' --open-browser
WEBHOME = ~/web/stellated/
WEBSAMPLE = $(WEBHOME)/files/sample_coverage_html
WEBSAMPLEBETA = $(WEBHOME)/files/sample_coverage_html_beta
$(DOCBIN):
tox -q -e doc --notest
cmd_help: $(DOCBIN)
@for cmd in annotate combine debug erase html json report run xml; do \
echo > doc/help/$$cmd.rst; \
echo ".. code::" >> doc/help/$$cmd.rst; \
echo >> doc/help/$$cmd.rst; \
echo " $$ coverage $$cmd --help" >> doc/help/$$cmd.rst; \
$(DOCBIN)/python -m coverage $$cmd --help | \
sed \
-e 's/__main__.py/coverage/' \
-e '/^Full doc/d' \
-e 's/^./ &/' \
>> doc/help/$$cmd.rst; \
done
dochtml: $(DOCBIN) cmd_help ## Build the docs HTML output.
$(DOCBIN)/python doc/check_copied_from.py doc/*.rst
$(SPHINXBUILD) -b html doc doc/_build/html
docdev: dochtml ## Build docs, and auto-watch for changes.
PATH=$(DOCBIN):$(PATH) $(SPHINXAUTOBUILD) -b html doc doc/_build/html
docspell: $(DOCBIN) ## Run the spell checker on the docs.
$(SPHINXBUILD) -b spelling doc doc/_spell
publish:
rm -f $(WEBSAMPLE)/*.*
mkdir -p $(WEBSAMPLE)
cp doc/sample_html/*.* $(WEBSAMPLE)
publishbeta:
rm -f $(WEBSAMPLEBETA)/*.*
mkdir -p $(WEBSAMPLEBETA)
cp doc/sample_html_beta/*.* $(WEBSAMPLEBETA)
CHANGES_MD = tmp/rst_rst/changes.md
RELNOTES_JSON = tmp/relnotes.json
$(CHANGES_MD): CHANGES.rst $(DOCBIN)
$(SPHINXBUILD) -b rst doc tmp/rst_rst
pandoc -frst -tmarkdown_strict --atx-headers --wrap=none tmp/rst_rst/changes.rst > $(CHANGES_MD)
relnotes_json: $(RELNOTES_JSON) ## Convert changelog to JSON for further parsing.
$(RELNOTES_JSON): $(CHANGES_MD)
$(DOCBIN)/python ci/parse_relnotes.py tmp/rst_rst/changes.md $(RELNOTES_JSON)
tidelift_relnotes: $(RELNOTES_JSON) ## Upload parsed release notes to Tidelift.
$(DOCBIN)/python ci/tidelift_relnotes.py $(RELNOTES_JSON) pypi/coverage
github_releases: $(RELNOTES_JSON) ## Update GitHub releases.
$(DOCBIN)/python ci/github_releases.py $(RELNOTES_JSON) nedbat/coveragepy