Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
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 @@
# Allow pyo3 cdylib crates to build with plain `cargo build` on macOS.
# maturin sets this flag automatically; we replicate it here for workspace builds.
#
# NOTE: These flags are required by pyo3 (gf-bindings-py) but are not needed by
# napi-rs (gf-bindings-node). napi-rs native builds use the pure-JS stub at the
# skeleton stage, so the native crate is not compiled. When napi-rs native builds
# are enabled in Milestone 14, move these flags into
# crates/gf-bindings-py/.cargo/config.toml and remove them from here.
[target.aarch64-apple-darwin]
rustflags = ["-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup"]

[target.x86_64-apple-darwin]
rustflags = ["-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup"]
12 changes: 12 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,15 @@ indent_style = tab
[.github/workflows/*.{yml,yaml}]
indent_style = space
indent_size = 2

# Rust files
[*.rs]
indent_style = space
indent_size = 4
max_line_length = 100

# JavaScript/TypeScript files
[*.{js,ts,jsx,tsx}]
indent_style = space
indent_size = 2
max_line_length = 100
73 changes: 72 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Test Suite

on:
push:
branches: ["main", "develop"]
branches: ["main", "develop", "rust-core"]
pull_request:
branches: ["main"]

Expand Down Expand Up @@ -83,6 +83,77 @@ jobs:
- name: Lint code
run: uv run ruff check .

gherkin-lint:
name: Gherkin Lint
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "20"

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Install workspace dependencies
run: pnpm install

- name: Validate Gherkin syntax (cucumber-js dry-run)
run: |
# Exit code 2 = undefined steps (expected at skeleton stage).
# Redirect to file to avoid pipefail killing the script before we
# can inspect the exit code; cat the file for CI visibility.
node tests/features/node/node_modules/@cucumber/cucumber/bin/cucumber.js \
"tests/features/api/**/*.feature" \
"tests/features/tck/features/**/*.feature" \
--dry-run --no-strict > /tmp/gherkin-lint.log 2>&1 || EC=$?
EC=${EC:-0}
cat /tmp/gherkin-lint.log
if grep -iE "^Parse error|^SyntaxError|^Error: Parse" /tmp/gherkin-lint.log; then
echo "Gherkin parse errors found" && exit 1
fi
if [ "$EC" -ne 0 ] && [ "$EC" -ne 2 ]; then
echo "cucumber-js exited with unexpected code $EC" && exit "$EC"
fi
echo "All feature files parsed successfully"

rust-check:
name: Rust Check
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt

- name: Cache Cargo registry and build artifacts
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-

- name: cargo check
run: cargo check --workspace

- name: cargo clippy
run: cargo clippy --workspace -- -D warnings

- name: cargo fmt check
run: cargo fmt --all -- --check

type-check:
name: Type Checking (mypy)
runs-on: ubuntu-latest
Expand Down
22 changes: 22 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -183,3 +183,25 @@ tck_*.txt

# Perf baseline results (machine-specific, generated by make test-perf)
benchmarks/real_dataset_baseline_v*.json

# ==============================================================
# Rust (Cargo)
# ==============================================================
/target/
**/*.rs.bk
# Note: Cargo.lock is tracked (binary crates present)

# ==============================================================
# Node (pnpm)
# ==============================================================
node_modules/
*.node
dist/
.pnpm-store/
.pnpm-debug.log

# ==============================================================
# maturin (Rust→Python build artifacts)
# ==============================================================
*.so
*.pyd
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### In Development — v0.5.0 (Rust Core, `rust-core` branch)
- LALRPOP parser replacing Python LALR(1) executor
- DataFusion-backed execution engine with Arrow result streams
- `execute_arrow()` returning `pyarrow.Table` via Arrow C Data Interface
- `execute_stream()` returning `pyarrow.RecordBatchReader`
- Parquet storage provider (replaces SQLite in the Rust core)
- PyO3 + maturin Python binding (`gf-bindings-py`)
- napi-rs Node binding with Arrow IPC (`gf-bindings-node`)
- See [ADR 0002](../adr/0002-rust-core.md) and [roadmap](../releases/roadmap.md)

## [0.4.0] - 2026-05-07

### Added
Expand Down
Loading
Loading