Skip to content
Draft
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# macOS: prefer `brew install duckdb` (ships libduckdb + pkg-config). Linker search paths
# below match default Homebrew prefixes. Without brew, run `export DUCKDB_DOWNLOAD_LIB=1`
# so libduckdb-sys downloads the official osx-universal dylib.
#
# Linux: do not set global rustflags here; CI installs `libduckdb.so` system-wide and sets
# `DUCKDB_LIB_DIR` / `DUCKDB_INCLUDE_DIR`, while `Makefile` only falls back to
# `DUCKDB_DOWNLOAD_LIB=1` when `DUCKDB_LIB_DIR` is unset.

[target.aarch64-apple-darwin]
rustflags = ["-L", "/opt/homebrew/lib"]

[target.x86_64-apple-darwin]
rustflags = ["-L", "/usr/local/lib"]
64 changes: 42 additions & 22 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,12 @@ env:
RUST_TOOLCHAIN_VERSION: "1.91.1"
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
# DuckDB Rust crate: download prebuilt libduckdb in CI (no system libduckdb).
DUCKDB_DOWNLOAD_LIB: "1"
# Do not set RUSTFLAGS to -fuse-ld=mold: mold then fails to resolve -lduckdb from
# libduckdb-sys's rustc-link-search (see mold: fatal: library not found: duckdb).
# libduckdb-sys: point at system-installed lib so rust-lld resolves -lduckdb reliably.
# The "Install libduckdb" step in each job puts the .so + headers there.
DUCKDB_LIB_DIR: /usr/local/lib
DUCKDB_INCLUDE_DIR: /usr/local/include
# Must match duckdb crate version: duckdb 1.85.1 → libduckdb-sys 1.10501.0 → DuckDB v1.5.1.
DUCKDB_VERSION: "1.5.1"

jobs:
# Fast, no PyO3 / no compile — runs in parallel with clippy + unit tests.
Expand All @@ -46,6 +48,15 @@ jobs:
steps:
- uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5

- name: Install libduckdb
run: |
curl -fsSL "https://github.com/duckdb/duckdb/releases/download/v${DUCKDB_VERSION}/libduckdb-linux-amd64.zip" -o /tmp/duckdb.zip
unzip -o /tmp/duckdb.zip -d /tmp/duckdb
sudo cp /tmp/duckdb/libduckdb.so /usr/local/lib/
sudo cp /tmp/duckdb/duckdb.h /usr/local/include/
sudo cp /tmp/duckdb/duckdb.hpp /usr/local/include/ 2>/dev/null || true
sudo ldconfig

- uses: dtolnay/rust-toolchain@d8352f6b1d2e870bc5716e7a6d9b65c4cc244a1a
with:
toolchain: ${{ env.RUST_TOOLCHAIN_VERSION }}
Expand Down Expand Up @@ -76,6 +87,15 @@ jobs:
steps:
- uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5

- name: Install libduckdb
run: |
curl -fsSL "https://github.com/duckdb/duckdb/releases/download/v${DUCKDB_VERSION}/libduckdb-linux-amd64.zip" -o /tmp/duckdb.zip
unzip -o /tmp/duckdb.zip -d /tmp/duckdb
sudo cp /tmp/duckdb/libduckdb.so /usr/local/lib/
sudo cp /tmp/duckdb/duckdb.h /usr/local/include/
sudo cp /tmp/duckdb/duckdb.hpp /usr/local/include/ 2>/dev/null || true
sudo ldconfig

- uses: dtolnay/rust-toolchain@d8352f6b1d2e870bc5716e7a6d9b65c4cc244a1a
with:
toolchain: ${{ env.RUST_TOOLCHAIN_VERSION }}
Expand All @@ -96,7 +116,8 @@ jobs:
echo "PYO3_PYTHON=${GITHUB_WORKSPACE}/.venv/bin/python3" >> "$GITHUB_ENV"
echo "PYTHONPATH=$(.venv/bin/python3 -c 'import site; print(site.getsitepackages()[0])')" >> "$GITHUB_ENV"

- run: cargo test --tests --workspace --exclude queryflux-e2e-tests --exclude queryflux-bench
- name: Unit & integration tests (make test)
run: make test

e2e:
name: E2E tests (Docker)
Expand All @@ -118,6 +139,15 @@ jobs:
large-packages: true
swap-storage: true

- name: Install libduckdb
run: |
curl -fsSL "https://github.com/duckdb/duckdb/releases/download/v${DUCKDB_VERSION}/libduckdb-linux-amd64.zip" -o /tmp/duckdb.zip
unzip -o /tmp/duckdb.zip -d /tmp/duckdb
sudo cp /tmp/duckdb/libduckdb.so /usr/local/lib/
sudo cp /tmp/duckdb/duckdb.h /usr/local/include/
sudo cp /tmp/duckdb/duckdb.hpp /usr/local/include/ 2>/dev/null || true
sudo ldconfig

- uses: dtolnay/rust-toolchain@d8352f6b1d2e870bc5716e7a6d9b65c4cc244a1a
with:
toolchain: ${{ env.RUST_TOOLCHAIN_VERSION }}
Expand All @@ -138,27 +168,17 @@ jobs:
echo "PYO3_PYTHON=${GITHUB_WORKSPACE}/.venv/bin/python3" >> "$GITHUB_ENV"
echo "PYTHONPATH=$(.venv/bin/python3 -c 'import site; print(site.getsitepackages()[0])')" >> "$GITHUB_ENV"

# E2E compiles deps + integration tests via `cargo test` below. The `queryflux` binary is
# already covered by the clippy job (`--all-targets`).

- name: Start e2e Docker stack
run: docker compose -f docker/docker-compose.test.yml --project-directory . up -d --wait trino starrocks sentinel
# Same as `make test-e2e` locally (compose up → e2e crate → compose down on success).
- name: E2E tests (make test-e2e)
run: make test-e2e

- name: Engine logs (debug on failure)
if: failure()
run: |
docker compose -f docker/docker-compose.test.yml --project-directory . logs --no-color --tail=200 trino || true
docker compose -f docker/docker-compose.test.yml --project-directory . logs --no-color --tail=200 starrocks || true

- name: E2E tests
run: |
TRINO_URL=http://localhost:18081 \
STARROCKS_URL=mysql://root@localhost:9030 \
LAKEKEEPER_URL=http://localhost:18181 \
MINIO_ENDPOINT=localhost:19000 \
DUCKDB_DOWNLOAD_LIB=1 \
cargo test -p queryflux-e2e-tests -- --test-threads=1 --include-ignored
docker compose -f docker/test/docker-compose.test.yml --project-directory . logs --no-color --tail=200 trino || true
docker compose -f docker/test/docker-compose.test.yml --project-directory . logs --no-color --tail=200 starrocks || true
docker compose -f docker/test/docker-compose.test.yml --project-directory . logs --no-color --tail=200 fakesnow || true

- name: Stop e2e Docker stack
if: always()
run: docker compose -f docker/docker-compose.test.yml --project-directory . down
run: docker compose -f docker/test/docker-compose.test.yml --project-directory . down
4 changes: 4 additions & 0 deletions .github/workflows/docker-verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ name: Docker — QueryFlux (verify)

on:
pull_request:
paths-ignore:
- 'website/**'
- 'docs/**'
- '*.md'

jobs:
docker-verify:
Expand Down
Loading
Loading