Skip to content

Commit 93f80af

Browse files
committed
Merge remote-tracking branch 'origin/develop' into ngates/layout27
Signed-off-by: Nicholas Gates <nick@nickgates.com> # Conflicts: # Cargo.lock # vortex-file/Cargo.toml
2 parents 150a52c + 15cec3b commit 93f80af

155 files changed

Lines changed: 3579 additions & 2566 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/actions/check-rebuild/action.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ name: "Build and verify rebuild is a no-op"
22
description: "Run a cargo command, then re-run it to verify all artifacts are cached"
33
inputs:
44
command:
5-
description: "The cargo build command to run and verify (--message-format json is appended on the verification run)"
5+
description: "The cargo build command to run and verify"
66
required: true
7+
message-format-flag:
8+
description: "The flag used to request Cargo compiler-artifact JSON during the verification run"
9+
required: false
10+
default: "--message-format"
711
runs:
812
using: "composite"
913
steps:
@@ -14,7 +18,7 @@ runs:
1418
shell: bash
1519
run: |
1620
stale=$(${{ inputs.command }} \
17-
--message-format json 2>/dev/null \
21+
${{ inputs.message-format-flag }} json 2>/dev/null \
1822
| jq -r 'select(.reason == "compiler-artifact" and .fresh == false) | .target.name')
1923
if [ -n "$stale" ]; then
2024
echo "ERROR: Rebuild recompiled crates that should have been cached:"

.github/pull_request_template.md

Lines changed: 11 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,23 @@
1-
<!--
2-
Thank you for submitting a pull request! We appreciate your time and effort.
3-
4-
Please make sure to provide enough information so that we can review your pull
5-
request. The Summary and Testing sections below contain guidance on what to
6-
include.
7-
-->
8-
9-
## Summary
1+
## Rationale for this change
102

113
<!--
12-
If this PR is related to a tracked effort, please link to the relevant issue
13-
here (e.g., `Closes: #123`). Otherwise, feel free to ignore / delete this.
14-
15-
In this section, please:
16-
17-
1. Explain the rationale for this change.
18-
2. Summarize the changes included in this PR.
4+
Why are you proposing this change, and what is its impact?
5+
Is it part of a long term effort, or a bigger change?
196
20-
A general rule of thumb is that larger PRs should have larger summaries. If
21-
there are a lot of changes, please help us review the code by explaining what
22-
was changed and why.
23-
24-
If there is an issue or discussion attached, there is no need to duplicate all
25-
the details, but clarity is always preferred over brevity.
7+
If this PR is related to a tracked effort or an open issue, please link to the relevant issue.
268
-->
279

28-
Closes: #000
10+
- Closes: #000
2911

12+
## What changes are included in this PR?
3013
<!--
31-
## API Changes
32-
33-
Uncomment this section if there are any user-facing changes.
34-
35-
Consider whether the change affects users in one of the following ways:
36-
37-
1. Breaks public APIs in some way.
38-
2. Changes the underlying behavior of one of the engine integrations.
39-
3. Should some documentation be updated to reflect this change?
40-
41-
If a public API is changed in a breaking manner, make sure to add the
42-
appropriate label.
14+
No need to duplicate information from the previous section, but if you're touching many
15+
parts of the code base, its worth explicitly noting the important changes or how they are tested.
4316
-->
4417

45-
## Testing
18+
## What APIs are changed? Are there any user-facing changes?
4619

4720
<!--
48-
Please describe how this change was tested. Here are some common categories for
49-
testing in Vortex:
50-
51-
1. Verifying existing behavior is maintained.
52-
2. Verifying new behavior and functionality works correctly.
53-
3. Serialization compatibility (backwards and forwards) should be maintained or
54-
explicitly broken.
21+
Are there any user-facing changes that might require documentation updates
22+
Is any public API changed?
5523
-->

.github/workflows/ci.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,9 @@ jobs:
154154
run: |
155155
# Build docs for the whole workspace (aside from vortex-python that is having hard time with the python-docs syntax),
156156
# including all private docs.
157-
cargo doc --profile ci --no-deps --document-private-items --workspace --exclude vortex-python
157+
cargo doc --profile ci --no-deps --document-private-items --workspace --exclude vortex-python --exclude vortex-python-cuda
158158
# nextest doesn't support doc tests, so we run it here
159-
cargo test --profile ci --doc --workspace --all-features --exclude vortex-cxx --exclude vortex-jni --exclude vortex-ffi --exclude xtask --no-fail-fast
159+
cargo test --profile ci --doc --workspace --all-features --exclude vortex-cxx --exclude vortex-jni --exclude vortex-ffi --exclude xtask --exclude vortex-python-cuda --no-fail-fast
160160
161161
build-rust:
162162
name: "Rust build (${{matrix.config.name}})"
@@ -187,7 +187,7 @@ jobs:
187187
target: wasm32-unknown-unknown
188188
env:
189189
rustflags: "RUSTFLAGS='-A warnings --cfg getrandom_backend=\"unsupported\"'"
190-
args: "--target wasm32-unknown-unknown --exclude vortex --exclude vortex-cuda --exclude vortex-cub --exclude vortex-nvcomp --exclude vortex-datafusion --exclude vortex-duckdb --exclude vortex-tui --exclude vortex-zstd --exclude vortex-test-e2e-cuda --exclude vortex-sqllogictest --exclude vortex-parquet-variant"
190+
args: "--target wasm32-unknown-unknown --exclude vortex --exclude vortex-cuda --exclude vortex-cub --exclude vortex-nvcomp --exclude vortex-datafusion --exclude vortex-duckdb --exclude vortex-tui --exclude vortex-zstd --exclude vortex-test-e2e-cuda --exclude vortex-python-cuda --exclude vortex-sqllogictest --exclude vortex-parquet-variant"
191191
steps:
192192
- uses: runs-on/action@v2
193193
if: github.repository == 'vortex-data/vortex'
@@ -355,7 +355,7 @@ jobs:
355355
--exclude vortex-bench `
356356
--exclude vortex-python --exclude vortex-duckdb `
357357
--exclude vortex-fuzz --exclude vortex-cuda --exclude vortex-cuda-ffi `
358-
--exclude vortex-nvcomp --exclude vortex-cub --exclude vortex-test-e2e-cuda `
358+
--exclude vortex-nvcomp --exclude vortex-cub --exclude vortex-test-e2e-cuda --exclude vortex-python-cuda `
359359
--exclude duckdb-bench `
360360
--exclude lance-bench --exclude datafusion-bench --exclude random-access-bench `
361361
--exclude compress-bench --exclude xtask --exclude vortex-datafusion `
@@ -460,10 +460,11 @@ jobs:
460460
- name: Run sqllogictest tests
461461
run: |
462462
./vortex-sqllogictest/slt/tpch/generate_data.sh
463-
cargo test --profile ci -p vortex-sqllogictest --test sqllogictests
463+
cargo nextest run --cargo-profile ci -p vortex-sqllogictest
464464
- uses: ./.github/actions/check-rebuild
465465
with:
466-
command: "cargo test --profile ci -p vortex-sqllogictest --test sqllogictests --no-run"
466+
command: "cargo nextest run --cargo-profile ci -p vortex-sqllogictest --no-run"
467+
message-format-flag: "--cargo-message-format"
467468

468469
wasm-integration:
469470
name: "WASM integration smoke test"

.github/workflows/codspeed.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,6 @@ jobs:
100100
--bench fsst_cuda \
101101
--bench runend_cuda \
102102
--profile bench
103-
- name: Verify CUDA kernels were built
104-
run: test -f vortex-cuda/kernels/gen/release/dynamic_dispatch.ptx
105-
- name: Stage CUDA kernels with Codspeed artifacts
106-
run: cp -R vortex-cuda/kernels/gen/release target/codspeed/cuda-kernels
107103
- name: Upload benchmark executables
108104
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
109105
with:
@@ -156,7 +152,6 @@ jobs:
156152
uses: CodSpeedHQ/action@d872884a306dd4853acf0f584f4b706cf0cc72a2
157153
env:
158154
CARGO_MANIFEST_DIR: ${{ github.workspace }}/vortex-cuda
159-
VORTEX_CUDA_KERNELS_DIR: ${{ github.workspace }}/target/codspeed/cuda-kernels
160155
with:
161156
run: cargo codspeed run $(printf -- '--bench %s ' ${{ matrix.benches }})
162157
token: ${{ secrets.CODSPEED_TOKEN }}

.github/workflows/cuda.yaml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,13 @@ jobs:
3838
filters: |
3939
cuda:
4040
- "vortex-cuda/**"
41+
- "vortex-python/python/vortex/__init__.py"
42+
- "vortex-python/pyproject.toml"
43+
- "vortex-python/test/test_cuda.py"
44+
- "vortex-python-cuda/**"
4145
- "vortex-test/**"
46+
- "pyproject.toml"
47+
- "uv.lock"
4248
- ".github/workflows/**"
4349
4450
cuda-build-lint:
@@ -62,7 +68,7 @@ jobs:
6268
command: >-
6369
cargo build --profile ci --locked --all-features --all-targets
6470
-p vortex-cuda -p vortex-cuda-ffi -p vortex-cub -p vortex-nvcomp
65-
-p gpu-scan-cli -p vortex-test-e2e-cuda
71+
-p gpu-scan-cli -p vortex-test-e2e-cuda -p vortex-python-cuda
6672
- name: Clippy CUDA crates
6773
run: |
6874
cargo clippy --profile ci --locked --all-features --all-targets \
@@ -72,6 +78,7 @@ jobs:
7278
-p vortex-nvcomp \
7379
-p gpu-scan-cli \
7480
-p vortex-test-e2e-cuda \
81+
-p vortex-python-cuda \
7582
-- -D warnings
7683
7784
cuda-test:
@@ -95,6 +102,10 @@ jobs:
95102
- uses: ./.github/actions/setup-rust
96103
with:
97104
repo-token: ${{ secrets.GITHUB_TOKEN }}
105+
- name: Install uv
106+
uses: spiraldb/actions/.github/actions/setup-uv@a746510eafaa926484c354541cfc49b2ec06cc63 # 0.18.6
107+
with:
108+
sync: false
98109
- name: Install nextest
99110
uses: taiki-e/install-action@9e1e5806d4a4822de933115878265be9aaa786d9 # v2
100111
with:
@@ -112,10 +123,19 @@ jobs:
112123
-p vortex-cub \
113124
-p vortex-nvcomp \
114125
-p vortex-test-e2e-cuda \
126+
-p vortex-python-cuda \
115127
--all-features \
116128
--no-fail-fast \
117129
--target x86_64-unknown-linux-gnu \
118130
--verbose
131+
- name: Python CUDA extension checks
132+
env:
133+
MATURIN_PEP517_ARGS: "--profile ci"
134+
run: |
135+
# --all-packages installs the shared dev tooling (basedpyright) from the
136+
# root `dev` group; --extra cuda adds the vortex-data-cuda extension.
137+
uv run --all-packages --extra cuda basedpyright vortex-python vortex-python-cuda
138+
uv run --all-packages --extra cuda pytest --benchmark-disable vortex-python/test/test_cuda.py vortex-python-cuda/test
119139
120140
cuda-test-sanitizer:
121141
needs: [changes]

.github/workflows/musl.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ jobs:
6666
run: |
6767
cargo nextest run --cargo-profile ci --locked --workspace --no-fail-fast \
6868
--exclude vortex-cuda --exclude vortex-cub --exclude vortex-nvcomp \
69-
--exclude gpu-scan-cli --exclude vortex-test-e2e-cuda \
69+
--exclude gpu-scan-cli --exclude vortex-test-e2e-cuda --exclude vortex-python-cuda \
7070
--exclude vortex-duckdb --exclude duckdb-bench --exclude vortex-sqllogictest \
7171
--exclude vortex-bench --exclude lance-bench --exclude datafusion-bench --exclude vortex-datafusion \
7272
--exclude compress-bench --exclude random-access-bench --exclude vortex-bench-server

.github/workflows/package.yml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,34 @@ jobs:
5050
run: |
5151
cargo set-version --workspace ${{ inputs.version }}
5252
53+
# cargo set-version bumps Cargo.toml crate versions but not the ==0.1.0 pins
54+
# between these two wheels in their pyproject.toml. The base and CUDA extension
55+
# wheels must require each other at the exact released version (they exchange
56+
# Vortex IPC buffers), so rewrite those pins here.
57+
- name: Set Python extension version pins
58+
env:
59+
VERSION: ${{ inputs.version }}
60+
run: |
61+
python3 - <<'PY'
62+
import os
63+
import re
64+
from pathlib import Path
65+
66+
version = os.environ["VERSION"]
67+
replacements = {
68+
Path("vortex-python/pyproject.toml"): "vortex-data-cuda",
69+
Path("vortex-python-cuda/pyproject.toml"): "vortex-data",
70+
}
71+
for path, package in replacements.items():
72+
text = path.read_text()
73+
text, count = re.subn(
74+
f"{re.escape(package)}==[^\"\\]]+", f"{package}=={version}", text
75+
)
76+
if count != 1:
77+
raise RuntimeError(f"Expected one {package} version pin in {path}, found {count}")
78+
path.write_text(text)
79+
PY
80+
5381
- name: Set up Python
5482
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
5583
# Latest macOS doesn't allow maturin to install stuff into the global Python interpreter

.github/workflows/rust-instrumented.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ jobs:
8888
- name: Rust Tests
8989
if: ${{ matrix.suite == 'tests' }}
9090
run: |
91-
cargo nextest run --locked --workspace --all-features --no-fail-fast
91+
cargo nextest run --locked --workspace --all-features --no-fail-fast --exclude vortex-python-cuda
9292
- name: Generate coverage report
9393
run: |
9494
RUST_SYSROOT="$(rustc --print sysroot)"

.github/workflows/sql-benchmarks.yml

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -681,14 +681,9 @@ jobs:
681681
python3 scripts/s3-download.py s3://vortex-ci-benchmark-results/data.json.gz data.json.gz --no-sign-request
682682
gzip -d -c data.json.gz > base.json
683683
684-
benchmark_name="${{ matrix.name }}"
685-
if [ "${{ inputs.benchmark_profile }}" != "full" ]; then
686-
benchmark_name="$benchmark_name (${{ inputs.benchmark_profile }})"
687-
fi
688-
689-
echo "# Benchmarks: $benchmark_name" > comment.md
684+
echo "# Benchmarks: ${{ matrix.name }}" > comment.md
690685
echo '' >> comment.md
691-
uv run --no-project scripts/compare-benchmark-jsons.py base.json results.json "$benchmark_name" \
686+
uv run --no-project scripts/compare-benchmark-jsons.py base.json results.json "${{ matrix.name }}" \
692687
>> comment.md
693688
cat comment.md >> "$GITHUB_STEP_SUMMARY"
694689
@@ -698,9 +693,8 @@ jobs:
698693
with:
699694
file-path: comment.md
700695
# There is exactly one comment per comment-tag. If a comment with this tag already exists,
701-
# this action will *update* the comment instead of posting a new comment. Therefore, each
702-
# unique benchmark configuration must have a unique comment-tag.
703-
comment-tag: bench-pr-comment-${{ matrix.id }}${{ inputs.benchmark_profile == 'base' && '-base' || '' }}
696+
# this action will *update* the comment instead of posting a new comment.
697+
comment-tag: bench-pr-comment-${{ matrix.id }}
704698

705699
- name: Comment PR on failure
706700
if: failure() && inputs.mode == 'pr' && github.event.pull_request.head.repo.fork == false
@@ -710,7 +704,7 @@ jobs:
710704
# 🚨🚨🚨❌❌❌ SQL BENCHMARK FAILED ❌❌❌🚨🚨🚨
711705
712706
Benchmark `${{ matrix.name }}` (${{ inputs.benchmark_profile }}) failed! Check the [workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details.
713-
comment-tag: bench-pr-comment-${{ matrix.id }}${{ inputs.benchmark_profile == 'base' && '-base' || '' }}
707+
comment-tag: bench-pr-comment-${{ matrix.id }}
714708

715709
- name: Upload Benchmark Results
716710
if: inputs.mode == 'develop'

Cargo.lock

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)