Validation and release checklist

This fork is maintained best-effort. A green CPU CI badge does not establish GPU correctness, and a successful wheel build does not establish importability.

Local/trusted GPU validation

Use a fresh environment with the intended torch/CUDA versions. CUDA 12.8 / Blackwell releases currently target torch~=2.9.0 from the cu128 index.

export OMP_NUM_THREADS=2
export CUDA_HOME=/usr/local/cuda-12.8
export TORCH_CUDA_ARCH_LIST="12.0+PTX"
export MAX_COMPILATION_THREADS=6  # tune to available RAM
python setup.py build_ext --inplace
python -c "import torch, MinkowskiEngine as ME; assert torch.cuda.is_available() and ME.is_cuda_available(); ME.print_diagnostics()"
python -m pytest -q
bash scripts/build_wheels.sh
python scripts/check_wheel.py --cuda --tests wheelhouse/minkowskiengine-*.whl

check_wheel.py installs into a temporary target using the current interpreter’s torch/numpy dependencies. Its smoke process runs outside the checkout, with PYTHONPATH pointing only to the installation target, and asserts that both Python and native modules were loaded from that target. It does not modify the current environment. --tests also copies the regression tests (not the package) into that temporary directory and runs them against the installed wheel; this needs pytest. Without --cuda, GPU visibility is disabled for the check. Do not test a cp310 wheel with a cp312 interpreter.

Long legacy convolution leak probes are disabled during ordinary tests; opt in with ME_LEAK_TEST_ITER=100000 when specifically investigating lifetime issues. Optional Open3D/data tests are separate from the synthetic regression suite: opt in with python -m pytest --run-data-tests (or ME_RUN_DATA_TESTS=1). These include very large channel/batch sweeps and 1000-iteration point-cloud stress loops; they can take hours. Merely installing Open3D does not enable them.

CI boundaries

  • Pushes and PRs: CPU builds/tests for Python 3.10–3.13, torch 2.7/2.9, plus isolated installed-wheel smoke tests.

  • GPU CI: trusted manual dispatch only, with run_gpu=true. A registered self-hosted [linux, gpu] runner is required; this repository does not provision one. Without a runner, perform and record the GPU checks locally. Never automatically run untrusted PR code on a persistent GPU host.

  • Wheel workflow: CUDA-toolkit container builds for Python 3.10–3.13, pinned torch 2.9 cu128. Every wheel must pass install/import/CPU smoke tests before artifact upload. This step needs no visible GPU.

Publishing

  1. Update the version, changelog, README, citation, and docs fallback version.

  2. Run local gates and independent review; merge only after required CI passes.

  3. Push the version tag. The wheel workflow attaches artifacts to a draft release only after every matrix job passes. Manual wheel dispatches upload Actions artifacts without creating a release.

  4. Download the actual release wheel(s) to the appropriate trusted GPU runtime; run scripts/check_wheel.py --cuda --tests on the artifact, not just a local build. Record which Python/GPU combinations were tested; do not imply that all wheels ran on hardware when only one did.

  5. Inspect wheel assets, notes, and validation evidence, then publish the draft. Never publish merely because compilation succeeded.