diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index e5c71dba4cbf840ba464a3efd759d9cfc1172420..391c3264791e33286f6eb975653cf34e2565cd93 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -21,12 +21,9 @@ jobs:
     strategy:
       matrix:
           python-version: [3.7, 3.8, 3.9]
-          services: [release]
-          include:
-          - services: release
-            EXTRAS: "all"
-            REQUIREMENTS_LEVEL: "pypi"
-
+          requirements-level: [pypi]
+    env:
+      EXTRAS: tests
     steps:
       - name: Checkout
         uses: actions/checkout@v2
@@ -39,18 +36,18 @@ jobs:
       - name: Generate dependencies
         run: |
           pip install wheel requirements-builder
-          requirements-builder -e ${{ matrix.EXTRAS }} --level=${{ matrix.REQUIREMENTS_LEVEL }} setup.py > .${{ matrix.REQUIREMENTS_LEVEL }}-${{ matrix.python-version }}-requirements.txt
+          requirements-builder -e $EXTRAS --level=${{ matrix.requirements-level }} setup.py > .${{ matrix.requirements-level }}-${{ matrix.python-version }}-requirements.txt
 
       - name: Cache pip
         uses: actions/cache@v2
         with:
           path: ~/.cache/pip
-          key: ${{ runner.os }}-pip-${{ hashFiles('.${{ matrix.REQUIREMENTS_LEVEL }}-${{ matrix.python-version }}-requirements.txt') }}
+          key: ${{ runner.os }}-pip-${{ hashFiles('.${{ matrix.requirements-level }}-${{ matrix.python-version }}-requirements.txt') }}
 
       - name: Install dependencies
         run: |
-          pip install -r .${{matrix.REQUIREMENTS_LEVEL}}-${{ matrix.python-version }}-requirements.txt
-          pip install .[${{ matrix.EXTRAS }}]
+          pip install -r .${{ matrix.requirements-level }}-${{ matrix.python-version }}-requirements.txt
+          pip install .[$EXTRAS]
           pip freeze
 
       - name: Run tests
diff --git a/run-tests.sh b/run-tests.sh
index 0299abc2dc9b853ff64bc25436fbfc02f98aa0eb..f43b34f5189f97765a83c37e858673aeeb61febf 100755
--- a/run-tests.sh
+++ b/run-tests.sh
@@ -9,10 +9,7 @@
 # Invenio is free software; you can redistribute it and/or modify it
 # under the terms of the MIT License; see LICENSE file for more details.
 
-python -m check_manifest && \
-python -m setup extract_messages --dry-run
-python -m sphinx.cmd.build -qnNW docs docs/_build/html && \
+python -m check_manifest
+python -m setup extract_messages --output-file /dev/null
+python -m sphinx.cmd.build -qnNW docs docs/_build/html
 python -m pytest
-python -m sphinx.cmd.build -qnNW -b doctest docs docs/_build/doctest
-tests_exit_code=$?
-exit "$tests_exit_code"
diff --git a/setup.cfg b/setup.cfg
index 9f66d08f18b958ff68d914545d4cdcde7812a5ca..0ab461f660ffd81a4ab7773c50e50156685cea24 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -43,15 +43,15 @@ install_requires =
 
 [options.extras_require]
 tests =
-    pytest-black>=0.3.0,<0.3.10
+    pytest-black>=0.3.0
+    pytest-invenio>=1.4.5
     invenio-config>=1.0.3
-    invenio-theme>=1.3.20
     invenio-db[versioning]>=1.0.14
-    mock>=1.3.0
-    pytest-invenio>=1.4.5
-    sphinx>=4.5
     invenio-files-rest>=1.3.2
     invenio-records-files>=1.2.1
+    invenio-theme>=1.3.20
+    mock>=1.3.0
+    sphinx>=4.5
 # Kept for backwards compatibility
 docs =
 files =