Skip to content

Commit 56ffb02

Browse files
committed
Merge remote-tracking branch 'upstream/main' into cybind-catchup
2 parents 7277c16 + 75e6960 commit 56ffb02

23 files changed

Lines changed: 292 additions & 174 deletions

.github/workflows/build-wheel.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ jobs:
5555
curl -fsSL "https://github.com/rapidsai/sccache/releases/latest/download/sccache-$(uname -m)-unknown-linux-musl.tar.gz" \
5656
| sudo tar -C /usr/local/bin -xvzf - --wildcards --strip-components=1 -x '*/sccache'
5757
echo "SCCACHE_PATH=/usr/local/bin/sccache" >> "$GITHUB_ENV"
58-
echo "SCCACHE_GHA_USE_PREPROCESSOR_CACHE_MODE=true" >> "$GITHUB_ENV"
5958
6059
# xref: https://github.com/orgs/community/discussions/42856#discussioncomment-7678867
6160
- name: Adding addtional GHA cache-related env vars
@@ -190,7 +189,6 @@ jobs:
190189
ACTIONS_RESULTS_URL=${{ env.ACTIONS_RESULTS_URL }}
191190
ACTIONS_CACHE_URL=${{ env.ACTIONS_CACHE_URL }}
192191
ACTIONS_CACHE_SERVICE_V2=${{ env.ACTIONS_CACHE_SERVICE_V2 }}
193-
SCCACHE_GHA_USE_PREPROCESSOR_CACHE_MODE=${{ env.SCCACHE_GHA_USE_PREPROCESSOR_CACHE_MODE }}
194192
SCCACHE_DIR=/host/${{ env.SCCACHE_DIR }}
195193
SCCACHE_CACHE_SIZE=${{ env.SCCACHE_CACHE_SIZE }}
196194
CIBW_ENVIRONMENT_WINDOWS: >
@@ -261,7 +259,6 @@ jobs:
261259
ACTIONS_RESULTS_URL=${{ env.ACTIONS_RESULTS_URL }}
262260
ACTIONS_CACHE_URL=${{ env.ACTIONS_CACHE_URL }}
263261
ACTIONS_CACHE_SERVICE_V2=${{ env.ACTIONS_CACHE_SERVICE_V2 }}
264-
SCCACHE_GHA_USE_PREPROCESSOR_CACHE_MODE=${{ env.SCCACHE_GHA_USE_PREPROCESSOR_CACHE_MODE }}
265262
SCCACHE_DIR=/host/${{ env.SCCACHE_DIR }}
266263
SCCACHE_CACHE_SIZE=${{ env.SCCACHE_CACHE_SIZE }}
267264
CIBW_ENVIRONMENT_WINDOWS: >
@@ -518,7 +515,6 @@ jobs:
518515
ACTIONS_RESULTS_URL=${{ env.ACTIONS_RESULTS_URL }}
519516
ACTIONS_CACHE_URL=${{ env.ACTIONS_CACHE_URL }}
520517
ACTIONS_CACHE_SERVICE_V2=${{ env.ACTIONS_CACHE_SERVICE_V2 }}
521-
SCCACHE_GHA_USE_PREPROCESSOR_CACHE_MODE=${{ env.SCCACHE_GHA_USE_PREPROCESSOR_CACHE_MODE }}
522518
SCCACHE_DIR=/host/${{ env.SCCACHE_DIR }}
523519
SCCACHE_CACHE_SIZE=${{ env.SCCACHE_CACHE_SIZE }}
524520
CIBW_ENVIRONMENT_WINDOWS: >

.github/workflows/ci.yml

Lines changed: 37 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -432,52 +432,42 @@ jobs:
432432
steps:
433433
- name: Exit
434434
run: |
435-
# if any dependencies were cancelled or failed, that's a failure
436-
#
437-
# see https://docs.github.com/en/actions/reference/workflows-and-actions/expressions#always
438-
# and https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
439-
# for why this cannot be encoded in the job-level `if:` field
440-
#
441-
# TL; DR: `$REASONS`
442-
#
443-
# The intersection of skipped-as-success and required status checks
444-
# creates a scenario where if you DON'T `always()` run this job, the
445-
# status check UI will block merging and if you DO `always()` run and
446-
# a dependency is _cancelled_ (due to a critical failure, which is
447-
# somehow not considered a failure ¯\_(ツ)_/¯) then the critically
448-
# failing job(s) will timeout causing a cancellation here and the
449-
# build to succeed which we don't want (originally this was just
450-
# 'exit 0')
451-
#
452-
# Note: When [doc-only] is in PR title, test jobs are intentionally
453-
# skipped and should not cause failure.
454-
#
455-
# detect-changes gates whether heavy test matrices run at all; if it
456-
# does not succeed, downstream test jobs are skipped rather than
457-
# failed, which would otherwise go unnoticed here. Require its
458-
# success explicitly so a broken gating step cannot masquerade as a
459-
# green CI run.
460-
doc_only=${{ needs.should-skip.outputs.doc-only }}
461-
if ${{ needs.detect-changes.result != 'success' }}; then
462-
exit 1
463-
fi
464-
if ${{ needs.doc.result == 'cancelled' || needs.doc.result == 'failure' }}; then
465-
exit 1
435+
# GitHub treats `result == 'skipped'` as success for required
436+
# status checks (see CCCL gate comment + cccl#605). The previous
437+
# `cancelled || failure` predicate let upstream build failures
438+
# propagate as `skipped` on downstream test jobs and silently
439+
# pass this aggregator. Adopt CCCL's `check_result` pattern:
440+
# require an explicit `expected` status per dependency, where
441+
# anything else (including `skipped` from a failed upstream)
442+
# fails the gate. `if: always()` on the job still ensures this
443+
# step runs even when needs are skipped.
444+
if [[ "${{ needs.should-skip.outputs.skip }}" == "true" ]]; then
445+
echo "[no-ci] - skipping aggregator checks"
446+
exit 0
466447
fi
467-
if ${{ needs.test-sdist-linux.result == 'cancelled' ||
468-
needs.test-sdist-linux.result == 'failure' ||
469-
needs.test-sdist-windows.result == 'cancelled' ||
470-
needs.test-sdist-windows.result == 'failure' }}; then
471-
exit 1
472-
fi
473-
if [[ "${doc_only}" != "true" ]]; then
474-
if ${{ needs.test-linux-64.result == 'cancelled' ||
475-
needs.test-linux-64.result == 'failure' ||
476-
needs.test-linux-aarch64.result == 'cancelled' ||
477-
needs.test-linux-aarch64.result == 'failure' ||
478-
needs.test-windows.result == 'cancelled' ||
479-
needs.test-windows.result == 'failure' }}; then
480-
exit 1
448+
449+
doc_only="${{ needs.should-skip.outputs.doc-only }}"
450+
status="success"
451+
check_result() {
452+
name=$1; expected=$2; result=$3
453+
echo "Checking $name: result='$result' (expected '$expected')"
454+
if [[ "$result" != "$expected" ]]; then
455+
echo "::error::$name did not match expected result"
456+
status="failed"
481457
fi
482-
fi
483-
exit 0
458+
}
459+
460+
# always expected to succeed (even in [doc-only] mode)
461+
check_result "should-skip" "success" "${{ needs.should-skip.result }}"
462+
check_result "detect-changes" "success" "${{ needs.detect-changes.result }}"
463+
check_result "doc" "success" "${{ needs.doc.result }}"
464+
465+
# [doc-only] flips these from 'success' to 'skipped'
466+
if [[ "$doc_only" == "true" ]]; then expected="skipped"; else expected="success"; fi
467+
check_result "test-sdist-linux" "$expected" "${{ needs.test-sdist-linux.result }}"
468+
check_result "test-sdist-windows" "$expected" "${{ needs.test-sdist-windows.result }}"
469+
check_result "test-linux-64" "$expected" "${{ needs.test-linux-64.result }}"
470+
check_result "test-linux-aarch64" "$expected" "${{ needs.test-linux-aarch64.result }}"
471+
check_result "test-windows" "$expected" "${{ needs.test-windows.result }}"
472+
473+
[[ "$status" == "success" ]]

SECURITY.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,17 @@ disclosure policy. Please visit our [Product Security Incident Response Team
2929
(PSIRT)](https://www.nvidia.com/en-us/security/psirt-policies/) policies page for more
3030
information.
3131

32+
## CUDA IPC and Python serialization
33+
34+
`cuda.core.Buffer` objects allocated from IPC-enabled memory resources can be
35+
pickled for transfer between same-host processes. Unpickling performs an IPC
36+
memory import using the embedded `IPCBufferDescriptor`. Only unpickle buffers
37+
(and call `Buffer.from_ipc_descriptor`) with descriptors from trusted peers;
38+
malicious descriptors can trigger invalid memory operations.
39+
40+
When sharing CUDA objects across processes, use `multiprocessing` with the
41+
`spawn` start method.
42+
3243
## NVIDIA Product Security
3344

3445
For all security-related concerns, please visit NVIDIA's Product Security portal at

0 commit comments

Comments
 (0)