From accb23a9456b9fef5186b389cd38c5cb201ce723 Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Wed, 15 Jul 2026 09:14:10 -0400 Subject: [PATCH] Add check for pre-release generated content --- .pre-commit-config.yaml | 8 ++++ toolshed/check_generated_file_ctk_version.py | 41 ++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 toolshed/check_generated_file_ctk_version.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 029e69da91..aa45082e45 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -50,6 +50,14 @@ repos: files: ^cuda_bindings/ types: [text] + - id: check-generated-file-ctk-version + name: Check generated-file CTK version ceiling + entry: python ./toolshed/check_generated_file_ctk_version.py + language: python + files: ^cuda_bindings/ + types: [text] + additional_dependencies: [pyyaml] + - id: no-markdown-in-docs-source name: Prevent markdown files in docs/source directories entry: bash -c diff --git a/toolshed/check_generated_file_ctk_version.py b/toolshed/check_generated_file_ctk_version.py new file mode 100644 index 0000000000..2070d97d48 --- /dev/null +++ b/toolshed/check_generated_file_ctk_version.py @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +import re +import sys +from pathlib import Path + +import yaml + +_GENERATED_MARKER = "CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE:" +_VERSION_RE = re.compile(r"generated across versions from \S+ to (\d+\.\d+)") + + +def major_minor(version_str): + major, minor = version_str.split(".")[:2] + return (int(major), int(minor)) + + +def main(argv): + data = yaml.safe_load(Path("ci/versions.yml").read_text()) + latest_mm = major_minor(data["cuda"]["build"]["version"]) + + failed = False + for path in map(Path, argv): + content = path.read_text(encoding="utf-8", errors="replace") + if _GENERATED_MARKER not in content: + continue + m = _VERSION_RE.search(content) + if m and major_minor(m.group(1)) > latest_mm: + print( + f"ERROR: {path}: generated up to CTK {m.group(1)}, which exceeds " + f"ci/versions.yml cuda.build.version {'.'.join(str(x) for x in latest_mm)}. " + f"Update ci/versions.yml if a new CTK release is intended." + ) + failed = True + + return int(failed) + + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:]))