Files
qdrant/.github/workflows/rust-gpu.yml
Arnaud GourlayandClaude Opus 5 7bcd0c795b Run CI tests with TMPDIR on tmpfs (#10266)
The model_testing harness gates preallocate a 32 MB gridstore page per
storage per segment, so ~440 live points occupy ~600 MB and the five
gates peak around 4.5 GB. On a disk-backed temp dir that preallocation
plus the flush and snapshot traffic dominates their runtime: measured on
ext4/NVMe the snapshot gate takes 337s versus 54s on tmpfs, at 24% CPU,
and on btrfs a set finishing in ~30s on tmpfs was reported not to finish
in 7 minutes.

Point TMPDIR at /dev/shm on the Linux test jobs. Whole-suite peak there
is 4.6 GB against the ~8 GB a GitHub runner provides, and all 3066 tests
pass. Linux only: macOS and Windows have no /dev/shm.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-20 10:42:57 +02:00

108 lines
4.1 KiB
YAML

name: Rust GPU tests
on:
workflow_dispatch:
push:
branches: [ master ]
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
jobs:
rust-gpu-tests:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest ]
steps:
- name: Install minimal stable
uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Install Protoc
uses: ./.github/actions/setup-protoc
- name: Install nextest
uses: taiki-e/install-action@3a0adc33ab45d7b9b9da91822dd2b3c0151704be # nextest
- name: Install Vulkan packages
run: |
sudo apt-get update -y
sudo apt-get install clang mesa-vulkan-drivers libvulkan1 vulkan-tools vulkan-validationlayers
/usr/bin/vulkaninfo --summary
- name: Build
run: cargo build --workspace --tests --features "gpu" --locked
# See the same step in rust.yml; this job is Linux-only so it needs no condition.
- name: Put test temp files on tmpfs
run: echo "TMPDIR=/dev/shm" >> "$GITHUB_ENV"
- name: Run tests
# Profile "ci" is configured in .config/nextest.toml
run: cargo nextest run --workspace --features "gpu" --profile ci --locked
- name: Upload test report
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: junit-${{ matrix.os }}.xml
path: target/nextest/ci/junit.xml
# After tests are run, this hacky script will process the JUnit output of nextest
# and will create a GH Issue if there is a test marked as flaky,
# Failure of updating an issue is ignored because it fails for external contributors.
process-gpu-results:
runs-on: ubuntu-latest
needs: rust-gpu-tests
permissions:
contents: read
issues: write
strategy:
matrix:
os: [ ubuntu-latest ]
steps:
- name: Download test report
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: junit-${{ matrix.os }}.xml
- name: Process test report
id: process-test-report
run: |
pip install yq
xq '.. | select(type == "object") | select(has("flakyFailure"))' junit.xml > flaky_tests.json
echo has_flaky_tests=$(jq '. | has("flakyFailure")' flaky_tests.json) >> $GITHUB_OUTPUT
- name: Get flaky test details
id: get-flaky-tests
if: ${{ steps.process-test-report.outputs.has_flaky_tests == 'true' }}
run: |
echo "Flaky tests found"
echo test=$(jq '.["@name"]' flaky_tests.json -r ) >> $GITHUB_OUTPUT
delimiter="###r###"
echo "content<<$delimiter" >> $GITHUB_OUTPUT
echo "$(jq '[.flakyFailure] | flatten | .[0]["system-err"]' flaky_tests.json -r)" >> $GITHUB_OUTPUT
echo $delimiter >> $GITHUB_OUTPUT
- name: pull issue template
if: ${{ steps.process-test-report.outputs.has_flaky_tests == 'true' }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
sparse-checkout: |
.github/ISSUE_TEMPLATE/flaky_test.md
sparse-checkout-cone-mode: false
- name: Create issue for flaky tests
continue-on-error: true
id: create-issue
if: ${{ steps.process-test-report.outputs.has_flaky_tests == 'true' }}
uses: JasonEtco/create-an-issue@1b14a70e4d8dc185e5cc76d3bec9eab20257b2c5 # v2.9.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TEST_NAME: ${{ steps.get-flaky-tests.outputs.test }}
SYSTEM_ERROR: ${{ steps.get-flaky-tests.outputs.content }}
REPOSITORY: ${{ github.repository }}
RUN_ID: ${{ github.run_id }}
JOB_ID: ${{ github.job }}
SHA: ${{ github.sha }}
WORKFLOW: ${{ github.workflow }}
JOB: ${{ github.job }}
BRANCH: ${{ github.ref }}
OS: ${{ matrix.os }}
with:
filename: .github/ISSUE_TEMPLATE/flaky_test.md
update_existing: true