Skip to content

Update all patch updates (#5809) #21525

Update all patch updates (#5809)

Update all patch updates (#5809) #21525

Workflow file for this run

name: CI
# Concurrency control:
# - PRs: new commits on a feature branch will cancel in-progress (outdated) runs.
# - Push to develop: runs queue sequentially, never cancelled. This allows us to have benchmarks
# run on every commit for our benchmarks website.
# - `workflow_dispatch`: groups by branch and queues if run on develop.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/develop' }}
on:
push:
branches: [develop]
pull_request: { }
workflow_dispatch: { }
permissions:
actions: read
contents: read
checks: write # audit-check creates checks
issues: write # audit-check creates issues
env:
CARGO_TERM_COLOR: auto
RUST_BACKTRACE: 1
jobs:
lint-toml:
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@v6
- uses: spiraldb/actions/.github/actions/[email protected]
validate-workflow-yaml:
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@v6
- name: Validate YAML file
run: |
# Lint the workflows and yamllint's configuration file.
yamllint \
--strict \
-c .yamllint.yaml \
.github/
python-lint:
name: "Python (lint)"
runs-on:
- runs-on=${{ github.run_id }}
- family=m7i+m7i-flex+m7a
- cpu=16
- image=ubuntu24-full-x64
- extras=s3-cache
- tag=python-lint
timeout-minutes: 120
steps:
- uses: runs-on/action@v2
with:
sccache: s3
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install uv
uses: spiraldb/actions/.github/actions/[email protected]
with:
sync: false
prune-cache: false
# Use uvx for ruff to avoid building the Rust extension (saves ~4.5 min)
- name: Python Lint - Format
run: uvx ruff format --check .
- name: Python Lint - Ruff
run: uvx ruff check .
# PyRight needs the project for type information, so use uv run
- name: Python Lint - PyRight
run: uv run basedpyright vortex-python
python-test:
name: "Python (test)"
runs-on:
- runs-on=${{ github.run_id }}
- family=m7i+m7i-flex+m7a
- cpu=16
- image=ubuntu24-full-x64
- extras=s3-cache
- tag=python-test
timeout-minutes: 120
env:
RUST_LOG: "info,uv=debug"
steps:
- uses: runs-on/action@v2
with:
sccache: s3
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install uv
uses: spiraldb/actions/.github/actions/[email protected]
with:
sync: false
prune-cache: false
- name: Pytest - Vortex
run: |
uv run --all-packages pytest --benchmark-disable -n auto test/
working-directory: vortex-python/
- name: Pytest Benchmarks - Vortex
run: |
uv run --all-packages pytest --benchmark-only benchmark/
working-directory: vortex-python/
- name: Doctest - PyVortex
run: |
uv run --all-packages make doctest
working-directory: docs/
- name: Ensure docs build - PyVortex
run: |
uv run --all-packages make html
working-directory: docs/
python-wheel-build:
name: "Python (wheel build)"
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- uses: mlugg/setup-zig@v2
- name: Install uv
uses: spiraldb/actions/.github/actions/[email protected]
with:
sync: false
prune-cache: false
- name: Ensure wheel and sdist can be built on Linux - PyVortex
shell: bash
run: |
echo "Clearing wheel target directory"
rm -rf ../target/wheels/
uv venv
uv pip install "maturin[zig]"
uv tool run maturin build --interpreter python3.11 --zig
uv tool run maturin build --interpreter python3.11 --zig --sdist
file_count=$(ls -1 ../target/wheels/ | wc -l)
if [[ $file_count -ne 2 ]]; then
echo "Unexpected number of files detected ${file_count}:"
ls ../target/wheels/
exit 1
else
echo "Generated two files"
fi
working-directory: vortex-python/
rust-docs:
name: "Rust (docs)"
timeout-minutes: 120
runs-on:
- runs-on=${{ github.run_id }}
- family=m7i+m7i-flex+m7a
- cpu=8
- image=ubuntu24-full-x64
- extras=s3-cache
- tag=rust-docs
steps:
- uses: runs-on/action@v2
with:
sccache: s3
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Docs
run: |
RUSTDOCFLAGS="-D warnings" cargo doc --no-deps
# nextest doesn't support doc tests, so we run it here
cargo test --doc --workspace --all-features --exclude vortex-cxx --exclude vortex-jni --exclude vortex-ffi --exclude xtask --no-fail-fast
build-rust:
name: "Rust build (${{matrix.config.name}})"
timeout-minutes: 120
runs-on:
- runs-on=${{ github.run_id }}
- family=m7i+m7i-flex+m7a
- cpu=8
- image=ubuntu24-full-x64
- extras=s3-cache
- tag=${{ matrix.config.name }}
env:
# disable lints for build, they will be caught in Rust lint job.
RUSTFLAGS: "-A warnings"
strategy:
fail-fast: false
matrix:
config:
- name: "all-features"
command: "build"
args: "--all-features --all-targets"
- name: "default features"
command: "build"
args: "--all-targets"
- name: "with tokio dispatcher"
command: "build"
args: "--no-default-features --features tokio --all-targets --ignore-unknown-features"
- name: "wasm32 with default features"
command: "build"
target: wasm32-unknown-unknown
env:
rustflags: "RUSTFLAGS='-A warnings --cfg getrandom_backend=\"wasm_js\"'"
args: "--target wasm32-unknown-unknown --exclude vortex --exclude vortex-datafusion --exclude vortex-duckdb --exclude vortex-tui --exclude vortex-zstd"
steps:
- uses: runs-on/action@v2
with:
sccache: s3
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install wasm32 target
if: ${{ matrix.config.target == 'wasm32-unknown-unknown' }}
run: rustup target add wasm32-unknown-unknown
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
- name: Rust Build (${{matrix.config.name}})
run: ${{matrix.config.env.rustflags}} cargo hack ${{matrix.config.command}} --locked ${{matrix.config.args}} --ignore-private
- name: "Make sure no files changed after build"
run: |
git status --porcelain
test -z "$(git status --porcelain)"
check-min-deps:
name: "Check build with minimal dependencies"
timeout-minutes: 120
runs-on:
- runs-on=${{ github.run_id }}
- family=m7i+m7i-flex+m7a
- cpu=8
- image=ubuntu24-full-x64
- extras=s3-cache
- tag=rust-min-deps
steps:
- uses: runs-on/action@v2
with:
sccache: s3
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- uses: taiki-e/install-action@cargo-hack
- uses: taiki-e/install-action@cargo-minimal-versions
- run: cargo minimal-versions check --direct --workspace --ignore-private
rust-lint:
name: "Rust (lint)"
timeout-minutes: 120
runs-on:
- runs-on=${{ github.run_id }}
- family=m7i+m7i-flex+m7a
- cpu=16
- image=ubuntu24-full-x64
- extras=s3-cache
- tag=rust-lint
steps:
- uses: runs-on/action@v2
with:
sccache: s3
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
toolchain: nightly
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Rust Lint - Format
run: cargo +nightly fmt --all --check
- name: Rustc check
run: RUSTFLAGS="-D warnings" cargo check --locked --all-features --all-targets
- name: Rustc check (release)
run: RUSTFLAGS="-D warnings" cargo check --locked --all-features --all-targets --release
- name: Rust Lint - Clippy All Features
run: cargo clippy --locked --all-features --all-targets -- -D warnings
- name: Rust Lint - Clippy Default Features
run: cargo clippy --locked --all-targets -- -D warnings
rust-lint-no-default:
name: "Rust (lint, no default)"
timeout-minutes: 120
runs-on:
- runs-on=${{ github.run_id }}
- family=m7i+m7i-flex+m7a
- cpu=16
- image=ubuntu24-full-x64
- extras=s3-cache
- tag=rust-lint-no-default
steps:
- uses: runs-on/action@v2
with:
sccache: s3
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
- name: Rust Lint - Clippy No Default Features
shell: bash
run: |
# https://spiraldb.slack.com/archives/C07BV3GKAJ2/p1732736281946729
cargo hack clippy --no-default-features -- -D warnings
rust-semver:
name: "Rust (semver checks)"
timeout-minutes: 120
if: github.ref != 'refs/heads/develop'
runs-on:
- runs-on=${{ github.run_id }}
- family=m7i+m7i-flex+m7a
- cpu=16
- image=ubuntu24-full-x64
- extras=s3-cache
- tag=rust-semver
steps:
- uses: runs-on/action@v2
with:
sccache: s3
- uses: actions/checkout@v6
with:
fetch-depth: 0
fetch-tags: true
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
# We have to set the correct Cargo.toml versions so semver checks uses the previous release.
- name: Latest Tag
id: latest-tag
run: |
LATEST_TAG=$(git describe --tags --abbrev=0)
echo "tag=$LATEST_TAG" >> $GITHUB_OUTPUT
- name: Cargo Set Version
run: |
cargo install cargo-edit
cargo set-version --workspace ${{ steps.latest-tag.outputs.tag }}
- name: Check semver
uses: obi1kenobi/cargo-semver-checks-action@v2
rust-coverage:
name: "Rust tests (coverage)"
timeout-minutes: 120
permissions:
id-token: write
strategy:
matrix:
suite:
- tests
- tpc-h
- ffi
runs-on:
- runs-on=${{ github.run_id }}
- family=m7i+m7i-flex+m7a
- cpu=16
- image=ubuntu24-full-x64
- extras=s3-cache
- tag=rust-coverage
- tag=suite-${{ matrix.suite }}
env:
RUSTFLAGS: "-Cinstrument-coverage -A warnings"
CARGO_INCREMENTAL: 0 # Disable incremental compilation to get accurate coverage
LLVM_PROFILE_FILE: "target/coverage/vortex-%p-%m.profraw"
GRCOV_OUTPUT_FILE: "target/coverage/vortex.lcov"
steps:
- uses: runs-on/action@v2
with:
sccache: s3
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install grcov
uses: taiki-e/install-action@grcov
- name: Install nextest
uses: taiki-e/install-action@v2
with:
tool: nextest
- name: Rust Tests
if: ${{ matrix.suite == 'tests' }}
env:
RUSTFLAGS: "-Cinstrument-coverage -A warnings --cfg vortex_nightly"
run: |
cargo +nightly nextest run --locked --workspace --all-features --no-fail-fast
- name: Run TPC-H
if: ${{ matrix.suite == 'tpc-h' }}
# We use i2 to ensure that restarting the duckdb connection succeeds
run: |
cargo run --bin datafusion-bench -- tpch -i2 --formats "vortex,vortex-compact" --opt scale-factor=0.1
cargo run --bin duckdb-bench -- tpch -i2 --formats "vortex,vortex-compact" --opt scale-factor=0.1
- name: Run FFI Example
if: ${{ matrix.suite == 'ffi' }}
run: |
cargo build -p vortex-ffi
cargo run -p vortex-ffi --example hello_vortex
- name: Install llvm-tools-preview
run: rustup component add llvm-tools-preview
- name: Generate coverage report
run: |
grcov . --binary-path target/debug/ -s . -t lcov --llvm --ignore-not-existing \
--threads $(nproc) \
--ignore '../*' --ignore '/*' --ignore 'fuzz/*' --ignore 'vortex-bench/*' \
--ignore 'home/*' --ignore 'xtask/*' --ignore 'target/*' --ignore 'vortex-error/*' \
--ignore 'vortex-python/*' --ignore 'vortex-jni/*' --ignore 'vortex-flatbuffers/*' \
--ignore 'vortex-proto/*' --ignore 'vortex-tui/*' --ignore 'vortex-datafusion/examples/*' \
--ignore 'vortex-ffi/examples/*' --ignore '*/arbitrary/*' --ignore '*/arbitrary.rs' --ignore 'vortex-cxx/*' \
--ignore 'vortex-gpu/*' --ignore benchmarks/* \
-o ${{ env.GRCOV_OUTPUT_FILE }}
- name: Codecov
uses: codecov/codecov-action@v5
with:
name: run-${{ matrix.suite }}
files: ${{ env.GRCOV_OUTPUT_FILE }}
disable_search: true
flags: ${{ matrix.suite }}
use_oidc: true
rust-test:
name: "Rust tests (sanitizer)"
timeout-minutes: 120
runs-on:
- runs-on=${{ github.run_id }}
- family=m7i+m7i-flex+m7a
- cpu=16
- image=ubuntu24-full-x64
- extras=s3-cache
- tag=rust-test-sanitizer
env:
# Add debug symbols and enable ASAN/LSAN with better output
RUSTFLAGS: "-A warnings -Zsanitizer=address -Zsanitizer=leak --cfg disable_loom --cfg vortex_nightly -C debuginfo=2 -C opt-level=0 -C strip=none"
ASAN_OPTIONS: "symbolize=1:print_stats=1:check_initialization_order=1:detect_leaks=1:halt_on_error=0:verbosity=1:leak_check_at_exit=1"
LSAN_OPTIONS: "verbosity=1:report_objects=1"
ASAN_SYMBOLIZER_PATH: "/usr/bin/llvm-symbolizer"
# Link against DuckDB debug build
VX_DUCKDB_DEBUG: "1"
# Keep frame pointers for better stack traces
CARGO_PROFILE_DEV_DEBUG: "true"
CARGO_PROFILE_TEST_DEBUG: "true"
steps:
- uses: runs-on/action@v2
with:
sccache: s3
- uses: actions/checkout@v6
- name: Install llvm
uses: aminya/setup-cpp@v1
with:
compiler: llvm
cache-tools: true
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
toolchain: nightly
components: "rust-src, rustfmt, clippy, llvm-tools-preview"
cache-suffix: "sanitizer"
- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y ninja-build cmake
- name: Install nextest
uses: taiki-e/install-action@v2
with:
tool: nextest
- name: Rust Tests
run: |
# Build with full debug info first (helps with caching)
cargo +nightly build --locked --workspace --all-features --target x86_64-unknown-linux-gnu
# Run tests with sanitizers and debug output
cargo +nightly nextest run \
--locked \
--workspace \
--all-features \
--no-fail-fast \
--target x86_64-unknown-linux-gnu \
--verbose
rust-test-other:
name: "Rust tests (${{ matrix.os }})"
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
include:
- os: windows-x64
runner: runs-on=${{ github.run_id }}/pool=windows-x64
- os: linux-arm64
runner:
- runs-on=${{ github.run_id }}
- family=m7g
- cpu=8
- image=ubuntu24-full-arm64
- extras=s3-cache
- tag=rust-test-linux-arm64
runs-on: ${{ matrix.runner }}
steps:
- uses: runs-on/action@v2
if: matrix.os == 'linux-arm64'
with:
sccache: s3
- uses: actions/checkout@v5
- name: Install Visual Studio Build Tools (Windows)
if: matrix.os == 'windows-x64'
shell: bash
run: |
choco install visualstudio2022buildtools --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --passive" -y
- name: Setup Python (Windows)
if: matrix.os == 'windows-x64'
uses: actions/setup-python@v5
with:
python-version: "3.11"
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install nextest
uses: taiki-e/install-action@v2
with:
tool: nextest
- name: Rust Tests (Windows)
if: matrix.os == 'windows-x64'
run: |
cargo nextest run --locked --workspace --all-features --no-fail-fast --exclude vortex-bench --exclude vortex-python --exclude vortex-duckdb --exclude vortex-fuzz --exclude duckdb-bench --exclude lance-bench --exclude datafusion-bench --exclude random-access-bench --exclude compress-bench
- name: Rust Tests (Other)
if: matrix.os != 'windows-x64'
run: cargo nextest run --locked --workspace --all-features --no-fail-fast --exclude vortex-bench --exclude vortex-duckdb
build-java:
name: "Java"
runs-on:
- runs-on=${{ github.run_id }}
- family=m7i+m7i-flex+m7a
- cpu=16
- image=ubuntu24-full-x64
- extras=s3-cache
- tag=java
timeout-minutes: 120
steps:
- uses: runs-on/action@v2
with:
sccache: s3
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
distribution: "corretto"
java-version: "17"
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- run: ./gradlew test --parallel
working-directory: ./java
bench-codspeed:
strategy:
matrix:
include:
- { shard: 1, name: "Core foundation", packages: "vortex-buffer vortex-dtype vortex-error" }
- { shard: 2, name: "Array types", packages: "vortex-array vortex-scalar vortex-vector", features: "--features test-harness" }
- { shard: 3, name: "Main library", packages: "vortex vortex-compute" }
- { shard: 4, name: "Encodings 1", packages: "vortex-alp vortex-bytebool vortex-datetime-parts" }
- { shard: 5, name: "Encodings 2", packages: "vortex-decimal-byte-parts vortex-fastlanes vortex-fsst", features: "--features test-harness" }
- { shard: 6, name: "Encodings 3", packages: "vortex-pco vortex-runend vortex-sequence" }
- { shard: 7, name: "Encodings 4", packages: "vortex-sparse vortex-zigzag vortex-zstd" }
- { shard: 8, name: "Storage formats", packages: "vortex-flatbuffers vortex-proto vortex-btrblocks" }
name: "Benchmark with Codspeed (Shard #${{ matrix.shard }})"
timeout-minutes: 120
runs-on:
- runs-on=${{ github.run_id }}
- family=c7i.8xlarge
- extras=s3-cache
- image=ubuntu24-full-x64
- tag=bench-codspeed-${{ matrix.shard }}
steps:
- uses: runs-on/action@v2
with:
sccache: s3
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Codspeed
run: cargo install --force cargo-codspeed --locked
- name: Build benchmarks
env:
RUSTFLAGS: "-C target-feature=+avx2 -C debug-assertions=yes"
run: cargo codspeed build ${{ matrix.features }} $(printf -- '-p %s ' ${{ matrix.packages }}) --profile bench
- name: Run benchmarks
uses: CodSpeedHQ/action@346a2d8a8d9d38909abd0bc3d23f773110f076ad
with:
run: cargo codspeed run
token: ${{ secrets.CODSPEED_TOKEN }}
mode: "simulation"
license-check-and-audit-check:
name: License Check and Audit Check
runs-on: ubuntu-latest
timeout-minutes: 120
strategy:
matrix:
checks:
- advisories
- bans licenses sources
# Prevent sudden announcement of a new advisory from failing ci:
continue-on-error: ${{ matrix.checks == 'advisories' }}
steps:
- uses: actions/checkout@v6
- uses: EmbarkStudios/cargo-deny-action@v2
with:
command: check ${{ matrix.checks }}
cxx-test:
name: "C++ build"
timeout-minutes: 120
runs-on:
- runs-on=${{ github.run_id }}
- family=m7i+m7i-flex+m7a
- cpu=8
- image=ubuntu24-full-x64
- extras=s3-cache
- tag=cxx-build
steps:
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Build and run C++ unit tests
working-directory: vortex-cxx/
run: |
mkdir -p build
cd build
cmake -DVORTEX_ENABLE_TESTING=ON -DVORTEX_ENABLE_ASAN=ON ..
cmake --build . --parallel $(nproc)
ctest -V
- name: Build and run the example in release mode
working-directory: vortex-cxx/examples
run: |
mkdir -p build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --parallel $(nproc)
./hello-vortex ../goldenfiles/example.vortex
wasm-integration:
name: "wasm-integration"
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
targets: "wasm32-wasip1"
- name: Setup Wasmer
uses: wasmerio/[email protected]
- run: cargo build --target wasm32-wasip1
working-directory: ./wasm-test
- run: wasmer run ./target/wasm32-wasip1/debug/wasm-test.wasm
working-directory: ./wasm-test
miri:
name: "Rust tests (miri)"
runs-on: ubuntu-latest
timeout-minutes: 120
env:
MIRIFLAGS: -Zmiri-strict-provenance -Zmiri-symbolic-alignment-check -Zmiri-disable-isolation -Zmiri-env-forward=RUST_BACKTRACE
RUSTFLAGS: "-A warnings --cfg vortex_nightly"
RUST_BACKTRACE: full
steps:
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
toolchain: nightly
components: "rust-src, rustfmt, clippy, miri"
- uses: taiki-e/install-action@v2
with:
tool: nextest
- name: Run Miri
run: cargo +nightly miri nextest run --no-fail-fast -p vortex-buffer -p vortex-ffi
generated-files:
name: "Check generated source files are up to date"
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@v6
- uses: ./.github/actions/setup-rust
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
toolchain: nightly
- uses: ./.github/actions/setup-flatc
- name: "regenerate all .fbs/.proto Rust code"
run: |
cargo xtask generate-fbs
cargo xtask generate-proto
- name: "regenerate FFI header file"
run: |
cargo +nightly build -p vortex-ffi
- name: "Make sure no files changed after regenerating"
run: |
git status --porcelain
test -z "$(git status --porcelain)"
- name: "Checkout develop flatbuffers"
working-directory: vortex-flatbuffers/
run: |
cp -R flatbuffers flatbuffers.HEAD
git fetch origin develop --depth 1
git checkout origin/develop -- flatbuffers
- name: "Verify flatbuffer back-compat"
working-directory: vortex-flatbuffers/
run: |
find flatbuffers/ -type f -name "*.fbs" | sed 's/^flatbuffers\///' | xargs -I{} -n1 flatc -I flatbuffers.HEAD --conform-includes flatbuffers --conform flatbuffers/{} flatbuffers.HEAD/{}