
.PHONY: format
format:
	black src tests *.py && isort src tests *.py

.PHONY: lint
lint:
	flake8 src tests *.py && isort --check-only src tests *.py && black --check src tests *.py && mypy src tests

.PHONY: test
test:
	coverage run -m pytest
	coverage report

.PHONY: clean
clean:
	find . -name "*.pyc" -print0 | xargs -0 rm -f
	rm -Rf dist
	rm -Rf *.egg-info

.PHONY: develop
develop:
	pip install -U setuptools wheel
	pip install -e '.[arduino,metrics,dev]'

.PHONY: sdist
sdist:
	python setup.py sdist

.PHONY: wheel
wheel:
	python setup.py bdist_wheel

.PHONY: release
release: clean sdist wheel
	twine --version
	twine upload -s dist/*

.PHONY: docs
docs:
	make -C docs html

.PHONY: check-docs
check-docs:
	# Doesn't generate any output but prints out errors and warnings.
	make -C docs dummy

.PHONY: deb-local
deb-local: clean sdist
	docker build -t afancontrol-debuild -f ./Dockerfile.debian .
	docker run -it --rm \
		-v `pwd`/dist:/afancontrol/dist \
		-v `pwd`/debian:/afancontrol/debian \
		afancontrol-debuild sh -ex -c '\
			tar xaf /afancontrol/dist/afancontrol-*.tar.gz --strip 1; \
			debuild -us -uc -b; \
			cd ../; \
			ls -alh; \
			mkdir /afancontrol/dist/debian; \
			cp afancontrol?* /afancontrol/dist/debian/; \
			dpkg --contents afancontrol*.deb; \
	'

.PHONY: deb-from-pypi
deb-from-pypi: clean
	docker build -t afancontrol-debuild -f ./Dockerfile.debian .
	docker run -it --rm \
		-v `pwd`/dist:/afancontrol/dist \
		afancontrol-debuild sh -ex -c '\
			uscan --download --overwrite-download --verbose; \
			tar xaf ../afancontrol_*.orig.tar.gz --strip 1; \
			debuild -us -uc; \
			cd ../; \
			ls -alh; \
			mkdir /afancontrol/dist/debian; \
			cp afancontrol?* /afancontrol/dist/debian/; \
	'
