2019-03-18 16:18:57 +00:00
|
|
|
SPEC_DIR = ./specs
|
2020-01-10 18:42:55 +00:00
|
|
|
SSZ_DIR = ./ssz
|
|
|
|
TEST_LIBS_DIR = ./tests/core
|
2019-03-27 16:35:46 +00:00
|
|
|
PY_SPEC_DIR = $(TEST_LIBS_DIR)/pyspec
|
2020-01-25 00:26:10 +00:00
|
|
|
TEST_VECTOR_DIR = ../eth2.0-spec-tests/tests
|
2020-01-10 18:42:55 +00:00
|
|
|
GENERATOR_DIR = ./tests/generators
|
2020-01-22 17:09:40 +00:00
|
|
|
DEPOSIT_CONTRACT_COMPILER_DIR = ./deposit_contract/compiler
|
|
|
|
DEPOSIT_CONTRACT_TESTER_DIR = ./deposit_contract/tester
|
2019-04-11 09:25:00 +00:00
|
|
|
CONFIGS_DIR = ./configs
|
2019-03-18 16:18:57 +00:00
|
|
|
|
2019-03-27 16:35:46 +00:00
|
|
|
# Collect a list of generator names
|
2019-07-30 10:49:18 +00:00
|
|
|
GENERATORS = $(sort $(dir $(wildcard $(GENERATOR_DIR)/*/.)))
|
|
|
|
# Map this list of generator paths to "gen_{generator name}" entries
|
|
|
|
GENERATOR_TARGETS = $(patsubst $(GENERATOR_DIR)/%/, gen_%, $(GENERATORS))
|
2019-03-28 16:16:18 +00:00
|
|
|
GENERATOR_VENVS = $(patsubst $(GENERATOR_DIR)/%, $(GENERATOR_DIR)/%venv, $(GENERATORS))
|
2019-03-18 22:20:24 +00:00
|
|
|
|
2019-07-30 10:49:18 +00:00
|
|
|
# To check generator matching:
|
|
|
|
#$(info $$GENERATOR_TARGETS is [${GENERATOR_TARGETS}])
|
|
|
|
|
2020-01-25 00:26:10 +00:00
|
|
|
MARKDOWN_FILES = $(wildcard $(SPEC_DIR)/phase0/*.md) $(wildcard $(SPEC_DIR)/phase1/*.md) $(wildcard $(SSZ_DIR)/*.md) $(wildcard $(SPEC_DIR)/networking/*.md) $(wildcard $(SPEC_DIR)/validator/*.md)
|
2019-12-10 16:07:30 +00:00
|
|
|
|
2019-06-14 23:13:29 +00:00
|
|
|
COV_HTML_OUT=.htmlcov
|
|
|
|
COV_INDEX_FILE=$(PY_SPEC_DIR)/$(COV_HTML_OUT)/index.html
|
2019-03-18 22:20:24 +00:00
|
|
|
|
2020-01-25 00:26:10 +00:00
|
|
|
.PHONY: clean partial_clean all test citest lint generate_tests pyspec install_test open_cov \
|
2020-01-22 17:09:40 +00:00
|
|
|
install_deposit_contract_tester test_deposit_contract install_deposit_contract_compiler \
|
|
|
|
compile_deposit_contract test_compile_deposit_contract check_toc
|
2019-03-27 16:35:46 +00:00
|
|
|
|
2019-07-30 10:49:18 +00:00
|
|
|
all: $(PY_SPEC_ALL_TARGETS)
|
2019-03-18 22:20:24 +00:00
|
|
|
|
2019-06-30 15:53:21 +00:00
|
|
|
# deletes everything except the venvs
|
2019-06-30 08:58:04 +00:00
|
|
|
partial_clean:
|
2019-07-30 10:49:18 +00:00
|
|
|
rm -rf $(TEST_VECTOR_DIR)
|
2019-03-28 16:05:40 +00:00
|
|
|
rm -rf $(GENERATOR_VENVS)
|
2020-01-25 00:26:10 +00:00
|
|
|
rm -rf .pytest_cache
|
|
|
|
rm -f .coverage
|
2019-06-30 08:58:04 +00:00
|
|
|
rm -rf $(PY_SPEC_DIR)/.pytest_cache
|
2020-01-22 17:09:40 +00:00
|
|
|
rm -rf $(DEPOSIT_CONTRACT_COMPILER_DIR)/.pytest_cache
|
|
|
|
rm -rf $(DEPOSIT_CONTRACT_TESTER_DIR)/.pytest_cache
|
2020-01-25 00:26:10 +00:00
|
|
|
rm -rf $(PY_SPEC_DIR)/phase0
|
|
|
|
rm -rf $(PY_SPEC_DIR)/phase1
|
2019-06-14 23:13:29 +00:00
|
|
|
rm -rf $(PY_SPEC_DIR)/$(COV_HTML_OUT)
|
|
|
|
rm -rf $(PY_SPEC_DIR)/.coverage
|
|
|
|
rm -rf $(PY_SPEC_DIR)/test-reports
|
2020-01-25 00:26:10 +00:00
|
|
|
rm -rf eth2spec.egg-info dist build
|
|
|
|
|
2019-03-18 22:20:24 +00:00
|
|
|
|
2019-06-30 09:18:36 +00:00
|
|
|
clean: partial_clean
|
2020-01-25 00:26:10 +00:00
|
|
|
rm -rf venv
|
2019-06-30 08:58:04 +00:00
|
|
|
rm -rf $(PY_SPEC_DIR)/venv
|
2020-01-22 17:09:40 +00:00
|
|
|
rm -rf $(DEPOSIT_CONTRACT_COMPILER_DIR)/venv
|
|
|
|
rm -rf $(DEPOSIT_CONTRACT_TESTER_DIR)/venv
|
2019-06-30 08:58:04 +00:00
|
|
|
|
2020-02-05 17:38:21 +00:00
|
|
|
# The pyspec is rebuilt to enforce the /specs being part of eth2specs source distribution. It could be forgotten otherwise.
|
|
|
|
dist_build: pyspec
|
|
|
|
python3 setup.py sdist bdist_wheel
|
|
|
|
|
|
|
|
dist_check:
|
|
|
|
python3 -m twine check dist/*
|
|
|
|
|
|
|
|
dist_upload:
|
|
|
|
python3 -m twine upload dist/*
|
|
|
|
|
|
|
|
|
2019-07-30 10:49:18 +00:00
|
|
|
# "make generate_tests" to run all generators
|
2020-01-25 00:26:10 +00:00
|
|
|
generate_tests: $(GENERATOR_TARGETS)
|
|
|
|
|
|
|
|
# "make pyspec" to create the pyspec for all phases.
|
|
|
|
pyspec:
|
|
|
|
. venv/bin/activate; python3 setup.py pyspecdev
|
2019-04-20 01:33:15 +00:00
|
|
|
|
|
|
|
# installs the packages to run pyspec tests
|
|
|
|
install_test:
|
2020-01-25 21:10:03 +00:00
|
|
|
python3 -m venv venv; . venv/bin/activate; pip3 install .[test] .[lint]
|
2019-03-18 22:20:24 +00:00
|
|
|
|
2020-01-25 00:26:10 +00:00
|
|
|
test: pyspec
|
|
|
|
. venv/bin/activate; cd $(PY_SPEC_DIR); \
|
2019-06-21 20:18:28 +00:00
|
|
|
python -m pytest -n 4 --cov=eth2spec.phase0.spec --cov=eth2spec.phase1.spec --cov-report="html:$(COV_HTML_OUT)" --cov-branch eth2spec
|
2020-03-20 19:38:36 +00:00
|
|
|
|
|
|
|
find_test: pyspec
|
|
|
|
. venv/bin/activate; cd $(PY_SPEC_DIR); \
|
|
|
|
python -m pytest -k=$(K) --cov=eth2spec.phase0.spec --cov=eth2spec.phase1.spec --cov-report="html:$(COV_HTML_OUT)" --cov-branch eth2spec
|
2019-04-20 01:33:15 +00:00
|
|
|
|
2020-01-25 00:26:10 +00:00
|
|
|
citest: pyspec
|
|
|
|
mkdir -p tests/core/pyspec/test-reports/eth2spec; . venv/bin/activate; cd $(PY_SPEC_DIR); \
|
|
|
|
python -m pytest -n 4 --junitxml=eth2spec/test_results.xml eth2spec
|
2019-06-14 21:12:04 +00:00
|
|
|
|
|
|
|
open_cov:
|
|
|
|
((open "$(COV_INDEX_FILE)" || xdg-open "$(COV_INDEX_FILE)") &> /dev/null) &
|
2019-05-09 05:11:07 +00:00
|
|
|
|
2019-12-10 16:07:30 +00:00
|
|
|
check_toc: $(MARKDOWN_FILES:=.toc)
|
|
|
|
|
|
|
|
%.toc:
|
|
|
|
cp $* $*.tmp && \
|
|
|
|
doctoc $* && \
|
|
|
|
diff -q $* $*.tmp && \
|
|
|
|
rm $*.tmp
|
|
|
|
|
2019-12-16 11:55:18 +00:00
|
|
|
codespell:
|
2019-12-16 13:11:05 +00:00
|
|
|
codespell . --skip ./.git -I .codespell-whitelist
|
2019-12-16 11:55:18 +00:00
|
|
|
|
2020-01-25 00:26:10 +00:00
|
|
|
lint: pyspec
|
|
|
|
. venv/bin/activate; cd $(PY_SPEC_DIR); \
|
2019-06-22 04:11:58 +00:00
|
|
|
flake8 --ignore=E252,W504,W503 --max-line-length=120 ./eth2spec \
|
|
|
|
&& cd ./eth2spec && mypy --follow-imports=silent --warn-unused-ignores --ignore-missing-imports --check-untyped-defs --disallow-incomplete-defs --disallow-untyped-defs -p phase0 \
|
|
|
|
&& mypy --follow-imports=silent --warn-unused-ignores --ignore-missing-imports --check-untyped-defs --disallow-incomplete-defs --disallow-untyped-defs -p phase1;
|
2019-05-09 05:11:07 +00:00
|
|
|
|
2020-01-25 00:26:10 +00:00
|
|
|
install_deposit_contract_tester:
|
2020-01-22 17:09:40 +00:00
|
|
|
cd $(DEPOSIT_CONTRACT_TESTER_DIR); python3 -m venv venv; . venv/bin/activate; pip3 install -r requirements.txt
|
2019-05-30 05:26:36 +00:00
|
|
|
|
2019-06-08 03:00:28 +00:00
|
|
|
test_deposit_contract:
|
2020-01-22 17:09:40 +00:00
|
|
|
cd $(DEPOSIT_CONTRACT_TESTER_DIR); . venv/bin/activate; \
|
2019-05-27 10:48:40 +00:00
|
|
|
python -m pytest .
|
2019-05-27 07:57:55 +00:00
|
|
|
|
2020-01-22 17:09:40 +00:00
|
|
|
install_deposit_contract_compiler:
|
|
|
|
cd $(DEPOSIT_CONTRACT_COMPILER_DIR); python3.7 -m venv venv; . venv/bin/activate; pip3.7 install -r requirements.txt
|
|
|
|
|
|
|
|
compile_deposit_contract:
|
|
|
|
cd $(DEPOSIT_CONTRACT_COMPILER_DIR); . venv/bin/activate; \
|
|
|
|
python3.7 deposit_contract/compile.py contracts/validator_registration.vy
|
|
|
|
|
|
|
|
test_compile_deposit_contract:
|
|
|
|
cd $(DEPOSIT_CONTRACT_COMPILER_DIR); . venv/bin/activate; \
|
|
|
|
python3.7 -m pytest .
|
|
|
|
|
2019-03-28 16:05:40 +00:00
|
|
|
CURRENT_DIR = ${CURDIR}
|
2019-03-27 16:35:46 +00:00
|
|
|
|
2019-07-30 10:49:18 +00:00
|
|
|
# Runs a generator, identified by param 1
|
|
|
|
define run_generator
|
2019-04-20 02:23:10 +00:00
|
|
|
# Started!
|
|
|
|
# Create output directory
|
|
|
|
# Navigate to the generator
|
|
|
|
# Create a virtual environment, if it does not exist already
|
|
|
|
# Activate the venv, this is where dependencies are installed for the generator
|
|
|
|
# Install all the necessary requirements
|
|
|
|
# Run the generator. The generator is assumed to have an "main.py" file.
|
|
|
|
# We output to the tests dir (generator program should accept a "-o <filepath>" argument.
|
2019-07-30 20:17:44 +00:00
|
|
|
# `-l minimal general` can be added to the generator call to filter to smaller configs, when testing.
|
2019-04-20 02:23:10 +00:00
|
|
|
echo "generator $(1) started"; \
|
2019-07-30 10:49:18 +00:00
|
|
|
mkdir -p $(TEST_VECTOR_DIR); \
|
|
|
|
cd $(GENERATOR_DIR)/$(1); \
|
2019-04-22 16:56:21 +00:00
|
|
|
if ! test -d venv; then python3 -m venv venv; fi; \
|
2019-04-20 02:23:10 +00:00
|
|
|
. venv/bin/activate; \
|
|
|
|
pip3 install -r requirements.txt; \
|
2019-07-30 10:49:18 +00:00
|
|
|
python3 main.py -o $(CURRENT_DIR)/$(TEST_VECTOR_DIR) -c $(CURRENT_DIR)/$(CONFIGS_DIR); \
|
2019-04-20 02:23:10 +00:00
|
|
|
echo "generator $(1) finished"
|
2019-03-27 16:35:46 +00:00
|
|
|
endef
|
|
|
|
|
|
|
|
# The tests dir itself is simply build by creating the directory (recursively creating deeper directories if necessary)
|
2019-07-30 10:49:18 +00:00
|
|
|
$(TEST_VECTOR_DIR):
|
|
|
|
$(info creating test output directory, for generators: ${GENERATOR_TARGETS})
|
2019-03-27 16:35:46 +00:00
|
|
|
mkdir -p $@
|
2019-07-30 10:49:18 +00:00
|
|
|
$(TEST_VECTOR_DIR)/:
|
|
|
|
$(info ignoring duplicate tests dir)
|
2019-03-27 16:35:46 +00:00
|
|
|
|
2019-07-30 10:49:18 +00:00
|
|
|
# For any generator, build it using the run_generator function.
|
2019-03-28 16:24:18 +00:00
|
|
|
# (creation of output dir is a dependency)
|
2020-01-25 00:26:10 +00:00
|
|
|
gen_%: $(TEST_VECTOR_DIR)
|
2019-07-30 10:49:18 +00:00
|
|
|
$(call run_generator,$*)
|