@@ -2,8 +2,7 @@ name: Linters and Tests
22
33# Concurrency control:
44# - PRs: new commits on a feature branch will cancel in-progress (outdated) runs.
5- # - Push to develop: runs queue sequentially, never cancelled. This allows us to have benchmarks
6- # run on every commit for our benchmarks website.
5+ # - Push to develop: runs queue sequentially, never cancelled.
76# - `workflow_dispatch`: groups by branch and queues if run on develop.
87concurrency :
98 group : ${{ github.workflow }}-${{ github.ref }}
@@ -292,313 +291,6 @@ jobs:
292291 exit 1
293292 fi
294293
295- rust-coverage :
296- name : " Rust tests (coverage) (${{ matrix.suite }})"
297- timeout-minutes : 30
298- permissions :
299- id-token : write
300- strategy :
301- matrix :
302- include :
303- - suite : tests
304- runs-on : >-
305- ${{ github.repository == 'vortex-data/vortex'
306- && format('runs-on={0}/runner=amd64-large/image=ubuntu24-full-x64-pre-v2/tag=rust-coverage-suite-{1}', github.run_id, matrix.suite)
307- || 'ubuntu-latest' }}
308- env :
309- RUSTFLAGS : " -Cinstrument-coverage -A warnings"
310- CARGO_INCREMENTAL : 0 # Disable incremental compilation to get accurate coverage
311- LLVM_PROFILE_FILE : " target/coverage/vortex-%p-%m.profraw"
312- GRCOV_OUTPUT_FILE : " target/coverage/vortex.lcov"
313- steps :
314- - uses : runs-on/action@v2
315- if : github.repository == 'vortex-data/vortex'
316- with :
317- sccache : s3
318- - uses : actions/checkout@v6
319- - uses : ./.github/actions/setup-prebuild
320- - name : Rust Tests
321- if : ${{ matrix.suite == 'tests' }}
322- run : |
323- cargo nextest run --locked --workspace --all-features --no-fail-fast
324- - name : Generate coverage report
325- run : |
326- grcov . --binary-path target/debug/ -s . -t lcov --llvm --ignore-not-existing \
327- --threads $(nproc) \
328- --ignore '../*' --ignore '/*' --ignore 'fuzz/*' --ignore 'vortex-bench/*' \
329- --ignore 'home/*' --ignore 'xtask/*' --ignore 'target/*' --ignore 'vortex-error/*' \
330- --ignore 'vortex-python/*' --ignore 'vortex-jni/*' --ignore 'vortex-flatbuffers/*' \
331- --ignore 'vortex-proto/*' --ignore 'vortex-tui/*' --ignore 'vortex-datafusion/examples/*' \
332- --ignore 'vortex-ffi/examples/*' --ignore '*/arbitrary/*' --ignore '*/arbitrary.rs' --ignore 'vortex-cxx/*' \
333- --ignore benchmarks/* --ignore 'vortex-test/*' \
334- -o ${{ env.GRCOV_OUTPUT_FILE }}
335- - name : Codecov
336- uses : codecov/codecov-action@v5
337- with :
338- name : run-${{ matrix.suite }}
339- files : ${{ env.GRCOV_OUTPUT_FILE }}
340- disable_search : true
341- flags : ${{ matrix.suite }}
342- use_oidc : true
343-
344- rust-test-sanitizer :
345- strategy :
346- fail-fast : false
347- matrix :
348- include :
349- # We don't run memory sanitizer as it provides many false positives
350- # for std
351- - sanitizer : asan
352- sanitizer_flags : " -Zsanitizer=address,leak"
353- - sanitizer : tsan
354- sanitizer_flags : " -Zsanitizer=thread"
355- name : " Rust tests (${{ matrix.sanitizer }})"
356- runs-on : >-
357- ${{ github.repository == 'vortex-data/vortex'
358- && format('runs-on={0}/pool=amd64-medium-pre-v2/tag=rust-test-sanitizer', github.run_id)
359- || 'ubuntu-latest' }}
360- timeout-minutes : 30
361- env :
362- ASAN_OPTIONS : " symbolize=1:check_initialization_order=1:detect_leaks=1:leak_check_at_exit=1"
363- LSAN_OPTIONS : " report_objects=1"
364- ASAN_SYMBOLIZER_PATH : " /usr/bin/llvm-symbolizer"
365- MSAN_OPTIONS : " symbolize=1"
366- MSAN_SYMBOLIZER_PATH : " /usr/bin/llvm-symbolizer"
367- TSAN_OPTIONS : " symbolize=1:suppressions=${{ github.workspace }}/vortex-ffi/tsan_suppressions.txt"
368- TSAN_SYMBOLIZER_PATH : " /usr/bin/llvm-symbolizer"
369- VORTEX_SKIP_SLOW_TESTS : " 1"
370- # -Cunsafe-allow-abi-mismatch=sanitizer: libraries like compiler_builtins
371- # unset -Zsanitizer flag and we should allow that.
372- RUSTFLAGS : " -A warnings -Cunsafe-allow-abi-mismatch=sanitizer -C debuginfo=2 -C opt-level=0 -C strip=none"
373- steps :
374- - uses : runs-on/action@v2
375- if : github.repository == 'vortex-data/vortex'
376- with :
377- sccache : s3
378- - uses : actions/checkout@v6
379- - uses : ./.github/actions/setup-prebuild
380- - name : Install Rust nightly toolchain
381- run : |
382- rustup toolchain install $NIGHTLY_TOOLCHAIN
383- rustup component add --toolchain $NIGHTLY_TOOLCHAIN rust-src rustfmt clippy llvm-tools-preview
384- - name : Build tests with sanitizer
385- run : |
386- RUSTFLAGS="${RUSTFLAGS} ${{ matrix.sanitizer_flags }}" \
387- cargo +$NIGHTLY_TOOLCHAIN build --locked --all-features \
388- --target x86_64-unknown-linux-gnu -Zbuild-std \
389- -p vortex-buffer -p vortex-fastlanes -p vortex-fsst -p vortex-alp -p vortex-array
390-
391- - name : Run tests with sanitizer
392- run : |
393- RUSTFLAGS="${RUSTFLAGS} ${{ matrix.sanitizer_flags }}" \
394- cargo +$NIGHTLY_TOOLCHAIN nextest run --locked --all-features \
395- --target x86_64-unknown-linux-gnu --no-fail-fast -Zbuild-std \
396- -p vortex-buffer -p vortex-fastlanes -p vortex-fsst -p vortex-alp -p vortex-array
397-
398- # vortex-ffi requires --no-default-features as otherwise we pull in
399- # Mimalloc which interferes with sanitizers
400- # cargo nextest reports less sanitizer issues than cargo test
401- # TODO(myrrc): remove --no-default-features once we make Mimalloc opt-in
402- - name : Run vortex-ffi tests with sanitizer
403- run : |
404- RUSTFLAGS="${RUSTFLAGS} ${{ matrix.sanitizer_flags }}" \
405- cargo +$NIGHTLY_TOOLCHAIN test --locked --no-default-features \
406- --target x86_64-unknown-linux-gnu --no-fail-fast -Zbuild-std \
407- -p vortex-ffi -- --no-capture
408-
409- rust-ffi-test-sanitizer :
410- strategy :
411- fail-fast : false
412- matrix :
413- include :
414- # We don't run memory sanitizer as it's clang-only and provides many
415- # false positives for Catch2
416- - sanitizer : asan
417- sanitizer_flags : " -Zsanitizer=address,leak"
418- - sanitizer : tsan
419- sanitizer_flags : " -Zsanitizer=thread"
420- name : " Rust/C++ FFI tests (${{ matrix.sanitizer }})"
421- timeout-minutes : 30
422- env :
423- ASAN_OPTIONS : " symbolize=1:check_initialization_order=1:detect_leaks=1:leak_check_at_exit=1"
424- LSAN_OPTIONS : " report_objects=1"
425- ASAN_SYMBOLIZER_PATH : " /usr/bin/llvm-symbolizer"
426- MSAN_OPTIONS : " symbolize=1"
427- MSAN_SYMBOLIZER_PATH : " /usr/bin/llvm-symbolizer"
428- TSAN_OPTIONS : " symbolize=1"
429- TSAN_SYMBOLIZER_PATH : " /usr/bin/llvm-symbolizer"
430- VORTEX_SKIP_SLOW_TESTS : " 1"
431- # -Cunsafe-allow-abi-mismatch=sanitizer: libraries like compiler_builtins
432- # unset -Zsanitizer flag and we should allow that.
433- runs-on : >-
434- ${{ github.repository == 'vortex-data/vortex'
435- && format('runs-on={0}/runner=amd64-medium/image=ubuntu24-full-x64-pre-v2/tag=rust-ffi-test-sanitizer', github.run_id)
436- || 'ubuntu-latest' }}
437- steps :
438- - uses : runs-on/action@v2
439- if : github.repository == 'vortex-data/vortex'
440- with :
441- sccache : s3
442- - uses : actions/checkout@v6
443- - uses : ./.github/actions/setup-prebuild
444- - name : Install rustfilt
445- run : |
446- cargo install rustfilt
447- - name : Install Rust nightly toolchain
448- run : |
449- rustup toolchain install $NIGHTLY_TOOLCHAIN
450- rustup component add --toolchain $NIGHTLY_TOOLCHAIN rust-src rustfmt clippy llvm-tools-preview
451- - name : Build FFI library
452- run : |
453- # TODO(myrrc): remove --no-default-features
454- RUSTFLAGS="-A warnings -Cunsafe-allow-abi-mismatch=sanitizer \
455- -C debuginfo=2 -C opt-level=0 -C strip=none -Zexternal-clangrt \
456- ${{ matrix.sanitizer_flags }}" \
457- cargo +$NIGHTLY_TOOLCHAIN build --locked --no-default-features \
458- --target x86_64-unknown-linux-gnu -Zbuild-std \
459- -p vortex-ffi
460- - name : Build FFI library tests
461- run : |
462- cd vortex-ffi
463- cmake -Bbuild -DBUILD_TESTS=1 -DSANITIZER=${{ matrix.sanitizer }} -DTARGET_TRIPLE="x86_64-unknown-linux-gnu"
464- cmake --build build -j
465- - name : Run tests
466- run : |
467- set -o pipefail
468- ./vortex-ffi/build/test/vortex_ffi_test 2>&1 | rustfilt -i-
469-
470- cuda-build-lint :
471- if : github.repository == 'vortex-data/vortex'
472- name : " CUDA build & lint"
473- timeout-minutes : 30
474- runs-on : runs-on=${{ github.run_id }}/runner=gpu/tag=cuda-build
475- steps :
476- - uses : runs-on/action@v2
477- with :
478- sccache : s3
479- - uses : actions/checkout@v6
480- - uses : ./.github/actions/setup-rust
481- with :
482- repo-token : ${{ secrets.GITHUB_TOKEN }}
483- - uses : ./.github/actions/check-rebuild
484- with :
485- command : >-
486- cargo build --profile ci --locked --all-features --all-targets
487- -p vortex-cuda -p vortex-cub -p vortex-nvcomp
488- -p gpu-scan-cli -p vortex-test-e2e-cuda
489- - name : Clippy CUDA crates
490- run : |
491- cargo clippy --profile ci --locked --all-features --all-targets \
492- -p vortex-cuda \
493- -p vortex-cub \
494- -p vortex-nvcomp \
495- -p gpu-scan-cli \
496- -p vortex-test-e2e-cuda \
497- -- -D warnings
498-
499- cuda-test :
500- if : github.repository == 'vortex-data/vortex'
501- name : " CUDA tests"
502- timeout-minutes : 30
503- runs-on : runs-on=${{ github.run_id }}/runner=gpu/tag=cuda-tests
504- steps :
505- - uses : runs-on/action@v2
506- with :
507- sccache : s3
508- - name : Display NVIDIA SMI details
509- run : |
510- nvidia-smi
511- nvidia-smi -L
512- nvidia-smi -q -d Memory
513- - uses : actions/checkout@v6
514- - uses : ./.github/actions/setup-rust
515- with :
516- repo-token : ${{ secrets.GITHUB_TOKEN }}
517- - name : Install nextest
518- uses : taiki-e/install-action@v2
519- with :
520- tool : nextest
521- - name : Rust Tests
522- env :
523- FLAT_LAYOUT_INLINE_ARRAY_NODE : true
524- run : |
525- cargo nextest run \
526- --cargo-profile ci \
527- --locked \
528- -p vortex-file \
529- -p vortex-cuda \
530- -p vortex-cub \
531- -p vortex-nvcomp \
532- -p vortex-test-e2e-cuda \
533- --all-features \
534- --no-fail-fast \
535- --target x86_64-unknown-linux-gnu \
536- --verbose
537-
538- cuda-test-sanitizer :
539- if : github.repository == 'vortex-data/vortex'
540- name : " CUDA tests (${{ matrix.sanitizer }})"
541- timeout-minutes : 30
542- runs-on : runs-on=${{ github.run_id }}/runner=gpu/tag=cuda-test-sanitizer
543- strategy :
544- fail-fast : false
545- matrix :
546- include :
547- - sanitizer : memcheck
548- runner_flags : " --tool memcheck --leak-check=full --error-exitcode 1"
549- # TODO(joe): try to re-enable racecheck, it is hanging in CI.
550- # - sanitizer: racecheck
551- # runner_flags: "--tool racecheck --error-exitcode 1"
552- - sanitizer : synccheck
553- runner_flags : " --tool synccheck --error-exitcode 1"
554- - sanitizer : initcheck
555- runner_flags : " --tool initcheck --error-exitcode 1"
556- steps :
557- - uses : runs-on/action@v2
558- with :
559- sccache : s3
560- - name : Display NVIDIA SMI details
561- run : |
562- nvidia-smi
563- nvidia-smi -L
564- nvidia-smi -q -d Memory
565- - uses : actions/checkout@v6
566- - uses : ./.github/actions/setup-rust
567- with :
568- repo-token : ${{ secrets.GITHUB_TOKEN }}
569- - name : Build tests
570- run : cargo test --profile ci --locked -p vortex-cuda --all-features --target x86_64-unknown-linux-gnu --no-run
571- - name : " CUDA - ${{ matrix.sanitizer }}"
572- env :
573- CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER : " compute-sanitizer ${{ matrix.runner_flags }}"
574- run : cargo test --profile ci --locked -p vortex-cuda --all-features --target x86_64-unknown-linux-gnu
575-
576- cuda-test-cudf :
577- if : github.repository == 'vortex-data/vortex'
578- name : " CUDA tests (cudf)"
579- timeout-minutes : 30
580- runs-on : runs-on=${{ github.run_id }}/runner=gpu/tag=cuda-test-cudf
581- steps :
582- - uses : runs-on/action@v2
583- with :
584- sccache : s3
585- - name : Display NVIDIA SMI details
586- run : |
587- nvidia-smi
588- nvidia-smi -L
589- nvidia-smi -q -d Memory
590- - uses : actions/checkout@v6
591- - uses : ./.github/actions/setup-rust
592- with :
593- repo-token : ${{ secrets.GITHUB_TOKEN }}
594- - name : Build cudf test library
595- run : cargo build --profile ci --locked -p vortex-test-e2e-cuda --target x86_64-unknown-linux-gnu
596- - name : Download and run cudf-test-harness
597- run : |
598- curl -fsSL https://github.com/vortex-data/cudf-test-harness/releases/latest/download/cudf-test-harness-x86_64.tar.gz | tar -xz
599- cd cudf-test-harness-x86_64
600- compute-sanitizer --tool memcheck --error-exitcode 1 ./cudf-test-harness check $GITHUB_WORKSPACE/target/x86_64-unknown-linux-gnu/ci/libvortex_test_e2e_cuda.so
601-
602294 rust-test-other :
603295 name : " Rust tests (${{ matrix.os }})"
604296 timeout-minutes : 30
@@ -758,29 +450,6 @@ jobs:
758450 - run : wasmer run ./target/wasm32-wasip1/ci/wasm-test.wasm
759451 working-directory : ./wasm-test
760452
761- miri :
762- name : " Rust tests (miri)"
763- runs-on : >-
764- ${{ github.repository == 'vortex-data/vortex'
765- && format('runs-on={0}/runner=amd64-medium/image=ubuntu24-full-x64-pre-v2/tag=rust-miri', github.run_id)
766- || 'ubuntu-latest' }}
767- timeout-minutes : 30
768- env :
769- MIRIFLAGS : -Zmiri-strict-provenance -Zmiri-symbolic-alignment-check -Zmiri-disable-isolation -Zmiri-env-forward=RUST_BACKTRACE
770- RUSTFLAGS : " -A warnings"
771- RUST_BACKTRACE : full
772- steps :
773- - uses : runs-on/action@v2
774- if : github.repository == 'vortex-data/vortex'
775- with :
776- sccache : s3
777- - uses : actions/checkout@v6
778- - uses : ./.github/actions/setup-prebuild
779- - name : Install nightly with miri
780- run : rustup toolchain install $NIGHTLY_TOOLCHAIN --component rust-src,rustfmt,clippy,miri
781- - name : Run Miri
782- run : cargo +$NIGHTLY_TOOLCHAIN miri nextest run --no-fail-fast -p vortex-buffer -p vortex-ffi
783-
784453 generated-files :
785454 name : " Check generated source files are up to date"
786455 runs-on : >-
0 commit comments