Files
concrete/Makefile
Arthur Meyre a8e7f0e237 tools: create Docker release image, helper build script and requirements
- also create Documentation and issue template
2021-09-08 18:16:30 +02:00

183 lines
4.9 KiB
Makefile

SHELL:=/bin/bash
DEV_DOCKER_IMG:=concretefhe-dev
DEV_DOCKERFILE:=docker/Dockerfile.concretefhe-dev
SRC_DIR:=concrete
setup_env:
poetry install
poetry run python -m pip install -U pip wheel setuptools
poetry run python -m pip install -r torch_requirements.txt \
-f https://download.pytorch.org/whl/torch_stable.html
.PHONY: setup_env
sync_env:
poetry install --remove-untracked
$(MAKE) setup_env
.PHONY: sync_env
python_format:
poetry run env bash ./script/source_format/format_python.sh \
--dir $(SRC_DIR) --dir tests --dir benchmarks
.PHONY: python_format
check_python_format:
poetry run env bash ./script/source_format/format_python.sh \
--dir $(SRC_DIR) --dir tests --dir benchmarks --check
.PHONY: check_python_format
check_strip_nb:
poetry run python ./script/nbmake_utils/notebook_sanitize.py examples --check
.PHONY: strip_nb
pylint:
$(MAKE) --keep-going pylint_src pylint_tests pylint_benchmarks
.PHONY: pylint
pylint_src:
poetry run pylint --rcfile=pylintrc $(SRC_DIR)
.PHONY: pylint_src
pylint_tests:
@# Disable duplicate code detection in tests
poetry run pylint --disable=R0801 --rcfile=pylintrc tests
.PHONY: pylint_tests
pylint_benchmarks:
@# Disable duplicate code detection, docstring requirement, too many locals/statements
poetry run pylint --disable=R0801,R0914,R0915,C0103,C0114,C0115,C0116 \
--rcfile=pylintrc benchmarks
.PHONY: pylint_benchmarks
flake8:
poetry run flake8 --max-line-length 100 --per-file-ignores="__init__.py:F401" \
$(SRC_DIR)/ tests/ benchmarks/
.PHONY: flake8
python_linting: pylint flake8
.PHONY: python_linting
conformance: strip_nb python_format
.PHONY: conformance
pcc:
@$(MAKE) --keep-going --jobs $(./script/make_utils/ncpus.sh) --output-sync=recurse \
--no-print-directory pcc_internal
.PHONY: pcc
pcc_internal: check_python_format check_strip_nb python_linting mypy_ci pydocstyle
.PHONY: pcc_internal
pytest:
poetry run pytest -svv \
--cov=$(SRC_DIR) --cov-report=term-missing:skip-covered --cov-report=xml tests/
.PHONY: pytest
# Not a huge fan of ignoring missing imports, but some packages do not have typing stubs
mypy:
poetry run mypy -p $(SRC_DIR) --ignore-missing-imports
.PHONY: mypy
# Friendly target to run mypy without ignoring missing stubs and still have errors messages
# Allows to see which stubs we are missing
mypy_ns:
poetry run mypy -p $(SRC_DIR)
.PHONY: mypy_ns
mypy_test:
find ./tests/ -name "*.py" | xargs poetry run mypy --ignore-missing-imports
.PHONY: mypy_test
mypy_benchmark:
find ./benchmarks/ -name "*.py" | xargs poetry run mypy --ignore-missing-imports
.PHONY: mypy_benchmark
# The plus indicates that make will be called by the command and allows to share the context with
# the parent make execution. We serialize calls to these targets as they may overwrite each others
# cache which can cause issues.
mypy_ci:
$(MAKE) --keep-going mypy mypy_test mypy_benchmark
.PHONY: mypy_ci
pytest_and_coverage: pytest coverage
.PHONY: pytest_and_coverage
coverage:
@if [[ "$$BB" == "" ]]; then BB=origin/main; fi && \
poetry run diff-cover coverage.xml --fail-under 100 \
--html-report coverage.html --compare-branch $$BB
.PHONY: coverage
docker_build:
docker build --pull -t $(DEV_DOCKER_IMG) -f $(DEV_DOCKERFILE) .
.PHONY: docker_build
docker_rebuild:
docker build --pull --no-cache -t $(DEV_DOCKER_IMG) -f $(DEV_DOCKERFILE) .
.PHONY: docker_rebuild
docker_start:
@# the slash before pwd is for Windows
docker run --rm -it \
-p 8888:8888 \
--env DISPLAY=host.docker.internal:0 \
--volume /"$$(pwd)":/src \
$(DEV_DOCKER_IMG)
.PHONY: docker_start
docker_build_and_start: docker_build docker_start
.PHONY: docker_build_and_start
docker_bas: docker_build_and_start
.PHONY: docker_bas
docs: clean_docs
@# Generate the auto summary of documentations
poetry run sphinx-apidoc -o docs/_apidoc $(SRC_DIR)
@# Docs
cd docs && poetry run $(MAKE) html SPHINXOPTS='-W --keep-going'
.PHONY: docs
clean_docs:
rm -rf docs/_apidoc docs/_build
.PHONY: clean_docs
open_docs:
@# This is macOS only. On other systems, one would use `start` or `xdg-open`
open docs/_build/html/index.html
.PHONY: open_docs
build_and_open_docs: clean_docs docs open_docs
.PHONY: build_and_open_docs
pydocstyle:
@# From http://www.pydocstyle.org/en/stable/error_codes.html
poetry run pydocstyle $(SRC_DIR) --convention google --add-ignore=D1,D202 --add-select=D401
.PHONY: pydocstyle
strip_nb:
poetry run python ./script/nbmake_utils/notebook_sanitize.py examples
.PHONY: strip_nb
notebook_timeout:
poetry run python ./script/nbmake_utils/notebook_test_timeout.py examples
.PHONY: notebook_timeout
pytest_nb:
poetry run pytest --nbmake examples/*.ipynb
.PHONY: pytest_nb
benchmark:
poetry run python script/progress_tracker_utils/measure.py benchmarks \
--output .benchmarks.json
.PHONY: benchmark
jupyter:
poetry run jupyter notebook --allow-root --no-browser --ip=0.0.0.0
.PHONY: jupyter
release_docker:
./docker/build_release_image.sh
.PHONY: release_docker