From 15dfb97b3884d7fb86c4dc827caa8fb7ecef7757 Mon Sep 17 00:00:00 2001
From: Andre Anjos <andre.dos.anjos@gmail.com>
Date: Mon, 16 Nov 2020 19:05:38 +0100
Subject: [PATCH] [build,scripts,data] Rename nosetests specific mark
 expression to be more generic and enable pytest equivalent

---
 bob/devtools/build.py                         |  8 +++++---
 bob/devtools/data/recipe_append.yaml          |  1 +
 bob/devtools/scripts/alternative_nightlies.py |  2 +-
 bob/devtools/scripts/build.py                 | 15 +++++++++------
 bob/devtools/scripts/ci.py                    |  6 +++---
 bob/devtools/scripts/create.py                |  1 +
 bob/devtools/scripts/graph.py                 |  1 +
 bob/devtools/scripts/rebuild.py               | 14 ++++++++------
 bob/devtools/scripts/test.py                  | 14 ++++++++------
 conda/recipe_append.yaml                      |  1 +
 10 files changed, 38 insertions(+), 25 deletions(-)

diff --git a/bob/devtools/build.py b/bob/devtools/build.py
index bf1ed405..6084c7ce 100644
--- a/bob/devtools/build.py
+++ b/bob/devtools/build.py
@@ -699,11 +699,12 @@ if __name__ == "__main__":
         "to enable debug messages [default: %(default)s]",
     )
     parser.add_argument(
-        "--nose-eval-attr",
+        "--test-mark-expr",
         "-A",
         default="",
         help="Use this flag to avoid running certain tests during the build.  "
-        "It forwards all settings to ``nosetests --eval-attr=<settings>``",
+        "It forwards all settings to ``nosetests`` via --eval-attr=<settings>``"
+        " and ``pytest`` via -m=<settings>.",
     )
 
     args = parser.parse_args()
@@ -723,7 +724,8 @@ if __name__ == "__main__":
     bootstrap.set_environment("DOCSERVER", server)
     bootstrap.set_environment("LANG", "en_US.UTF-8")
     bootstrap.set_environment("LC_ALL", os.environ["LANG"])
-    bootstrap.set_environment("NOSE_EVAL_ATTR", args.nose_eval_attr)
+    bootstrap.set_environment("NOSE_EVAL_ATTR", args.test_mark_expr)
+    bootstrap.set_environment("PYTEST_ADDOPTS", f"-m '{args.test_mark_expr}'")
 
     # get information about the version of the package being built
     version, is_prerelease = check_version(args.work_dir, args.tag)
diff --git a/bob/devtools/data/recipe_append.yaml b/bob/devtools/data/recipe_append.yaml
index c0481152..f02e4e0b 100644
--- a/bob/devtools/data/recipe_append.yaml
+++ b/bob/devtools/data/recipe_append.yaml
@@ -2,3 +2,4 @@ build:
   script_env:
     - DOCSERVER
     - NOSE_EVAL_ATTR
+    - PYTEST_ADDOPTS
diff --git a/bob/devtools/scripts/alternative_nightlies.py b/bob/devtools/scripts/alternative_nightlies.py
index 3726479b..ad2179c4 100644
--- a/bob/devtools/scripts/alternative_nightlies.py
+++ b/bob/devtools/scripts/alternative_nightlies.py
@@ -14,7 +14,7 @@ Examples:
 
   2. Provide a list of key value pairs of arguments to be used as variables in the CI
 
-     $ bdt gitlab alt-nightlies -vv order.txt NOSE_EVAL_ATTR "not slow"
+     $ bdt gitlab alt-nightlies -vv order.txt TEST_MARK_EXPR "not slow"
 """
 )
 @click.argument(
diff --git a/bob/devtools/scripts/build.py b/bob/devtools/scripts/build.py
index d7fa57bd..d9404706 100644
--- a/bob/devtools/scripts/build.py
+++ b/bob/devtools/scripts/build.py
@@ -138,11 +138,12 @@ Examples:
 )
 @click.option(
     "-A",
-    "--nose-eval-attr",
-    envvar="NOSE_EVAL_ATTR",
+    "--test-mark-expr",
+    envvar="TEST_MARK_EXPR",
     default="",
-    help="Use this flag to avoid running certain tests during the build. "
-    "It forwards all settings to ``nosetests --eval-attr=<settings>``",
+    help="Use this flag to avoid running certain tests during the build.  "
+    "It forwards all settings to ``nosetests`` via --eval-attr=<settings>``"
+    " and ``pytest`` via -m=<settings>.",
 )
 @verbosity_option()
 @bdt.raise_on_error
@@ -159,7 +160,7 @@ def build(
     stable,
     dry_run,
     ci,
-    nose_eval_attr,
+    test_mark_expr,
 ):
     """Builds package through conda-build with stock configuration.
 
@@ -220,7 +221,9 @@ def build(
     set_environment("BOB_DOCUMENTATION_SERVER", doc_urls)
 
     # this is for testing and may limit which tests run
-    set_environment("NOSE_EVAL_ATTR", nose_eval_attr)
+    set_environment("NOSE_EVAL_ATTR", test_mark_expr)
+    set_environment("PYTEST_ADDOPTS", f"-m '{test_mark_expr}'")
+
 
     arch = conda_arch()
 
diff --git a/bob/devtools/scripts/ci.py b/bob/devtools/scripts/ci.py
index 4dc3e8bc..57773b3d 100644
--- a/bob/devtools/scripts/ci.py
+++ b/bob/devtools/scripts/ci.py
@@ -482,7 +482,7 @@ def test(ctx, dry_run):
         stable="CI_COMMIT_TAG" in os.environ,
         dry_run=dry_run,
         ci=True,
-        nose_eval_attr=os.environ.get("NOSE_EVAL_ATTR", ""),
+        test_mark_expr=os.environ.get("TEST_MARK_EXPR", ""),
     )
 
 
@@ -558,7 +558,7 @@ def build(ctx, dry_run, recipe_dir):
         stable="CI_COMMIT_TAG" in os.environ,
         dry_run=dry_run,
         ci=True,
-        nose_eval_attr=os.environ.get("NOSE_EVAL_ATTR", ""),
+        test_mark_expr=os.environ.get("TEST_MARK_EXPR", ""),
     )
 
 
@@ -705,7 +705,7 @@ def nightlies(ctx, order, dry_run):
             stable=stable,
             dry_run=dry_run,
             ci=True,
-            nose_eval_attr=os.environ.get("NOSE_EVAL_ATTR", ""),
+            test_mark_expr=os.environ.get("TEST_MARK_EXPR", ""),
         )
 
         is_master = os.environ["CI_COMMIT_REF_NAME"] == "master"
diff --git a/bob/devtools/scripts/create.py b/bob/devtools/scripts/create.py
index 61d3b6f1..bdd7c120 100644
--- a/bob/devtools/scripts/create.py
+++ b/bob/devtools/scripts/create.py
@@ -229,6 +229,7 @@ def create(
     # set some environment variables before continuing
     set_environment("DOCSERVER", server, os.environ)
     set_environment("NOSE_EVAL_ATTR", "", os.environ)
+    set_environment("PYTEST_ADDOPTS", "", os.environ)
 
     logger.debug(
         'This package is considered part of group "%s" - tunning '
diff --git a/bob/devtools/scripts/graph.py b/bob/devtools/scripts/graph.py
index be4cddc0..28d189c6 100644
--- a/bob/devtools/scripts/graph.py
+++ b/bob/devtools/scripts/graph.py
@@ -201,6 +201,7 @@ def graph(
 
     # avoids conda-build complaints
     set_environment("NOSE_EVAL_ATTR", "")
+    set_environment("PYTEST_ADDOPTS", "")
 
     adj_matrix = compute_adjencence_matrix(
         gl, package, conda_config, upload_channel, deptypes=deptypes
diff --git a/bob/devtools/scripts/rebuild.py b/bob/devtools/scripts/rebuild.py
index 33e2c0d3..1297a227 100644
--- a/bob/devtools/scripts/rebuild.py
+++ b/bob/devtools/scripts/rebuild.py
@@ -126,11 +126,12 @@ Examples:
 )
 @click.option(
     "-A",
-    "--nose-eval-attr",
-    envvar="NOSE_EVAL_ATTR",
+    "--test-mark-expr",
+    envvar="TEST_MARK_EXPR",
     default="",
-    help="Use this flag to avoid running certain tests during the build. "
-    "It forwards all settings to ``nosetests --eval-attr=<settings>``",
+    help="Use this flag to avoid running certain tests during the build.  "
+    "It forwards all settings to ``nosetests`` via --eval-attr=<settings>``"
+    " and ``pytest`` via -m=<settings>.",
 )
 @verbosity_option()
 @bdt.raise_on_error
@@ -146,7 +147,7 @@ def rebuild(
     stable,
     dry_run,
     ci,
-    nose_eval_attr,
+    test_mark_expr,
 ):
     """Tests and rebuilds packages through conda-build with stock
     configuration.
@@ -212,7 +213,8 @@ def rebuild(
     set_environment("BOB_DOCUMENTATION_SERVER", doc_urls)
 
     # this is for testing and may limit which tests run
-    set_environment("NOSE_EVAL_ATTR", nose_eval_attr)
+    set_environment("NOSE_EVAL_ATTR", test_mark_expr)
+    set_environment("PYTEST_ADDOPTS", f"-m '{test_mark_expr}'")
 
     arch = conda_arch()
 
diff --git a/bob/devtools/scripts/test.py b/bob/devtools/scripts/test.py
index f1204256..6721d40e 100644
--- a/bob/devtools/scripts/test.py
+++ b/bob/devtools/scripts/test.py
@@ -117,11 +117,12 @@ Examples:
 )
 @click.option(
     "-A",
-    "--nose-eval-attr",
-    envvar="NOSE_EVAL_ATTR",
+    "--test-mark-expr",
+    envvar="TEST_MARK_EXPR",
     default="",
-    help="Use this flag to avoid running certain tests during the build. "
-    "It forwards all settings to ``nosetests --eval-attr=<settings>``",
+    help="Use this flag to avoid running certain tests during the build.  "
+    "It forwards all settings to ``nosetests`` via --eval-attr=<settings>``"
+    " and ``pytest`` via -m=<settings>.",
 )
 @verbosity_option()
 @bdt.raise_on_error
@@ -136,7 +137,7 @@ def test(
     stable,
     dry_run,
     ci,
-    nose_eval_attr,
+    test_mark_expr,
 ):
     """Tests (pre-built) package through conda-build with stock configuration.
 
@@ -194,7 +195,8 @@ def test(
     set_environment("BOB_DOCUMENTATION_SERVER", doc_urls)
 
     # this is for testing and may limit which tests run
-    set_environment("NOSE_EVAL_ATTR", nose_eval_attr)
+    set_environment("NOSE_EVAL_ATTR", test_mark_expr)
+    set_environment("PYTEST_ADDOPTS", f"-m '{test_mark_expr}'")
 
     arch = conda_arch()
     for p in package:
diff --git a/conda/recipe_append.yaml b/conda/recipe_append.yaml
index c0481152..f02e4e0b 100644
--- a/conda/recipe_append.yaml
+++ b/conda/recipe_append.yaml
@@ -2,3 +2,4 @@ build:
   script_env:
     - DOCSERVER
     - NOSE_EVAL_ATTR
+    - PYTEST_ADDOPTS
-- 
GitLab