From 6cbdf8767e4c88dfaedf3db7b09ce2781496fc51 Mon Sep 17 00:00:00 2001 From: Bill Schnurr Date: Fri, 5 Sep 2025 09:14:53 -0700 Subject: [PATCH] update testing for python 3.14 (#1955) * update testing for python 3.14 * Allow python 3.14 in attach code * move 3.14 to its own job outside of matrix * try 3.14.0-rc.2 * allowUnstable * use 3.14.0-rc.2 but use 3.14 in tests --- CONTRIBUTING.md | 2 +- azure-pipelines/pipelines.yaml | 6 ++++++ azure-pipelines/templates/run_tests.yml | 16 ++++++++++++---- azure-pipelines/templates/use_python.yml | 1 + setup.py | 18 +++++++++--------- .../common/py_version.hpp | 4 ++++ tox.ini | 6 +++--- 7 files changed, 36 insertions(+), 17 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e25104d5..89197fa0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -114,7 +114,7 @@ In order to update the source, you would: You might need to regenerate the Cython modules after any changes. This can be done by: -- Install Python latest (3.12 as of this writing) +- Install Python latest (3.14 as of this writing) - pip install cython 'django>=1.9' 'setuptools>=0.9' 'wheel>0.21' twine - On a windows machine: - set FORCE_PYDEVD_VC_VARS=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat diff --git a/azure-pipelines/pipelines.yaml b/azure-pipelines/pipelines.yaml index 19612651..f041cf23 100644 --- a/azure-pipelines/pipelines.yaml +++ b/azure-pipelines/pipelines.yaml @@ -135,6 +135,8 @@ stages: python.version: 3.12 py313: python.version: 3.13 + py314: + python.version: 3.14.0-rc.2 steps: @@ -178,6 +180,8 @@ stages: python.version: 3.12 py313: python.version: 3.13 + py314: + python.version: 3.14.0-rc.2 steps: @@ -224,6 +228,8 @@ stages: python.version: 3.12 py313: python.version: 3.13 + py314: + python.version: 3.14.0-rc.2 steps: diff --git a/azure-pipelines/templates/run_tests.yml b/azure-pipelines/templates/run_tests.yml index 2efca201..475b6ff9 100644 --- a/azure-pipelines/templates/run_tests.yml +++ b/azure-pipelines/templates/run_tests.yml @@ -3,11 +3,19 @@ steps: displayName: Setup Python packages - pwsh: | - $toxEnv = '$(python.version)' - if (-not $toxEnv.startsWith('pypy')) { - $toxEnv = 'py' + $toxEnv.Replace('.', '') + $raw = '$(python.version)' + if ($raw.StartsWith('pypy')) { + # For PyPy keep original pattern stripping dots after first two numeric components if needed later. + $toxEnv = 'py' + ($raw -replace '^pypy(\d+)\.(\d+).*$','$1$2') } - echo 'tox environment: $toxEnv' + else { + # Extract major.minor even from prerelease like 3.14.0-rc.2 -> 3.14 + $mm = [regex]::Match($raw,'^(\d+)\.(\d+)') + if (-not $mm.Success) { throw "Unable to parse python.version '$raw'" } + $toxEnv = 'py' + $mm.Groups[1].Value + $mm.Groups[2].Value + } + Write-Host "python.version raw: $raw" + Write-Host "Derived tox environment: $toxEnv" python -m tox -e $toxEnv -- --junitxml=$(Build.ArtifactStagingDirectory)/tests.xml --debugpy-log-dir=$(Build.ArtifactStagingDirectory)/logs tests displayName: Run tests using tox env: diff --git a/azure-pipelines/templates/use_python.yml b/azure-pipelines/templates/use_python.yml index 78afa755..ecb69656 100644 --- a/azure-pipelines/templates/use_python.yml +++ b/azure-pipelines/templates/use_python.yml @@ -3,4 +3,5 @@ steps: inputs: versionSpec: $(python.version) architecture: $(architecture) + allowUnstable: true displayName: Use Python $(python.version) $(architecture) diff --git a/setup.py b/setup.py index 2c4b9b8e..570c6992 100644 --- a/setup.py +++ b/setup.py @@ -78,14 +78,12 @@ def override_build_py(cmds): "Compiling pydevd Cython extension modules (set SKIP_CYTHON_BUILD=1 to omit)." ) try: - subprocess.check_call( - [ - sys.executable, - os.path.join(PYDEVD_ROOT, "setup_pydevd_cython.py"), - "build_ext", - "--inplace", - ] - ) + subprocess.check_call([ + sys.executable, + os.path.join(PYDEVD_ROOT, "setup_pydevd_cython.py"), + "build_ext", + "--inplace", + ]) except subprocess.SubprocessError: # pydevd Cython extensions are optional performance enhancements, and debugpy is # usable without them. Thus, we want to ignore build errors here by default, so @@ -170,6 +168,8 @@ if __name__ == "__main__": "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Topic :: Software Development :: Debuggers", "Operating System :: Microsoft :: Windows", "Operating System :: MacOS", @@ -202,5 +202,5 @@ if __name__ == "__main__": "debugpy-adapter = debugpy.adapter.__main__:main", ], }, - **extras + **extras, ) diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_version.hpp b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_version.hpp index 712684cf..15c05537 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_version.hpp +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_version.hpp @@ -24,6 +24,7 @@ enum PythonVersion { PythonVersion_311 = 0x030B, PythonVersion_312 = 0x030C, PythonVersion_313 = 0x030D, + PythonVersion_314 = 0x030E, }; @@ -78,6 +79,9 @@ static PythonVersion GetPythonVersion(void *module) { if(version[3] == '3'){ return PythonVersion_313; } + if(version[3] == '4'){ + return PythonVersion_314; + } } return PythonVersion_Unknown; // we don't care about 3.1 anymore... diff --git a/tox.ini b/tox.ini index 6a0d21eb..2a5ea04a 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py{38,39,310,311,312,313}{,-cov} +envlist = py{38,39,310,311,312,313,314}{,-cov} [testenv] deps = -rtests/requirements.txt @@ -10,5 +10,5 @@ commands_pre = python build_attach_binaries.py commands = py{38,39}-!cov: python -m pytest {posargs} py{38,39}-cov: python -m pytest --cov --cov-append --cov-config=.coveragerc {posargs} - py{310,311,312,313}-!cov: python -Xfrozen_modules=off -m pytest {posargs} - py{310,311,312,313}-cov: python -Xfrozen_modules=off -m pytest --cov --cov-append --cov-config=.coveragerc {posargs} + py{310,311,312,313,314}-!cov: python -Xfrozen_modules=off -m pytest {posargs} + py{310,311,312,313,314}-cov: python -Xfrozen_modules=off -m pytest --cov --cov-append --cov-config=.coveragerc {posargs}