commit:     87a034bd840d2d9095bccb29e7cc0922ec29b4ad
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Mon Jul 21 12:40:20 2025 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Fri Jul 25 05:56:44 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=87a034bd

python-utils-r1.eclass: Add EPYTEST_RERUNS

Add EPYTEST_RERUNS variable to enable pytest-rerunfailures with
a specified rerun count.  This should provide a more streamlined
approach to handling flaky test suites.

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
Part-of: https://github.com/gentoo/gentoo/pull/43094
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 eclass/distutils-r1.eclass    |  3 +++
 eclass/python-utils-r1.eclass | 22 ++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass
index 7b025261eb2b..c59bdce17581 100644
--- a/eclass/distutils-r1.eclass
+++ b/eclass/distutils-r1.eclass
@@ -554,6 +554,9 @@ distutils_enable_tests() {
                        ;&
                pytest)
                        test_pkgs+=' 
>=dev-python/pytest-7.4.4[${PYTHON_USEDEP}]'
+                       if [[ -n ${EPYTEST_RERUNS} ]]; then
+                               test_pkgs+=' 
dev-python/pytest-rerunfailures[${PYTHON_USEDEP}]'
+                       fi
                        if [[ -n ${EPYTEST_TIMEOUT} ]]; then
                                test_pkgs+=' 
dev-python/pytest-timeout[${PYTHON_USEDEP}]'
                        fi

diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass
index 9cdfdc87019f..13ed87501200 100644
--- a/eclass/python-utils-r1.eclass
+++ b/eclass/python-utils-r1.eclass
@@ -1354,6 +1354,16 @@ _set_epytest_plugins() {
        fi
 }
 
+# @ECLASS_VARIABLE: EPYTEST_RERUNS
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# If set to a non-empty value, enables pytest-rerunfailures plugin
+# and sets rerun count to the specified value.  This variable can be
+# either set in ebuilds with flaky tests, or by user to try if it helps.
+# If this variable is set prior to calling distutils_enable_tests
+# in distutils-r1, a test dependency on dev-python/pytest-rerunfailures
+# is added automatically.
+
 # @ECLASS_VARIABLE: EPYTEST_TIMEOUT
 # @DEFAULT_UNSET
 # @DESCRIPTION:
@@ -1517,6 +1527,18 @@ epytest() {
                )
        fi
 
+       if [[ -n ${EPYTEST_RERUNS} ]]; then
+               if [[ ${PYTEST_PLUGINS} != *pytest_rerunfailures* ]]; then
+                       args+=(
+                               -p rerunfailures
+                       )
+               fi
+
+               args+=(
+                       "--reruns=${EPYTEST_RERUNS}"
+               )
+       fi
+
        if [[ -n ${EPYTEST_TIMEOUT} ]]; then
                if [[ ${PYTEST_PLUGINS} != *pytest_timeout* ]]; then
                        args+=(

Reply via email to