[med-svn] [Git][med-team/cwltest][master] 6 commits: New upstream version

Michael R. Crusoe (@crusoe) gitlab at salsa.debian.org
Wed Jan 7 14:36:33 GMT 2026



Michael R. Crusoe pushed to branch master at Debian Med / cwltest


Commits:
5725674d by Michael R. Crusoe at 2026-01-07T15:30:48+01:00
New upstream version

- - - - -
7933e852 by Michael R. Crusoe at 2026-01-07T15:30:49+01:00
New upstream version 2.6.20251216093331
- - - - -
9b855d6f by Michael R. Crusoe at 2026-01-07T15:30:50+01:00
Update upstream source from tag 'upstream/2.6.20251216093331'

Update to upstream version '2.6.20251216093331'
with Debian dir 1e265279e7fe61a8f42a1e3c16ba1816121851a5
- - - - -
8ebe951a by Michael R. Crusoe at 2026-01-07T15:30:50+01:00
Standards-Version: 4.7.3 (routine-update)

- - - - -
86da7994 by Michael R. Crusoe at 2026-01-07T15:31:00+01:00
debputy lint --auto-fix (routine-update)

- - - - -
22820bc2 by Michael R. Crusoe at 2026-01-07T15:35:34+01:00
routine-update: Ready to upload to unstable

- - - - -


23 changed files:

- .flake8
- .github/workflows/ci-tests.yml
- .github/workflows/codeql-analysis.yml
- Makefile
- PKG-INFO
- README.rst
- cwltest.egg-info/PKG-INFO
- cwltest.egg-info/requires.txt
- cwltest/_version.py
- cwltest/compare.py
- cwltest/hooks.py
- cwltest/main.py
- cwltest/plugin.py
- cwltest/utils.py
- debian/changelog
- debian/control
- dev-requirements.txt
- mypy-requirements.txt
- pyproject.toml
- requirements.txt
- test-requirements.txt
- tests/util.py
- tox.ini


Changes:

=====================================
.flake8
=====================================
@@ -2,8 +2,7 @@
 ignore = E203,W503
 max-line-length = 100
 select = B,C,E,F,W,T4
-extend-ignore = E501,B905
-# when Python 3.10 is the minimum version, re-enable check B905 for zip + strict
+extend-ignore = E501
 extend-select = B9
 per-file-ignores=
     ./tests/test_badgedir.py:B950


=====================================
.github/workflows/ci-tests.yml
=====================================
@@ -22,7 +22,7 @@ jobs:
       matrix:
         # The README.rst file mentions the versions tested, please update it as well
         py-ver-major: [3]
-        py-ver-minor: [9, 10, 11, 12, 13, 14]
+        py-ver-minor: [10, 11, 12, 13, 14]
         step: [lint, unit, mypy, bandit]
 
     env:
@@ -30,12 +30,12 @@ jobs:
       TOXENV: ${{ format('py{0}{1}-{2}', matrix.py-ver-major, matrix.py-ver-minor, matrix.step) }}
 
     steps:
-      - uses: actions/checkout at v5
+      - uses: actions/checkout at v6
         with:
           fetch-depth: 0
 
       - name: Set up Python
-        uses: actions/setup-python at v5
+        uses: actions/setup-python at v6
         with:
           python-version: ${{ env.py-semver }}
           allow-prereleases: true
@@ -55,7 +55,7 @@ jobs:
 
       - name: MyPy cache
         if: ${{ matrix.step == 'mypy' }}
-        uses: actions/cache at v4
+        uses: actions/cache at v5
         with:
           path: .mypy_cache/${{ env.py-semver }}
           key: mypy-${{ env.py-semver }}
@@ -84,12 +84,12 @@ jobs:
       TOXENV: ${{ format('py313-{0}', matrix.step) }}
 
     steps:
-      - uses: actions/checkout at v5
+      - uses: actions/checkout at v6
         with:
           fetch-depth: 0
 
       - name: Set up Python
-        uses: actions/setup-python at v5
+        uses: actions/setup-python at v6
         with:
           python-version: ${{ env.py-semver }}
           cache: pip
@@ -116,10 +116,10 @@ jobs:
     runs-on: ubuntu-24.04
 
     steps:
-      - uses: actions/checkout at v5
+      - uses: actions/checkout at v6
 
       - name: Set up Python
-        uses: actions/setup-python at v5
+        uses: actions/setup-python at v6
         with:
           python-version: "3.13"
           cache: pip


=====================================
.github/workflows/codeql-analysis.yml
=====================================
@@ -19,7 +19,7 @@ jobs:
 
     steps:
     - name: Checkout repository
-      uses: actions/checkout at v5
+      uses: actions/checkout at v6
       with:
         # We must fetch at least the immediate parents so that if this is
         # a pull request then we can checkout the head.
@@ -32,9 +32,9 @@ jobs:
       
     # Initializes the CodeQL tools for scanning.
     - name: Initialize CodeQL
-      uses: github/codeql-action/init at v3
+      uses: github/codeql-action/init at v4
       with:
         languages: python
 
     - name: Perform CodeQL Analysis
-      uses: github/codeql-action/analyze at v3
+      uses: github/codeql-action/analyze at v4


=====================================
Makefile
=====================================
@@ -168,7 +168,7 @@ mypy: $(PYSOURCES)
 	MYPYPATH=$$MYPYPATH:mypy-stubs mypy $^
 
 pyupgrade: $(filter-out schema_salad/metaschema.py,$(PYSOURCES))
-	pyupgrade --exit-zero-even-if-changed --py39-plus $^
+	pyupgrade --exit-zero-even-if-changed --py310-plus $^
 	auto-walrus $^
 
 release-test: FORCE


=====================================
PKG-INFO
=====================================
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: cwltest
-Version: 2.6.20250818005349
+Version: 2.6.20251216093331
 Summary: Common Workflow Language testing framework
 Author-email: Common workflow language working group <common-workflow-language at googlegroups.com>
 License: Apache 2.0
@@ -12,19 +12,18 @@ Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: POSIX
 Classifier: Operating System :: MacOS :: MacOS X
 Classifier: Development Status :: 5 - Production/Stable
-Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
 Classifier: Programming Language :: Python :: 3.14
 Classifier: Typing :: Typed
-Requires-Python: <3.15,>=3.9
+Requires-Python: <3.15,>=3.10
 Description-Content-Type: text/x-rst
 License-File: LICENSE
 Requires-Dist: schema-salad<9,>=5.0.20200220195218
 Requires-Dist: junit-xml>=1.8
-Requires-Dist: pytest<9,>=7
+Requires-Dist: pytest<10,>=8.3
 Requires-Dist: defusedxml
 Provides-Extra: pytest-plugin
 Requires-Dist: pytest; extra == "pytest-plugin"
@@ -64,7 +63,7 @@ This is a testing tool for checking the output of Tools and Workflows described
 with the Common Workflow Language.  Among other uses, it is used to run the CWL
 conformance tests.
 
-This is written and tested for Python 3.9, 3.10, 3.11, 3.12, and 3.13.
+This is written and tested for Python 3.10, 3.11, 3.12, 3.13, and 3.14
 
 .. contents:: Table of Contents
    :local:


=====================================
README.rst
=====================================
@@ -32,7 +32,7 @@ This is a testing tool for checking the output of Tools and Workflows described
 with the Common Workflow Language.  Among other uses, it is used to run the CWL
 conformance tests.
 
-This is written and tested for Python 3.9, 3.10, 3.11, 3.12, and 3.13.
+This is written and tested for Python 3.10, 3.11, 3.12, 3.13, and 3.14
 
 .. contents:: Table of Contents
    :local:


=====================================
cwltest.egg-info/PKG-INFO
=====================================
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: cwltest
-Version: 2.6.20250818005349
+Version: 2.6.20251216093331
 Summary: Common Workflow Language testing framework
 Author-email: Common workflow language working group <common-workflow-language at googlegroups.com>
 License: Apache 2.0
@@ -12,19 +12,18 @@ Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: POSIX
 Classifier: Operating System :: MacOS :: MacOS X
 Classifier: Development Status :: 5 - Production/Stable
-Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
 Classifier: Programming Language :: Python :: 3.14
 Classifier: Typing :: Typed
-Requires-Python: <3.15,>=3.9
+Requires-Python: <3.15,>=3.10
 Description-Content-Type: text/x-rst
 License-File: LICENSE
 Requires-Dist: schema-salad<9,>=5.0.20200220195218
 Requires-Dist: junit-xml>=1.8
-Requires-Dist: pytest<9,>=7
+Requires-Dist: pytest<10,>=8.3
 Requires-Dist: defusedxml
 Provides-Extra: pytest-plugin
 Requires-Dist: pytest; extra == "pytest-plugin"
@@ -64,7 +63,7 @@ This is a testing tool for checking the output of Tools and Workflows described
 with the Common Workflow Language.  Among other uses, it is used to run the CWL
 conformance tests.
 
-This is written and tested for Python 3.9, 3.10, 3.11, 3.12, and 3.13.
+This is written and tested for Python 3.10, 3.11, 3.12, 3.13, and 3.14
 
 .. contents:: Table of Contents
    :local:


=====================================
cwltest.egg-info/requires.txt
=====================================
@@ -1,6 +1,6 @@
 schema-salad<9,>=5.0.20200220195218
 junit-xml>=1.8
-pytest<9,>=7
+pytest<10,>=8.3
 defusedxml
 
 [pytest-plugin]


=====================================
cwltest/_version.py
=====================================
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
 commit_id: COMMIT_ID
 __commit_id__: COMMIT_ID
 
-__version__ = version = '2.6.20250818005349'
-__version_tuple__ = version_tuple = (2, 6, 20250818005349)
+__version__ = version = '2.6.20251216093331'
+__version_tuple__ = version_tuple = (2, 6, 20251216093331)
 
 __commit_id__ = commit_id = None


=====================================
cwltest/compare.py
=====================================
@@ -2,7 +2,8 @@
 
 import hashlib
 import json
-from typing import Any, Callable, Optional
+from collections.abc import Callable
+from typing import Any
 
 import cwltest.stdfsaccess
 
@@ -14,7 +15,7 @@ class CompareFail(Exception):
 
     @classmethod
     def format(
-        cls, expected: Any, actual: Any, cause: Optional[Any] = None
+        cls, expected: Any, actual: Any, cause: Any | None = None
     ) -> "CompareFail":
         """Load the difference details into the error message."""
         message = "expected: {}\ngot: {}".format(
@@ -197,10 +198,7 @@ def _compare_checksum(expected: dict[str, Any], actual: dict[str, Any]) -> None:
 
 
 def _compare_size(expected: dict[str, Any], actual: dict[str, Any]) -> None:
-    if "path" in actual:
-        path = actual["path"]
-    else:
-        path = actual["location"]
+    path = actual.get("path", actual["location"])
 
     actual_size_on_disk = fs_access.size(path)
 
@@ -233,31 +231,32 @@ def compare(expected: Any, actual: Any, skip_details: bool = False) -> None:
         raise CompareFail.format(expected, actual)
 
     try:
-        if isinstance(expected, dict):
-            if not isinstance(actual, dict):
-                raise CompareFail.format(expected, actual)
-
-            if expected.get("class") == "File":
-                _compare_file(expected, actual, skip_details)
-            elif expected.get("class") == "Directory":
-                _compare_directory(expected, actual, skip_details)
-            else:
-                _compare_dict(expected, actual, skip_details)
-
-        elif isinstance(expected, list):
-            if not isinstance(actual, list):
-                raise CompareFail.format(expected, actual)
-
-            if len(expected) != len(actual):
-                raise CompareFail.format(expected, actual, "lengths don't match")
-            for c in range(0, len(expected)):
-                try:
-                    compare(expected[c], actual[c], skip_details)
-                except CompareFail as e:
-                    raise CompareFail.format(expected, actual, e) from e
-        else:
-            if expected != actual:
-                raise CompareFail.format(expected, actual)
+        match expected:
+            case dict():
+                if not isinstance(actual, dict):
+                    raise CompareFail.format(expected, actual)
+
+                match expected.get("class"):
+                    case "File":
+                        _compare_file(expected, actual, skip_details)
+                    case "Directory":
+                        _compare_directory(expected, actual, skip_details)
+                    case _:
+                        _compare_dict(expected, actual, skip_details)
+            case list():
+                if not isinstance(actual, list):
+                    raise CompareFail.format(expected, actual)
+
+                if len(expected) != len(actual):
+                    raise CompareFail.format(expected, actual, "lengths don't match")
+                for c in range(0, len(expected)):
+                    try:
+                        compare(expected[c], actual[c], skip_details)
+                    except CompareFail as e:
+                        raise CompareFail.format(expected, actual, e) from e
+            case _:
+                if expected != actual:
+                    raise CompareFail.format(expected, actual)
 
     except Exception as e:
         raise CompareFail(str(e)) from e


=====================================
cwltest/hooks.py
=====================================
@@ -1,13 +1,13 @@
 """Hooks for pytest-cwl users."""
 
-from typing import Any, Optional
+from typing import Any
 
 from cwltest import utils
 
 
 def pytest_cwl_execute_test(  # type: ignore[empty-body]
-    config: utils.CWLTestConfig, processfile: str, jobfile: Optional[str]
-) -> tuple[int, Optional[dict[str, Any]]]:
+    config: utils.CWLTestConfig, processfile: str, jobfile: str | None
+) -> tuple[int, dict[str, Any] | None]:
     """
     Execute CWL test using a Python function instead of a command line runner.
 


=====================================
cwltest/main.py
=====================================
@@ -6,7 +6,7 @@ import os
 import sys
 from collections import Counter, defaultdict
 from concurrent.futures import ThreadPoolExecutor
-from typing import Optional, cast
+from typing import cast
 
 import junit_xml
 import schema_salad.avro
@@ -119,7 +119,7 @@ def main() -> int:
     failures = 0
     unsupported = 0
     suite_name, _ = os.path.splitext(os.path.basename(args.test))
-    report: Optional[junit_xml.TestSuite] = junit_xml.TestSuite(suite_name, [])
+    report: junit_xml.TestSuite | None = junit_xml.TestSuite(suite_name, [])
 
     load_optional_fsaccess_plugin()
 


=====================================
cwltest/plugin.py
=====================================
@@ -27,8 +27,8 @@ class TestRunner(Protocol):
     """Protocol to type-check test runner functions via the pluggy hook."""
 
     def __call__(
-        self, config: utils.CWLTestConfig, processfile: str, jobfile: Optional[str]
-    ) -> list[Optional[dict[str, Any]]]:
+        self, config: utils.CWLTestConfig, processfile: str, jobfile: str | None
+    ) -> list[dict[str, Any] | None]:
         """Type signature for pytest_cwl_execute_test hook results."""
         ...
 
@@ -224,7 +224,7 @@ class CWLItem(pytest.Item):
                 )
             )
 
-    def reportinfo(self) -> tuple[Union["os.PathLike[str]", str], Optional[int], str]:
+    def reportinfo(self) -> tuple[Union["os.PathLike[str]", str], int | None, str]:
         """Status report."""
         return self.path, 0, "cwl test: %s" % self.name
 
@@ -372,7 +372,7 @@ def _doc_options() -> argparse.ArgumentParser:
 
 def pytest_collect_file(
     file_path: Path, parent: pytest.Collector
-) -> Optional[pytest.Collector]:
+) -> pytest.Collector | None:
     """Is this file for us."""
     if (
         file_path.suffix == ".yml" or file_path.suffix == ".yaml"
@@ -393,7 +393,7 @@ def pytest_configure(config: pytest.Config) -> None:
 def _zip_results(
     cwl_results: list[tuple[dict[str, Any], utils.TestResult]],
 ) -> tuple[list[dict[str, Any]], list[utils.TestResult]]:
-    tests, results = (list(item) for item in zip(*cwl_results))
+    tests, results = (list(item) for item in zip(*cwl_results, strict=True))
     return tests, results
 
 


=====================================
cwltest/utils.py
=====================================
@@ -11,7 +11,7 @@ from collections import Counter, defaultdict
 from collections.abc import Iterable, MutableMapping, MutableSequence
 from importlib.metadata import EntryPoint, entry_points
 from importlib.resources import files
-from typing import Any, Optional, Union, cast
+from typing import Any, cast
 from urllib.parse import urljoin
 
 import junit_xml
@@ -36,23 +36,23 @@ class CWLTestConfig:
         self,
         entry: str,
         entry_line: str,
-        basedir: Optional[str] = None,
-        test_baseuri: Optional[str] = None,
-        test_basedir: Optional[str] = None,
-        outdir: Optional[str] = None,
-        classname: Optional[str] = None,
-        tool: Optional[str] = None,
-        args: Optional[list[str]] = None,
-        testargs: Optional[list[str]] = None,
-        timeout: Optional[int] = None,
-        verbose: Optional[bool] = None,
-        runner_quiet: Optional[bool] = None,
+        basedir: str | None = None,
+        test_baseuri: str | None = None,
+        test_basedir: str | None = None,
+        outdir: str | None = None,
+        classname: str | None = None,
+        tool: str | None = None,
+        args: list[str] | None = None,
+        testargs: list[str] | None = None,
+        timeout: int | None = None,
+        verbose: bool | None = None,
+        runner_quiet: bool | None = None,
     ) -> None:
         """Initialize test configuration."""
         self.basedir: str = basedir or os.getcwd()
         self.test_baseuri: str = test_baseuri or "file://" + self.basedir
         self.test_basedir: str = test_basedir or self.basedir
-        self.outdir: Optional[str] = outdir
+        self.outdir: str | None = outdir
         self.classname: str = classname or ""
         self.entry = urljoin(
             self.test_baseuri, os.path.basename(entry) + f"#L{entry_line}"
@@ -60,7 +60,7 @@ class CWLTestConfig:
         self.tool: str = tool or "cwl-runner"
         self.args: list[str] = args or []
         self.testargs: list[str] = testargs or []
-        self.timeout: Optional[int] = timeout
+        self.timeout: int | None = timeout
         self.verbose: bool = verbose or False
         self.runner_quiet: bool = runner_quiet or True
 
@@ -70,11 +70,11 @@ class CWLTestReport:
 
     def __init__(
         self,
-        id: Union[int, str],
+        id: int | str,
         category: list[str],
         entry: str,
         tool: str,
-        job: Optional[str],
+        job: str | None,
     ) -> None:
         """Initialize a CWLTestReport object."""
         self.id = id
@@ -96,7 +96,7 @@ class TestResult:
         classname: str,
         entry: str,
         tool: str,
-        job: Optional[str],
+        job: str | None,
         message: str = "",
     ) -> None:
         """Initialize a TestResult object."""
@@ -240,7 +240,7 @@ def generate_badges(
 
 def get_test_number_by_key(
     tests: list[dict[str, str]], key: str, value: str
-) -> Optional[int]:
+) -> int | None:
     """Retrieve the test index from its name."""
     for i, test in enumerate(tests):
         if key in test and test[key] == value:
@@ -256,7 +256,7 @@ def load_and_validate_tests(path: str) -> tuple[Any, dict[str, Any]]:
     """
     schema_resource = files("cwltest").joinpath("cwltest-schema.yml")
     with schema_resource.open("r", encoding="utf-8") as fp:
-        cache: Optional[dict[str, Union[str, Graph, bool]]] = {
+        cache: dict[str, str | Graph | bool] | None = {
             "https://w3id.org/cwl/cwltest/cwltest-schema.yml": fp.read()
         }
     (
@@ -283,8 +283,8 @@ def load_and_validate_tests(path: str) -> tuple[Any, dict[str, Any]]:
 def parse_results(
     results: Iterable[TestResult],
     tests: list[dict[str, Any]],
-    suite_name: Optional[str] = None,
-    report: Optional[junit_xml.TestSuite] = None,
+    suite_name: str | None = None,
+    report: junit_xml.TestSuite | None = None,
 ) -> tuple[
     int,  # total
     int,  # passed
@@ -294,7 +294,7 @@ def parse_results(
     dict[str, list[CWLTestReport]],  # passed for each tag
     dict[str, list[CWLTestReport]],  # failures for each tag
     dict[str, list[CWLTestReport]],  # unsupported for each tag
-    Optional[junit_xml.TestSuite],
+    junit_xml.TestSuite | None,
 ]:
     """
     Parse the results and return statistics and an optional report.
@@ -366,10 +366,10 @@ def parse_results(
 def prepare_test_command(
     tool: str,
     args: list[str],
-    testargs: Optional[list[str]],
+    testargs: list[str] | None,
     test: dict[str, Any],
     cwd: str,
-    quiet: Optional[bool] = True,
+    quiet: bool | None = True,
 ) -> list[str]:
     """Turn the test into a command line."""
     test_command = [tool]
@@ -407,7 +407,7 @@ def prepare_test_command(
 def prepare_test_paths(
     test: dict[str, str],
     cwd: str,
-) -> tuple[str, Optional[str]]:
+) -> tuple[str, str | None]:
     """Determine the test path and the tool path."""
     cwd = schema_salad.ref_resolver.file_uri(cwd)
     processfile = test["tool"]
@@ -424,7 +424,7 @@ def prepare_test_paths(
 def run_test_plain(
     config: CWLTestConfig,
     test: dict[str, str],
-    test_number: Optional[int] = None,
+    test_number: int | None = None,
 ) -> TestResult:
     """Plain test runner."""
     out: dict[str, Any] = {}
@@ -443,7 +443,7 @@ def run_test_plain(
 
     if test_number is not None:
         number = str(test_number)
-    process: Optional[subprocess.Popen[str]] = None
+    process: subprocess.Popen[str] | None = None
     try:
         cwd = os.getcwd()
         test_command = prepare_test_command(
@@ -668,7 +668,7 @@ def load_optional_fsaccess_plugin() -> None:
 
     try:
         # The interface to importlib.metadata.entry_points() changed
-        # several times between Python 3.9 and 3.13; the code below
+        # several times between Python 3.10 and 3.13; the code below
         # actually works fine on all of them but there's no single
         # mypy annotation that works across of them.  Explicitly cast
         # it to a consistent type to make mypy shut up.


=====================================
debian/changelog
=====================================
@@ -1,3 +1,11 @@
+cwltest (2.6.20251216093331-1) unstable; urgency=medium
+
+  * New upstream version
+  * Standards-Version: 4.7.3 (routine-update)
+  * debputy lint --auto-fix (routine-update)
+
+ -- Michael R. Crusoe <crusoe at debian.org>  Wed, 07 Jan 2026 15:31:02 +0100
+
 cwltest (2.6.20250818005349-2) unstable; urgency=medium
 
   * Team upload.


=====================================
debian/control
=====================================
@@ -2,6 +2,7 @@ Source: cwltest
 Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.org>
 Uploaders: Michael R. Crusoe <crusoe at debian.org>
 Section: science
+Priority: optional
 Build-Depends: debhelper-compat (= 13),
                dh-sequence-python3,
                python3,
@@ -22,7 +23,7 @@ Build-Depends: debhelper-compat (= 13),
                cwltool <!nocheck>,
                python3-typing-extensions <!nocheck> <!nodoc>,
                help2man <!nodoc>
-Standards-Version: 4.7.2
+Standards-Version: 4.7.3
 Vcs-Browser: https://salsa.debian.org/med-team/cwltest
 Vcs-Git: https://salsa.debian.org/med-team/cwltest.git
 Homepage: https://www.commonwl.org
@@ -35,7 +36,7 @@ Depends: ${python3:Depends},
          python3-junit.xml,
          python3-schema-salad,
          python3-defusedxml,
-         python3-ruamel.yaml,
+         python3-ruamel.yaml
 Recommends: python3-pytest
 Suggests: cwl-runner
 Description: Common Workflow Language testing framework


=====================================
dev-requirements.txt
=====================================
@@ -1,5 +1,5 @@
 diff_cover
-black ~= 25.1
+black ~= 25.12
 pylint
 pep257
 pydocstyle


=====================================
mypy-requirements.txt
=====================================
@@ -1,5 +1,4 @@
-mypy==1.17.1
-pytest >= 8.3, < 9
+mypy==1.19.1
 types-setuptools
 types-requests
 types-PyYAML


=====================================
pyproject.toml
=====================================
@@ -17,7 +17,6 @@ classifiers = [
     "Operating System :: POSIX",
     "Operating System :: MacOS :: MacOS X",
     "Development Status :: 5 - Production/Stable",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
@@ -25,7 +24,7 @@ classifiers = [
     "Programming Language :: Python :: 3.14",
     "Typing :: Typed",
 ]
-requires-python = ">=3.9,<3.15"
+requires-python = ">=3.10,<3.15"
 dynamic = ["version", "dependencies"]
 
 [project.readme]


=====================================
requirements.txt
=====================================
@@ -1,4 +1,4 @@
 schema-salad >= 5.0.20200220195218, < 9
 junit-xml >= 1.8
-pytest >= 7, < 9
+pytest >= 8.3, < 10
 defusedxml


=====================================
test-requirements.txt
=====================================
@@ -1,5 +1,4 @@
 cwlref-runner
 cwltool
-pytest >= 7, < 9
 pytest-cov
 pytest-xdist


=====================================
tests/util.py
=====================================
@@ -6,7 +6,6 @@ import subprocess  # nosec
 from contextlib import ExitStack
 from importlib.resources import as_file, files
 from pathlib import Path
-from typing import Optional
 
 
 def get_data(filename: str) -> str:
@@ -28,7 +27,7 @@ def get_data(filename: str) -> str:
 
 
 def run_with_mock_cwl_runner(
-    args: list[str], cwl_runner: Optional[str] = None
+    args: list[str], cwl_runner: str | None = None
 ) -> tuple[int, str, str]:
     """Bind a mock cwlref-runner implementation to cwltest."""
     if cwl_runner is None:


=====================================
tox.ini
=====================================
@@ -1,9 +1,9 @@
 [tox]
 envlist =
-  py3{9,10,11,12,13,14}-lint,
-  py3{9,10,11,12,13,14}-unit,
-  py3{9,10,11,12,13,14}-bandit,
-  py3{9,10,11,12,13,14}-mypy,
+  py3{10,11,12,13,14}-lint,
+  py3{10,11,12,13,14}-unit,
+  py3{10,11,12,13,14}-bandit,
+  py3{10,11,12,13,14}-mypy,
   py312-lintreadme,
   py312-pydocstyle
 
@@ -17,7 +17,6 @@ testpaths = tests
 
 [gh-actions]
 python =
-  3.9: py39
   3.10: py310
   3.11: py311
   3.12: py312
@@ -26,13 +25,13 @@ python =
 
 [testenv]
 skipsdist =
-  py3{9,10,11,12,13,14}-!{unit,mypy,lintreadme} = True
+  py3{10,11,12,13,14}-!{unit,mypy,lintreadme} = True
 
 description =
-  py3{9,10,11,12,13,14}-unit: Run the unit tests
-  py3{9,10,11,12,13,14}-lint: Lint the Python code
-  py3{9,10,11,12,13,14}-bandit: Search for common security issues
-  py3{9,10,11,12,13,14}-mypy: Check for type safety
+  py3{10,11,12,13,14}-unit: Run the unit tests
+  py3{10,11,12,13,14}-lint: Lint the Python code
+  py3{10,11,12,13,14}-bandit: Search for common security issues
+  py3{10,11,12,13,14}-mypy: Check for type safety
   py313-pydocstyle: docstring style checker
   py313-lintreadme: Lint the README.rst->.md conversion
 
@@ -41,36 +40,36 @@ passenv =
   GITHUB_*
 
 deps =
-  py3{9,10,11,12,13,14}-{unit,mypy}: -rrequirements.txt
-  py3{9,10,11,12,13,14}-{unit,mypy}: -rtest-requirements.txt
-  py3{9,10,11,12,13,14}-lint: flake8-bugbear
-  py3{9,10,11,12,13,14}-lint: black~=23.1
-  py3{9,10,11,12,13,14}-bandit: bandit
-  py3{9,10,11,12,13,14}-mypy: -rmypy-requirements.txt
+  py3{10,11,12,13,14}-{unit,mypy}: -rrequirements.txt
+  py3{10,11,12,13,14}-{unit,mypy}: -rtest-requirements.txt
+  py3{10,11,12,13,14}-lint: flake8-bugbear
+  py3{10,11,12,13,14}-lint: black~=23.1
+  py3{10,11,12,13,14}-bandit: bandit
+  py3{10,11,12,13,14}-mypy: -rmypy-requirements.txt
 
 set_env =
-  py3{9,10,11,12,13,14}-unit: LC_ALL = C.UTF-8
+  py3{10,11,12,13,14}-unit: LC_ALL = C.UTF-8
   COV_CORE_SOURCE=cwltest
   COV_CORE_CONFIG={toxinidir}/.coveragerc
   COV_CORE_DATAFILE={toxinidir}/.coverage.eager
 
 commands =
-  py3{9,10,11,12,13,14}-unit: python -m pip install -U pip setuptools wheel
-  py3{9,10,11,12,13,14}-unit: python -m pytest --cov --cov-config={toxinidir}/.coveragerc --cov-append {posargs}
-  py3{9,10,11,12,13,14}-unit: coverage xml
-  py3{9,10,11,12,13,14}-bandit: bandit --recursive cwltest
-  py3{9,10,11,12,13,14}-lint: make flake8
-  py3{9,10,11,12,13,14}-lint: make format-check
-  py3{9,10,11,12,13,14}-mypy: make mypy
+  py3{10,11,12,13,14}-unit: python -m pip install -U pip setuptools wheel
+  py3{10,11,12,13,14}-unit: python -m pytest --cov --cov-config={toxinidir}/.coveragerc --cov-append {posargs}
+  py3{10,11,12,13,14}-unit: coverage xml
+  py3{10,11,12,13,14}-bandit: bandit --recursive cwltest
+  py3{10,11,12,13,14}-lint: make flake8
+  py3{10,11,12,13,14}-lint: make format-check
+  py3{10,11,12,13,14}-mypy: make mypy
 
 allowlist_externals =
-  py3{9,10,11,12,13,14}-lint: flake8
-  py3{9,10,11,12,13,14}-lint: black
-  py3{9,10,11,12,13,14}-{mypy,shellcheck,lint,unit}: make
+  py3{10,11,12,13,14}-lint: flake8
+  py3{10,11,12,13,14}-lint: black
+  py3{10,11,12,13,14}-{mypy,shellcheck,lint,unit}: make
 
 skip_install =
-  py3{9,10,11,12,13,14}-lint: true
-  py3{9,10,11,12,13,14}-bandit: true
+  py3{10,11,12,13,14}-lint: true
+  py3{10,11,12,13,14}-bandit: true
 
 
 [testenv:py313-pydocstyle]



View it on GitLab: https://salsa.debian.org/med-team/cwltest/-/compare/4a5b1272ee2151cefa7dd469346271e90a6c4ca2...22820bc23e124f61055ab84d0df0f3ab0e51adb9

-- 
View it on GitLab: https://salsa.debian.org/med-team/cwltest/-/compare/4a5b1272ee2151cefa7dd469346271e90a6c4ca2...22820bc23e124f61055ab84d0df0f3ab0e51adb9
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20260107/f77a5f9e/attachment-0001.htm>


More information about the debian-med-commit mailing list