-
Notifications
You must be signed in to change notification settings - Fork 0
73 lines (68 loc) · 3.17 KB
/
Copy pathcuda-lane.yml
File metadata and controls
73 lines (68 loc) · 3.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
name: CUDA Lane
on:
# CUDA capacity is provisioned explicitly (for example on Nebius H200).
# Do not leave ordinary PRs queued forever when no self-hosted CUDA runner
# is attached to this repository.
workflow_dispatch:
jobs:
cuda-tests:
name: Run CUDA-only tests
runs-on: [self-hosted, cuda]
timeout-minutes: 30
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- name: Verify runner-provided CUDA environment
run: |
set -euo pipefail
: "${CPPMEGA_CUDA_PYTHON:?self-hosted CUDA runner must export CPPMEGA_CUDA_PYTHON}"
test -x "$CPPMEGA_CUDA_PYTHON"
cuda_info="$(env -u PYTHONPATH -u PYTHONHOME -u VIRTUAL_ENV \
"$CPPMEGA_CUDA_PYTHON" -c \
'import os,sys; print(os.path.realpath(sys.prefix)); print(os.path.realpath(sys.base_prefix))')"
cuda_prefix="${cuda_info%%$'\n'*}"
cuda_base_prefix="${cuda_info#*$'\n'}"
test -n "$cuda_prefix"
test -n "$cuda_base_prefix"
test "$cuda_prefix" != "$cuda_base_prefix"
test -f "$cuda_prefix/pyvenv.cfg"
python_abs="$(python3 -c 'import os,sys; print(os.path.abspath(sys.argv[1]))' "$CPPMEGA_CUDA_PYTHON")"
case "$python_abs" in
"$cuda_prefix/bin/"*) ;;
*) echo "selected CUDA Python is outside its venv prefix" >&2; exit 2 ;;
esac
workspace_real="$(cd "$GITHUB_WORKSPACE" && pwd -P)"
case "$cuda_prefix" in
"$workspace_real"|"$workspace_real"/*)
echo "refusing CUDA environment inside GITHUB_WORKSPACE" >&2
exit 2
;;
esac
if git -C "$cuda_prefix" rev-parse --show-toplevel >/dev/null 2>&1; then
echo "refusing CUDA environment inside a Git checkout" >&2
exit 2
fi
uv lock --check --no-sources --project .
UV_PROJECT_ENVIRONMENT="$cuda_prefix" uv sync --project . --locked \
--no-sources --python "$CPPMEGA_CUDA_PYTHON" --group dev \
--extra path-c
"$CPPMEGA_CUDA_PYTHON" scripts/check_cuda_environment.py --json \
| tee "$RUNNER_TEMP/cppmega-cuda-environment.json"
uv pip check --python "$CPPMEGA_CUDA_PYTHON"
- name: Upload CUDA environment receipt
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: cppmega-mlx-cuda-environment-${{ github.run_id }}-${{ github.run_attempt }}
path: ${{ runner.temp }}/cppmega-cuda-environment.json
if-no-files-found: warn
retention-days: 14
- name: Run CUDA tests
run: |
set -euo pipefail
: "${CPPMEGA_CUDA_PYTHON:?self-hosted CUDA runner must export CPPMEGA_CUDA_PYTHON}"
selected="$RUNNER_TEMP/cppmega-cuda-selected.txt"
CPPMEGA_RUN_CUDA_TESTS=1 "$CPPMEGA_CUDA_PYTHON" -m pytest \
--collect-only -q -m "cuda_hardware or cuda_required" > "$selected"
grep -q '::' "$selected"
CPPMEGA_RUN_CUDA_TESTS=1 "$CPPMEGA_CUDA_PYTHON" -m pytest \
-m "cuda_hardware or cuda_required" -v --tb=short