Skip to content

Commit 9c934a6

Browse files
committed
feat: upgrade spiceai-52 to Vortex 0.68.0
Signed-off-by: Luke Kim <80174+lukekim@users.noreply.github.com>
2 parents d694abd + ae906c7 commit 9c934a6

1,794 files changed

Lines changed: 138325 additions & 62673 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.

.config/nextest.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[[profile.default.overrides]]
2+
filter = 'test(compress_large_int)'
3+
priority = 100
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: "Build and verify rebuild is a no-op"
2+
description: "Run a cargo command, then re-run it to verify all artifacts are cached"
3+
inputs:
4+
command:
5+
description: "The cargo build command to run and verify (--message-format json is appended on the verification run)"
6+
required: true
7+
runs:
8+
using: "composite"
9+
steps:
10+
- name: "Build"
11+
shell: bash
12+
run: ${{ inputs.command }}
13+
- name: "Verify rebuild is a no-op"
14+
shell: bash
15+
run: |
16+
stale=$(${{ inputs.command }} \
17+
--message-format json 2>/dev/null \
18+
| jq -r 'select(.reason == "compiler-artifact" and .fresh == false) | .target.name')
19+
if [ -n "$stale" ]; then
20+
echo "ERROR: Rebuild recompiled crates that should have been cached:"
21+
echo "$stale"
22+
exit 1
23+
fi
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
name: "Setup Prebuild"
2+
description: "Prebuild AMIs — uses pre-installed tools, falls back to full setup-rust for forks"
3+
4+
inputs:
5+
repo-token:
6+
description: "GitHub token for accessing the repository (typically secrets.GITHUB_TOKEN)"
7+
required: false
8+
default: "${{ github.token }}"
9+
toolchain:
10+
description: "optional override for the toolchain version (e.g. nightly)"
11+
required: false
12+
components:
13+
description: "optional override for the components to install for the step (e.g. clippy, rustfmt, miri)"
14+
default: "clippy, rustfmt"
15+
required: false
16+
targets:
17+
description: "optional targets override (e.g. wasm32-unknown-unknown)"
18+
required: false
19+
enable-sccache:
20+
description: "Should sccache be enabled, true by default."
21+
required: false
22+
default: "true"
23+
24+
runs:
25+
using: "composite"
26+
steps:
27+
# Prebuild path: tools already installed, just configure sccache
28+
- name: Configure sccache timeout
29+
if: github.repository == 'vortex-data/vortex' && inputs.enable-sccache == 'true'
30+
shell: bash
31+
run: |
32+
mkdir -p ~/.config/sccache
33+
echo 'server_startup_timeout_ms = 60000' > ~/.config/sccache/config
34+
35+
- name: Pre-start sccache server
36+
if: github.repository == 'vortex-data/vortex' && inputs.enable-sccache == 'true'
37+
shell: bash
38+
run: sccache --start-server
39+
40+
# Fallback path: full setup for forks
41+
- name: Full Rust setup
42+
if: github.repository != 'vortex-data/vortex'
43+
uses: ./.github/actions/setup-rust
44+
with:
45+
repo-token: ${{ inputs.repo-token }}
46+
toolchain: ${{ inputs.toolchain }}
47+
components: ${{ inputs.components }}
48+
targets: ${{ inputs.targets }}
49+
enable-sccache: ${{ inputs.enable-sccache }}

.github/actions/setup-rust/action.yml

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ description: "Toolchain setup and Initial compilation"
33

44
inputs:
55
repo-token:
6-
description: "Deprecated: no longer used. Protoc is now downloaded directly from GitHub releases CDN."
6+
description: "GitHub token for accessing the repository (typically secrets.GITHUB_TOKEN)"
77
required: false
8-
default: ""
8+
default: "${{ github.token }}"
99
toolchain:
1010
description: "optional override for the toolchain version (e.g. nightly)"
1111
required: false
@@ -38,21 +38,58 @@ runs:
3838
if: runner.os == 'Linux'
3939
uses: rui314/setup-mold@v1
4040

41+
- name: Check for rustup
42+
id: check-rustup
43+
shell: bash
44+
run: echo "exists=$(command -v rustup &> /dev/null && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT
45+
4146
- name: Rust Toolchain
4247
id: rust-toolchain
4348
uses: dtolnay/rust-toolchain@stable
44-
if: steps.rustup-cache.outputs.cache-hit != 'true'
49+
if: steps.check-rustup.outputs.exists != 'true'
4550
with:
4651
toolchain: "${{ steps.toolchain-config.outputs.toolchain }}"
4752
targets: "${{ inputs.targets }}"
4853
components: "${{ inputs.components }}"
4954

55+
- name: Install additional targets and components
56+
if: steps.check-rustup.outputs.exists == 'true'
57+
shell: bash
58+
run: |
59+
rustup toolchain install "$TOOLCHAIN"
60+
[[ -n "$TARGETS" ]] && rustup target add --toolchain "$TOOLCHAIN" ${TARGETS//,/ }
61+
[[ -n "$COMPONENTS" ]] && rustup component add --toolchain "$TOOLCHAIN" ${COMPONENTS//,/ }
62+
env:
63+
TOOLCHAIN: ${{ steps.toolchain-config.outputs.toolchain }}
64+
TARGETS: ${{ inputs.targets }}
65+
COMPONENTS: ${{ inputs.components }}
66+
67+
- name: Configure sccache timeout
68+
if: inputs.enable-sccache == 'true'
69+
shell: bash
70+
run: |
71+
mkdir -p ~/.config/sccache
72+
echo 'server_startup_timeout_ms = 60000' > ~/.config/sccache/config
73+
5074
- name: Rust Compile Cache
5175
if: inputs.enable-sccache == 'true'
5276
uses: mozilla-actions/sccache-action@v0.0.9
53-
with:
54-
version: "v0.14.0"
77+
78+
- name: Pre-start sccache server
79+
if: inputs.enable-sccache == 'true'
80+
shell: bash
81+
run: sccache --start-server
5582

5683
- name: Install Protoc (for lance-encoding build step)
5784
if: runner.os != 'Windows'
5885
uses: ./.github/actions/setup-protoc
86+
87+
- name: Install Sweep
88+
shell: bash
89+
if: ${{ inputs.timestamp == 'true' && github.ref_name == 'develop' }}
90+
run: cargo install cargo-sweep
91+
92+
- name: Timestamp Cache
93+
shell: bash
94+
if: ${{ inputs.timestamp == 'true' && github.ref_name == 'develop' }}
95+
run: cargo sweep --stamp

.github/runs-on.yml

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1 @@
1-
images:
2-
vortex-ci-amd64:
3-
platform: "linux"
4-
arch: "x64"
5-
name: "vortex-ci-*"
6-
owner: "375504701696"
7-
vortex-ci-arm64:
8-
platform: "linux"
9-
arch: "arm64"
10-
name: "vortex-ci-*"
11-
owner: "375504701696"
1+
_extends: .github-private

.github/scripts/fuzz_report/cli.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,8 +363,9 @@ def cmd_report(args: argparse.Namespace) -> int:
363363
print(f"Commented on #{existing_issue}", file=sys.stderr)
364364
_write_github_output("issue_number", str(existing_issue))
365365
else:
366-
fuzz_target = variables.get("FUZZ_TARGET", "unknown")
367-
title = f"Fuzzing Crash: {crash_info.error_variant} in {fuzz_target}"
366+
# Use FUZZ_NAME for the title (descriptive name), fall back to FUZZ_TARGET
367+
fuzz_name = variables.get("FUZZ_NAME") or variables.get("FUZZ_TARGET", "unknown")
368+
title = f"Fuzzing Crash: {crash_info.error_variant} in {fuzz_name}"
368369

369370
body = render_template(str(TEMPLATES_DIR / "new_issue.md"), variables, use_env=False)
370371
body_file = Path("issue_body.md")

.github/scripts/fuzz_report/templates/new_issue.md

Lines changed: 54 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
**Crash Location**: `{{CRASH_LOCATION}}`
66

77
**Error Message**:
8+
89
```
910
{{PANIC_MESSAGE}}
1011
```
@@ -15,6 +16,7 @@
1516
```
1617
{{STACK_TRACE_RAW}}
1718
```
19+
1820
</details>
1921
{% if CLAUDE_ANALYSIS %}
2022

@@ -31,23 +33,66 @@
3133
- **Commit**: {{COMMIT}}
3234
- **Crash Artifact**: {{ARTIFACT_URL}}
3335

34-
### Reproduction
36+
### Reproduce
37+
38+
```bash
39+
cargo +nightly fuzz run -D --sanitizer=none {{FUZZ_TARGET}} ./fuzz/artifacts/{{FUZZ_TARGET}}/{{CRASH_FILE}} -- -rss_limit_mb=0
40+
```
41+
42+
<details>
43+
<summary>Reproduction Steps</summary>
44+
45+
1. Download the crash artifact: {{ARTIFACT_URL}}
3546

36-
1. Download the crash artifact:
37-
- **Direct download**: {{ARTIFACT_URL}}
38-
- Extract the zip file
47+
2. Assuming you download the zipfile to `~/Downloads`, and your working directory is the repository root:
3948

40-
2. Reproduce locally:
4149
```bash
42-
cargo +nightly fuzz run -D --sanitizer=none {{FUZZ_TARGET}} {{FUZZ_TARGET}}/{{CRASH_FILE}} -- -rss_limit_mb=0
50+
# Create the artifacts directory if you haven't already.
51+
mkdir -p ./fuzz/artifacts
52+
53+
# Move the zipfile.
54+
mv ~/Downloads/{{FUZZ_TARGET}}-crash-artifacts.zip ./fuzz/artifacts/
55+
56+
# Unzip the zipfile.
57+
unzip ./fuzz/artifacts/{{FUZZ_TARGET}}-crash-artifacts.zip -d ./fuzz/artifacts/
58+
59+
# You can remove the zipfile now if you want to.
60+
rm ./fuzz/artifacts/{{FUZZ_TARGET}}-crash-artifacts.zip
4361
```
4462

45-
3. Get full backtrace:
63+
3. Reproduce the crash:
64+
4665
```bash
47-
RUST_BACKTRACE=full cargo +nightly fuzz run -D --sanitizer=none {{FUZZ_TARGET}} {{FUZZ_TARGET}}/{{CRASH_FILE}} -- -rss_limit_mb=0
66+
cargo +nightly fuzz run -D --sanitizer=none {{FUZZ_TARGET}} ./fuzz/artifacts/{{FUZZ_TARGET}}/{{CRASH_FILE}} -- -rss_limit_mb=0
4867
```
4968

69+
If you want a backtrace:
70+
71+
```bash
72+
RUST_BACKTRACE=1 cargo +nightly fuzz run -D --sanitizer=none {{FUZZ_TARGET}} ./fuzz/artifacts/{{FUZZ_TARGET}}/{{CRASH_FILE}} -- -rss_limit_mb=0
73+
```
74+
75+
```bash
76+
RUST_BACKTRACE=full cargo +nightly fuzz run -D --sanitizer=none {{FUZZ_TARGET}} ./fuzz/artifacts/{{FUZZ_TARGET}}/{{CRASH_FILE}} -- -rss_limit_mb=0
77+
```
78+
79+
</details>
80+
81+
<details>
82+
<summary>Single command to get a backtrace</summary>
83+
84+
```bash
85+
mkdir -p ./fuzz/artifacts
86+
mv ~/Downloads/{{FUZZ_TARGET}}-crash-artifacts.zip ./fuzz/artifacts/
87+
unzip ./fuzz/artifacts/{{FUZZ_TARGET}}-crash-artifacts.zip -d ./fuzz/artifacts/
88+
rm ./fuzz/artifacts/{{FUZZ_TARGET}}-crash-artifacts.zip
89+
RUST_BACKTRACE=1 cargo +nightly fuzz run -D --sanitizer=none {{FUZZ_TARGET}} ./fuzz/artifacts/{{FUZZ_TARGET}}/{{CRASH_FILE}} -- -rss_limit_mb=0
90+
```
91+
92+
</details>
93+
5094
<!-- seed_hash:{{SEED_HASH}} stack_hash:{{STACK_TRACE_HASH}} message_hash:{{MESSAGE_HASH}} -->
5195

5296
---
53-
*Auto-created by fuzzing workflow*
97+
98+
_Auto-created by fuzzing workflow_

.github/scripts/run-sql-bench.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#
1616
# Options:
1717
# --scale-factor <sf> Scale factor for the benchmark (e.g., 1.0, 10.0)
18+
# --iterations <n> Number of iterations to pass to each benchmark binary
1819
# --remote-storage <url> Remote storage URL (e.g., s3://bucket/path/)
1920
# If provided, runs in remote mode (no lance support).
2021
# --benchmark-id <id> Benchmark ID for error messages (e.g., tpch-s3)
@@ -26,6 +27,7 @@ targets="$2"
2627
shift 2
2728

2829
scale_factor=""
30+
iterations=""
2931
remote_storage=""
3032
benchmark_id=""
3133

@@ -35,6 +37,10 @@ while [[ $# -gt 0 ]]; do
3537
scale_factor="$2"
3638
shift 2
3739
;;
40+
--iterations)
41+
iterations="$2"
42+
shift 2
43+
;;
3844
--remote-storage)
3945
remote_storage="$2"
4046
shift 2
@@ -91,6 +97,9 @@ if [[ -n "$scale_factor" ]]; then
9197
opts="--opt scale-factor=$scale_factor"
9298
fi
9399
fi
100+
if [[ -n "$iterations" ]]; then
101+
opts="-i $iterations $opts"
102+
fi
94103

95104
touch results.json
96105

.github/workflows/approvals.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
name: PR Approval Check
2+
3+
on:
4+
pull_request_review:
5+
types: [submitted, dismissed]
6+
7+
jobs:
8+
check-approvals:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Check required approvals
12+
uses: actions/github-script@450193c5abd4cdb17ba9f3ffcfe8f635c4bb6c2a
13+
with:
14+
script: |
15+
const pr = context.payload.pull_request;
16+
const reviews = await github.rest.pulls.listReviews({
17+
owner: context.repo.owner,
18+
repo: context.repo.repo,
19+
pull_number: pr.number,
20+
});
21+
22+
// Count unique human approvals (latest review per user)
23+
const latestByUser = {};
24+
for (const review of reviews.data) {
25+
if (review.user.type === 'Bot') continue;
26+
latestByUser[review.user.login] = review.state;
27+
}
28+
const approvalCount = Object.values(latestByUser)
29+
.filter(state => state === 'APPROVED').length;
30+
31+
// Determine if PR author is a bot/GitHub Actions
32+
const authorType = pr.user.type; // 'Bot' vs 'User'
33+
const authorLogin = pr.user.login; // e.g. 'github-actions[bot]'
34+
const isBot = authorType === 'Bot' || authorLogin.endsWith('[bot]');
35+
36+
const required = isBot ? 2 : 1;
37+
38+
console.log(`PR author: ${authorLogin} (${authorType}), isBot: ${isBot}`);
39+
console.log(`Approvals: ${approvalCount} / ${required} required`);
40+
41+
if (approvalCount < required) {
42+
core.setFailed(
43+
`This PR needs ${required} human approval(s) but has ${approvalCount}. ` +
44+
`(Author is ${isBot ? 'a bot' : 'human'})`
45+
);
46+
}

0 commit comments

Comments
 (0)