Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

name: build
Expand Down Expand Up @@ -44,7 +44,7 @@ concurrency:
jobs:
cpp-build:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
Expand All @@ -54,7 +54,7 @@ jobs:
python-build:
needs: [cpp-build]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
Expand All @@ -64,15 +64,15 @@ jobs:
upload-conda:
needs: [cpp-build, python-build]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
date: ${{ inputs.date }}
sha: ${{ inputs.sha }}
wheel-build-cuopt-mps-parser:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
Expand All @@ -87,7 +87,7 @@ jobs:
wheel-publish-cuopt-mps-parser:
needs: wheel-build-cuopt-mps-parser
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
Expand All @@ -98,7 +98,7 @@ jobs:
wheel-build-libcuopt:
needs: wheel-build-cuopt-mps-parser
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
Expand All @@ -111,7 +111,7 @@ jobs:
wheel-publish-libcuopt:
needs: wheel-build-libcuopt
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
Expand All @@ -122,7 +122,7 @@ jobs:
wheel-build-cuopt:
needs: [wheel-build-cuopt-mps-parser, wheel-build-libcuopt]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
Expand All @@ -134,7 +134,7 @@ jobs:
wheel-publish-cuopt:
needs: wheel-build-cuopt
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
Expand All @@ -144,7 +144,7 @@ jobs:
package-type: python
wheel-build-cuopt-server:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
Expand All @@ -159,7 +159,7 @@ jobs:
wheel-publish-cuopt-server:
needs: wheel-build-cuopt-server
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
Expand All @@ -170,7 +170,7 @@ jobs:
docs-build:
needs: [python-build]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
node_type: "gpu-l4-latest-1"
Expand All @@ -184,7 +184,7 @@ jobs:
script: "ci/build_docs.sh"
wheel-build-cuopt-sh-client:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
Expand All @@ -200,7 +200,7 @@ jobs:
wheel-publish-cuopt-sh-client:
needs: wheel-build-cuopt-sh-client
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type || 'branch' }}
branch: ${{ inputs.branch }}
Expand Down
32 changes: 16 additions & 16 deletions .github/workflows/pr.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

name: pr
Expand Down Expand Up @@ -34,7 +34,7 @@ jobs:
- wheel-build-cuopt-sh-client
- test-self-hosted-server
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@cuda-13.1.0
check-lean-ci:
runs-on: ubuntu-latest
outputs:
Expand Down Expand Up @@ -108,7 +108,7 @@ jobs:

changed-files:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@cuda-13.1.0
with:
files_yaml: |
test_cpp:
Expand Down Expand Up @@ -173,21 +173,21 @@ jobs:
- '!python/nvcf_client/**'
checks:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@cuda-13.1.0
with:
enable_check_generated_files: false
conda-cpp-build:
needs: [checks, compute-matrix-filters]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@cuda-13.1.0
with:
build_type: pull-request
script: ci/build_cpp.sh
matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_lean_filter }}
conda-cpp-tests:
needs: [conda-cpp-build, changed-files, compute-matrix-filters]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@cuda-13.1.0
#if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp
with:
build_type: pull-request
Expand All @@ -196,15 +196,15 @@ jobs:
conda-python-build:
needs: [conda-cpp-build, compute-matrix-filters]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@cuda-13.1.0
with:
build_type: pull-request
script: ci/build_python.sh
matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_test_filter }}
conda-python-tests:
needs: [conda-python-build, changed-files, compute-matrix-filters]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@cuda-13.1.0
#if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python
with:
run_codecov: false
Expand All @@ -214,7 +214,7 @@ jobs:
docs-build:
needs: conda-python-build
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@cuda-13.1.0
with:
build_type: pull-request
node_type: "gpu-l4-latest-1"
Expand All @@ -226,7 +226,7 @@ jobs:
wheel-build-cuopt-mps-parser:
needs: compute-matrix-filters
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda-13.1.0
with:
build_type: pull-request
script: ci/build_wheel_cuopt_mps_parser.sh
Expand All @@ -238,7 +238,7 @@ jobs:
wheel-build-libcuopt:
needs: [wheel-build-cuopt-mps-parser, compute-matrix-filters]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda-13.1.0
with:
# build for every combination of arch and CUDA version, but only for the latest Python
matrix_filter: ${{ needs.compute-matrix-filters.outputs.libcuopt_filter }}
Expand All @@ -249,7 +249,7 @@ jobs:
wheel-build-cuopt:
needs: [wheel-build-cuopt-mps-parser, wheel-build-libcuopt, compute-matrix-filters]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda-13.1.0
with:
build_type: pull-request
script: ci/build_wheel_cuopt.sh
Expand All @@ -259,7 +259,7 @@ jobs:
wheel-tests-cuopt:
needs: [wheel-build-cuopt, wheel-build-cuopt-mps-parser, wheel-build-cuopt-sh-client, changed-files, compute-matrix-filters]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@cuda-13.1.0
#if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cuopt
with:
build_type: pull-request
Expand All @@ -268,7 +268,7 @@ jobs:
wheel-build-cuopt-server:
needs: [checks, compute-matrix-filters]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda-13.1.0
with:
build_type: pull-request
script: ci/build_wheel_cuopt_server.sh
Expand All @@ -280,7 +280,7 @@ jobs:
wheel-build-cuopt-sh-client:
needs: compute-matrix-filters
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda-13.1.0
with:
build_type: pull-request
script: ci/build_wheel_cuopt_sh_client.sh
Expand All @@ -293,7 +293,7 @@ jobs:
wheel-tests-cuopt-server:
needs: [wheel-build-cuopt, wheel-build-cuopt-server, changed-files, compute-matrix-filters]
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@cuda-13.1.0
#if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_cuopt_server
with:
build_type: pull-request
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

name: test
Expand Down Expand Up @@ -28,7 +28,7 @@ on:
jobs:
conda-cpp-tests:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type }}
branch: ${{ inputs.branch }}
Expand All @@ -37,7 +37,7 @@ jobs:
script: ci/test_cpp.sh
conda-python-tests:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@cuda-13.1.0
with:
run_codecov: false
build_type: ${{ inputs.build_type }}
Expand All @@ -47,7 +47,7 @@ jobs:
script: ci/test_python.sh
wheel-tests-cuopt:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type }}
branch: ${{ inputs.branch }}
Expand All @@ -56,7 +56,7 @@ jobs:
script: ci/test_wheel_cuopt.sh
wheel-tests-cuopt-server:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type }}
branch: ${{ inputs.branch }}
Expand All @@ -65,7 +65,7 @@ jobs:
script: ci/test_wheel_cuopt_server.sh
conda-notebook-tests:
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@cuda-13.1.0
with:
build_type: ${{ inputs.build_type }}
branch: ${{ inputs.branch }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/trigger-breaking-change-alert.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

name: Trigger Breaking Change Notifications
Expand All @@ -15,7 +15,7 @@ jobs:
trigger-notifier:
if: contains(github.event.pull_request.labels.*.name, 'breaking')
secrets: inherit
uses: rapidsai/shared-workflows/.github/workflows/breaking-change-alert.yaml@main
uses: rapidsai/shared-workflows/.github/workflows/breaking-change-alert.yaml@cuda-13.1.0
with:
sender_login: ${{ github.event.sender.login }}
sender_avatar: ${{ github.event.sender.avatar_url }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ dependencies:
- cuda-nvtx-dev
- cuda-python>=13.0.1,<14.0
- cuda-sanitizer-api
- cuda-version=13.0
- cuda-version=13.1
- cudf==26.2.*,>=0.0.0a0
- cupy>=13.6.0
- cxx-compiler
Expand Down Expand Up @@ -75,4 +75,4 @@ dependencies:
- nvidia-sphinx-theme
- swagger-plugin-for-sphinx
- veroviz
name: all_cuda-130_arch-aarch64
name: all_cuda-131_arch-aarch64
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ dependencies:
- cuda-nvtx-dev
- cuda-python>=13.0.1,<14.0
- cuda-sanitizer-api
- cuda-version=13.0
- cuda-version=13.1
- cudf==26.2.*,>=0.0.0a0
- cupy>=13.6.0
- cxx-compiler
Expand Down Expand Up @@ -75,4 +75,4 @@ dependencies:
- nvidia-sphinx-theme
- swagger-plugin-for-sphinx
- veroviz
name: all_cuda-130_arch-x86_64
name: all_cuda-131_arch-x86_64
12 changes: 9 additions & 3 deletions cpp/src/utilities/driver_helpers.cuh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* clang-format off */
/*
* SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
/* clang-format on */
Expand All @@ -15,11 +15,17 @@ namespace detail {

inline auto get_driver_entry_point(const char* name)
{
void* func;
void* func = nullptr;
cudaDriverEntryPointQueryResult driver_status;
cudaGetDriverEntryPointByVersion(name, &func, CUDART_VERSION, cudaEnableDefault, &driver_status);

// Request CUDA 13.0 (13000) version of symbols for Green Context API
// Green contexts are guarded by CUDART_VERSION >= 13000, so we know they're only
// used when compiled with CUDA 13.0+. Requesting v13000 ensures compatibility
// across CUDA 13.x versions (e.g., built with 13.1, run on 13.0).
cudaGetDriverEntryPointByVersion(name, &func, 13000, cudaEnableDefault, &driver_status);
if (driver_status != cudaDriverEntryPointSuccess) {
fprintf(stderr, "Failed to fetch symbol for %s\n", name);
return static_cast<void*>(nullptr);
}
Comment on lines 26 to 29
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find all call sites of get_driver_entry_point and show surrounding context

rg -nP --type=cpp --type=cuda -C5 '\bget_driver_entry_point\s*\(' -g '!driver_helpers.cuh'

Repository: NVIDIA/cuopt

Length of output: 84


🏁 Script executed:

cat -n cpp/src/utilities/driver_helpers.cuh | head -40

Repository: NVIDIA/cuopt

Length of output: 1312


🏁 Script executed:

rg -nP --type=cpp --type=cuda 'nullptr' cpp/src/utilities/ -A 2 -B 2

Repository: NVIDIA/cuopt

Length of output: 84


🏁 Script executed:

rg -nP --type=cpp -C5 'get_driver_entry_point\s*\(' -g '!driver_helpers.cuh'

Repository: NVIDIA/cuopt

Length of output: 38


🏁 Script executed:

rg -l 'driver_helpers.cuh' --type=cpp

Repository: NVIDIA/cuopt

Length of output: 38


🏁 Script executed:

fd -e cuh | xargs rg -l 'driver_helpers.cuh'

Repository: NVIDIA/cuopt

Length of output: 96


🏁 Script executed:

rg -nP 'get_driver_entry_point' cpp/src/dual_simplex/sparse_cholesky.cuh -C5

Repository: NVIDIA/cuopt

Length of output: 4328


🏁 Script executed:

fd -e cuh -type f

Repository: NVIDIA/cuopt

Length of output: 226


🏁 Script executed:

rg -nP 'CU_CHECK|CUDA_CHECK|auto.*get_driver_entry_point' cpp/src/dual_simplex/sparse_cholesky.cuh -B 2 -A 2

Repository: NVIDIA/cuopt

Length of output: 2660


🏁 Script executed:

rg -nP 'void.*function_name|auto.*function_name|CUdevResource.*function|void setup_green_context|solve\(' cpp/src/dual_simplex/sparse_cholesky.cuh -B 5 -A 15

Repository: NVIDIA/cuopt

Length of output: 3025


🏁 Script executed:

sed -n '150,175p' cpp/src/dual_simplex/sparse_cholesky.cuh

Repository: NVIDIA/cuopt

Length of output: 1266


🏁 Script executed:

sed -n '155,170p' cpp/src/dual_simplex/sparse_cholesky.cuh

Repository: NVIDIA/cuopt

Length of output: 879


Add nullptr checks before dereferencing function pointers returned by get_driver_entry_point.

The function returns nullptr on symbol lookup failure, but call sites in sparse_cholesky.cuh (lines 159, 163, 182, 204, 227, 235, 367, 370) immediately cast and call the returned pointer without validation. If get_driver_entry_point returns nullptr, the code will dereference a null function pointer, causing undefined behavior. Callers must check the return value and propagate errors appropriately:

auto func = cuopt::detail::get_driver_entry_point("symbol_name");
if (func == nullptr) {
  // Handle error and propagate to caller
  return error_code;
}
CU_CHECK(reinterpret_cast<decltype(...)>(func)(...));

This is required by the coding guideline: error propagation from CUDA to user-facing APIs must be complete, and the solve() method must communicate failures rather than crashing silently.

return func;
}
Expand Down
Loading