diff --git a/.github/ISSUE_TEMPLATE/release_checklist.yml b/.github/ISSUE_TEMPLATE/release_checklist.yml index 2007c3b067..0fa2765797 100644 --- a/.github/ISSUE_TEMPLATE/release_checklist.yml +++ b/.github/ISSUE_TEMPLATE/release_checklist.yml @@ -20,7 +20,6 @@ body: - label: File an internal nvbug to communicate test plan & release schedule with QA - label: Ensure all pending PRs are reviewed, tested, and merged - label: Check (or update if needed) the dependency requirements - - label: Bump the version - label: Create a public rc tag - label: "Point QA to fetch public artifacts (wheels) from the GHA run ID, example: `gh run download 12323257563 -p \"cuda-core*\" -R NVIDIA/cuda-python`" - label: Wait for QA reports and fix any issues found diff --git a/.github/workflows/test-wheel-linux.yml b/.github/workflows/test-wheel-linux.yml index 66e5a73508..3b7761fe4e 100644 --- a/.github/workflows/test-wheel-linux.yml +++ b/.github/workflows/test-wheel-linux.yml @@ -278,7 +278,9 @@ jobs: run: | set -euo pipefail pushd cuda_pathfinder - pip install --only-binary=:all: -v . --group "test-cu${TEST_CUDA_MAJOR}" + # Install pathfinder from the pre-built wheel, since building from + # source won't work in this context (we don't have a git checkout). + pip install --only-binary=:all: -v ./*.whl --group "test-cu${TEST_CUDA_MAJOR}" pip list popd diff --git a/.gitignore b/.gitignore index d3d7c31208..e42d108dfd 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,9 @@ cuda_bindings/cuda/bindings/nvrtc.pxd cuda_bindings/cuda/bindings/nvrtc.pyx cuda_bindings/cuda/bindings/utils/_get_handle.pyx +# Version files from setuptools_scm +_version.py + # Distribution / packaging .Python build/ diff --git a/cuda_bindings/cuda/bindings/_version.py b/cuda_bindings/cuda/bindings/_version.py deleted file mode 100644 index 3448e498c5..0000000000 --- a/cuda_bindings/cuda/bindings/_version.py +++ /dev/null @@ -1,4 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -__version__ = "13.1.1" diff --git a/cuda_bindings/pyproject.toml b/cuda_bindings/pyproject.toml index d1cf360cad..7c4bddb434 100644 --- a/cuda_bindings/pyproject.toml +++ b/cuda_bindings/pyproject.toml @@ -1,7 +1,12 @@ # SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE [build-system] -requires = ["setuptools>=77.0.0", "cython>=3.2,<3.3", "pyclibrary>=0.1.7"] +requires = [ + "setuptools>=80.0.0", + "setuptools_scm[simple]>=8", + "cython>=3.2,<3.3", + "pyclibrary>=0.1.7", +] build-backend = "setuptools.build_meta" [project] @@ -51,7 +56,6 @@ Documentation = "https://nvidia.github.io/cuda-python/" include = ["cuda*"] [tool.setuptools.dynamic] -version = { attr = "cuda.bindings._version.__version__" } readme = { file = ["DESCRIPTION.rst"], content-type = "text/x-rst" } [tool.cibuildwheel] @@ -72,3 +76,10 @@ required_plugins = "pytest-benchmark" addopts = "--benchmark-disable --showlocals" norecursedirs = ["tests/cython", "examples"] xfail_strict = true + +[tool.setuptools_scm] +root = ".." +version_file = "cuda/bindings/_version.py" +# We deliberately do not want to include the version suffixes (a/b/rc) in cuda-bindings versioning +tag_regex = "^(?Pv\\d+\\.\\d+\\.\\d+)" +git_describe_command = ["git", "describe", "--dirty", "--tags", "--long", "--match", "v*[0-9]*"] diff --git a/cuda_core/cuda/core/_version.py b/cuda_core/cuda/core/_version.py deleted file mode 100644 index 44683fadb3..0000000000 --- a/cuda_core/cuda/core/_version.py +++ /dev/null @@ -1,5 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -__version__ = "0.5.0" diff --git a/cuda_core/pyproject.toml b/cuda_core/pyproject.toml index 94a9e931cc..058148f97b 100644 --- a/cuda_core/pyproject.toml +++ b/cuda_core/pyproject.toml @@ -3,7 +3,11 @@ # SPDX-License-Identifier: Apache-2.0 [build-system] -requires = ["setuptools>=77.0.0", "Cython>=3.2,<3.3"] +requires = [ + "setuptools>=80", + "setuptools-scm[simple]>=8", + "Cython>=3.2,<3.3" +] build-backend = "build_hooks" backend-path = ["."] @@ -72,9 +76,15 @@ include = ["cuda.core*"] "cuda.core._include" = ["*.h", "*.hpp", "*.cuh"] [tool.setuptools.dynamic] -version = { attr = "cuda.core._version.__version__" } readme = { file = ["DESCRIPTION.rst"], content-type = "text/x-rst" } +[tool.setuptools_scm] +root = ".." +version_file = "cuda/core/_version.py" +# We deliberately do not want to include the version suffixes (a/b/rc) in cuda-core versioning +tag_regex = "^cuda-core-(?Pv\\d+\\.\\d+\\.\\d+)" +git_describe_command = ["git", "describe", "--dirty", "--tags", "--long", "--match", "cuda-core-v*[0-9]*"] + [tool.cibuildwheel] skip = "*-musllinux_*" enable = "cpython-freethreading" diff --git a/cuda_pathfinder/cuda/pathfinder/__init__.py b/cuda_pathfinder/cuda/pathfinder/__init__.py index 143c4b45cc..afffd54263 100644 --- a/cuda_pathfinder/cuda/pathfinder/__init__.py +++ b/cuda_pathfinder/cuda/pathfinder/__init__.py @@ -3,6 +3,8 @@ """cuda.pathfinder public APIs""" +from cuda.pathfinder._version import __version__ # noqa: F401 + from cuda.pathfinder._dynamic_libs.load_dl_common import DynamicLibNotFoundError as DynamicLibNotFoundError from cuda.pathfinder._dynamic_libs.load_dl_common import LoadedDL as LoadedDL from cuda.pathfinder._dynamic_libs.load_nvidia_dynamic_lib import load_nvidia_dynamic_lib as load_nvidia_dynamic_lib @@ -11,7 +13,6 @@ ) from cuda.pathfinder._headers.find_nvidia_headers import find_nvidia_header_directory as find_nvidia_header_directory from cuda.pathfinder._headers.supported_nvidia_headers import SUPPORTED_HEADERS_CTK as _SUPPORTED_HEADERS_CTK -from cuda.pathfinder._version import __version__ as __version__ # Indirections to help Sphinx find the docstrings. #: Mapping from short CUDA Toolkit (CTK) library names to their canonical diff --git a/cuda_pathfinder/cuda/pathfinder/_version.py b/cuda_pathfinder/cuda/pathfinder/_version.py deleted file mode 100644 index 2a04d1dbf8..0000000000 --- a/cuda_pathfinder/cuda/pathfinder/_version.py +++ /dev/null @@ -1,4 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - -__version__ = "1.3.4a0" diff --git a/cuda_pathfinder/pyproject.toml b/cuda_pathfinder/pyproject.toml index d446c1a60d..8f2e89eaab 100644 --- a/cuda_pathfinder/pyproject.toml +++ b/cuda_pathfinder/pyproject.toml @@ -62,13 +62,23 @@ Documentation = "https://nvidia.github.io/cuda-python/" packages = { find = { include = ["cuda*"] } } [tool.setuptools.dynamic] -version = { attr = "cuda.pathfinder._version.__version__" } readme = { file = ["DESCRIPTION.rst"], content-type = "text/x-rst" } [build-system] -requires = ["setuptools>=64", "wheel"] +requires = [ + "setuptools>=80.0.0", + "setuptools_scm[simple]>=8", + "wheel" +] build-backend = "setuptools.build_meta" +[tool.setuptools_scm] +root = ".." +version_file = "cuda/pathfinder/_version.py" +# We deliberately do not want to include the version suffixes (a/b/rc) in cuda-pathfinder versioning +tag_regex = "^cuda-pathfinder-(?Pv\\d+\\.\\d+\\.\\d+)" +git_describe_command = [ "git", "describe", "--dirty", "--tags", "--long", "--match", "cuda-pathfinder-v*[0-9]*" ] + [tool.pytest.ini_options] addopts = "--showlocals" diff --git a/cuda_python/pyproject.toml b/cuda_python/pyproject.toml index 9048f5818b..d0f33d6883 100644 --- a/cuda_python/pyproject.toml +++ b/cuda_python/pyproject.toml @@ -3,7 +3,7 @@ # SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE [build-system] -requires = ["setuptools>=77.0.0",] +requires = ["setuptools>=80.0.0", "setuptools-scm[simple]>=8"] build-backend = "setuptools.build_meta" [project] @@ -40,3 +40,7 @@ homepage = "https://nvidia.github.io/cuda-python/" documentation = "https://nvidia.github.io/cuda-python/" repository = "https://github.com/NVIDIA/cuda-python/" issues = "https://github.com/NVIDIA/cuda-python/issues/" + +# The [tool.setuptools_scm] section is handled in setup.py since we need to +# dynamically set the dependency to cuda_bindings based on the dynamically +# determinded version diff --git a/cuda_python/setup.py b/cuda_python/setup.py index 0d91a34887..a1a70d4076 100644 --- a/cuda_python/setup.py +++ b/cuda_python/setup.py @@ -4,23 +4,37 @@ import ast +from packaging.version import Version from setuptools import setup +from setuptools_scm import get_version + +version = get_version( + root="..", + relative_to=__file__, + # We deliberately do not want to include the version suffixes (a/b/rc) in cuda-python versioning + tag_regex="^(?Pv\\d+\\.\\d+\\.\\d+)", + git_describe_command=["git", "describe", "--dirty", "--tags", "--long", "--match", "v*[0-9]*"], +) + + +base_version = Version(version).base_version + + +if base_version == version: + # Tagged release + matcher = "~=" +else: + # Pre-release version + matcher = "==" -# We want to keep the version in sync with cuda.bindings, but setuptools would not let -# us to refer to any files outside of the project root, so we have to employ our own -# run-time lookup using setup()... -with open("../cuda_bindings/cuda/bindings/_version.py") as f: - for line in f: - if line.startswith("__version__"): - version = ast.parse(line).body[0].value.value setup( version=version, install_requires=[ - f"cuda-bindings~={version}", + f"cuda-bindings{matcher}{version}", "cuda-pathfinder~=1.1", ], extras_require={ - "all": [f"cuda-bindings[all]~={version}"], + "all": [f"cuda-bindings[all]{matcher}{version}"], }, )