Before you start work on an issue, you MUST follow the instructions in Open Contribution and Assigning tickets. You must ensure duplicate work is not being created. Do not create multiple PRs if this is your first time contributing.
Before committing any changes, you MUST follow the instructions in Before Submitting a PR and ensure the required checks listed there pass. Do not commit code that fails any of those checks.
At a minimum, you MUST run and fix any errors from these commands before committing:
# Format code cargo fmt --all # Lint (must pass with no warnings) cargo clippy --all-targets --all-features -- -D warnings
You can also run the full lint suite used by CI:
./dev/rust_lint.sh # or auto-fix: ./dev/rust_lint.sh --write --allow-dirty
When creating a PR, you MUST follow the PR template.
When adding tests, you MUST follow Choosing What Kind of Test to Write:
If documentation files changed then run
./ci/scripts/doc_prettier_check.sh --write --allow-dirty
Otherwise, run extended tests
RUST_BACKTRACE=1 cargo test --profile ci \ --exclude datafusion-examples --exclude datafusion-benchmarks --exclude datafusion-cli \ --workspace --lib --tests --bins \ --features avro,json,backtrace,extended_tests,recursive_protection,parquet_encryption
For modified code identify local benchmarks(if any) and run them against main. See Benchmarks.
Repository-specific agent skills live under .ai/skills/. Each subdirectory is a single skill with a SKILL.md (YAML frontmatter + body). Check that directory for applicable skills before working on a task; new skills go in .ai/skills/<skill-name>/SKILL.md.