#!/usr/bin/make -f # -*- makefile -*- # The structure follows debian/rules of the python-opentelemetry source # package: every upstream sub-project is built, installed and tested in its # own loop iteration. Refer to README.Debian! #export DH_VERBOSE = 1 export TMP_DIST-PACKAGES_FOLDER=$(CURDIR)/.pybuild/dist-packages/build PYTHON_OPENTELEMETRY_PACKAGES=\ opentelemetry-instrumentation \ $(NULL) PYTHON_OPENTELEMETRY_UTIL_PACKAGES=\ opentelemetry-util-http \ $(NULL) PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGES=\ opentelemetry-instrumentation-aiohttp-client \ opentelemetry-instrumentation-aiohttp-server \ opentelemetry-instrumentation-asgi \ opentelemetry-instrumentation-aws-lambda \ opentelemetry-instrumentation-django \ opentelemetry-instrumentation-fastapi \ opentelemetry-instrumentation-flask \ opentelemetry-instrumentation-httpx \ opentelemetry-instrumentation-requests \ opentelemetry-instrumentation-system-metrics \ opentelemetry-instrumentation-wsgi \ $(NULL) PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGES=\ opentelemetry-propagator-aws-xray \ $(NULL) %: dh $@ override_dh_clean: dh_clean rm -rf .pybuild find -type d -name ".pytest_cache" -exec rm -rf {} \; -prune find -type d -name "__pycache__" -exec rm -rf {} \; -prune override_dh_auto_build: for PYTHON_OPENTELEMETRY_PACKAGE in $(PYTHON_OPENTELEMETRY_PACKAGES); do \ echo "\n########\n# Building package $${PYTHON_OPENTELEMETRY_PACKAGE}\n########" ;\ PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_PACKAGE} ;\ dh_auto_build --buildsystem=pybuild --sourcedirectory $${PYTHON_OPENTELEMETRY_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_PACKAGE} ;\ done for PYTHON_OPENTELEMETRY_UTIL_PACKAGE in $(PYTHON_OPENTELEMETRY_UTIL_PACKAGES); do \ echo "\n########\n# Building package $${PYTHON_OPENTELEMETRY_UTIL_PACKAGE}\n########" ;\ PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_UTIL_PACKAGE} ;\ dh_auto_build --buildsystem=pybuild --sourcedirectory util/$${PYTHON_OPENTELEMETRY_UTIL_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_UTIL_PACKAGE} ;\ done for PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE in $(PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGES); do \ echo "\n########\n# Building package $${PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE}\n########" ;\ PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE} ;\ dh_auto_build --buildsystem=pybuild --sourcedirectory instrumentation/$${PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE} ;\ done for PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE in $(PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGES); do \ echo "\n########\n# Building package $${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE}\n########" ;\ PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} ;\ dh_auto_build --buildsystem=pybuild --sourcedirectory propagator/$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} ;\ done # The sub-projects import each other (e.g. django needs wsgi and # util-http), so for the tests we copy all of them into one folder we # can use as PYTHONPATH. mkdir .pybuild/dist-packages && \ for FOLDER in `find .pybuild/cpython3_3.*_opentelemetry-*/ -maxdepth 1 -type d -name build`; do \ echo "Copy $${FOLDER} -> .pybuild/dist-packages" ;\ cp -a $${FOLDER} .pybuild/dist-packages ;\ done override_dh_auto_install: for PYTHON_OPENTELEMETRY_PACKAGE in $(PYTHON_OPENTELEMETRY_PACKAGES); do \ echo "\n########\n# Installing package $${PYTHON_OPENTELEMETRY_PACKAGE}\n########" ;\ PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_PACKAGE} ;\ dh_auto_install --buildsystem=pybuild --sourcedirectory $${PYTHON_OPENTELEMETRY_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_PACKAGE} ;\ done for PYTHON_OPENTELEMETRY_UTIL_PACKAGE in $(PYTHON_OPENTELEMETRY_UTIL_PACKAGES); do \ echo "\n########\n# Installing package $${PYTHON_OPENTELEMETRY_UTIL_PACKAGE}\n########" ;\ PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_UTIL_PACKAGE} ;\ dh_auto_install --buildsystem=pybuild --sourcedirectory util/$${PYTHON_OPENTELEMETRY_UTIL_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_UTIL_PACKAGE} ;\ done for PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE in $(PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGES); do \ echo "\n########\n# Installing package $${PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE}\n########" ;\ PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE} ;\ dh_auto_install --buildsystem=pybuild --sourcedirectory instrumentation/$${PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE} ;\ done for PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE in $(PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGES); do \ echo "\n########\n# Installing package $${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE}\n########" ;\ PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} ;\ dh_auto_install --buildsystem=pybuild --sourcedirectory propagator/$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} ;\ done # The tests directory is passed explicitly, otherwise pytest picks up the # testpaths of the repository-root pytest.ini, which points at the falcon # instrumentation. # # A failing test suite does not stop the loops: all suites run, and the build # fails at the end if any of them failed. # # The base package is tested against its own build dir only, like upstream # does. Its auto_instrumentation tests load every installed instrumentor # entry point, which with the shared folder imports django and breaks # test_utils.py::UnwrapTestCase::test_noop_if_module_not_imported. override_dh_auto_test: ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) set -e ;\ for PYTHON_OPENTELEMETRY_PACKAGE in $(PYTHON_OPENTELEMETRY_PACKAGES); do \ echo "\n#######################\n# Run tests for $${PYTHON_OPENTELEMETRY_PACKAGE}\n#######################\n" ;\ cd $(CURDIR)/$${PYTHON_OPENTELEMETRY_PACKAGE} ;\ PYTHONPATH=`ls -d $(CURDIR)/.pybuild/cpython3_3.*_$${PYTHON_OPENTELEMETRY_PACKAGE}/build | head -n1` python3 -m pytest tests || echo $$PWD >> $(CURDIR)/.pybuild/tests-failed ;\ done set -e ;\ for PYTHON_OPENTELEMETRY_UTIL_PACKAGE in $(PYTHON_OPENTELEMETRY_UTIL_PACKAGES); do \ echo "\n#######################\n# Run tests for $${PYTHON_OPENTELEMETRY_UTIL_PACKAGE}\n#######################\n" ;\ cd $(CURDIR)/util/$${PYTHON_OPENTELEMETRY_UTIL_PACKAGE} ;\ PYTHONPATH=$(TMP_DIST-PACKAGES_FOLDER) python3 -m pytest tests || echo $$PWD >> $(CURDIR)/.pybuild/tests-failed ;\ done set -e ;\ for PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE in $(PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGES); do \ echo "\n#######################\n# Run tests for $${PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE}\n#######################\n" ;\ cd $(CURDIR)/instrumentation/$${PYTHON_OPENTELEMETRY_INSTRUMENTATION_PACKAGE} ;\ PYTHONPATH=$(TMP_DIST-PACKAGES_FOLDER) python3 -m pytest tests || echo $$PWD >> $(CURDIR)/.pybuild/tests-failed ;\ done set -e ;\ for PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE in $(PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGES); do \ echo "\n#######################\n# Run tests for $${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE}\n#######################\n" ;\ cd $(CURDIR)/propagator/$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} ;\ PYTHONPATH=$(TMP_DIST-PACKAGES_FOLDER) python3 -m pytest tests || echo $$PWD >> $(CURDIR)/.pybuild/tests-failed ;\ done test ! -e $(CURDIR)/.pybuild/tests-failed || { echo "Failed test suites:"; cat $(CURDIR)/.pybuild/tests-failed; false; } endif