Welcome! We‘re excited that you’re interested in contributing to Apache Auron. This document provides guidelines and information to help you contribute effectively to the project.
Contributions to Auron are not limited to code! Here are various ways you can help:
Before contributing, ensure you have:
JAVA_HOME appropriately)git clone git@github.com:<your-username>/auron.git cd auron
git remote add upstream git@github.com:apache/auron.git
Keep your fork up to date with upstream:
git fetch upstream git checkout master git merge upstream/master
Auron uses Rust nightly. The project includes a rust-toolchain.toml file that specifies the required version:
rustup show # Verify the correct toolchain is installed
For the best development experience:
Auron provides a unified build script auron-build.sh that supports both local and Docker-based builds.
# Local build with Spark 3.5 and Scala 2.12 ./auron-build.sh --pre --sparkver 3.5 --scalaver 2.12 # Skip native build (useful for Java/Scala-only changes) ./auron-build.sh --pre --sparkver 3.5 --scalaver 2.12 -DskipBuildNative
# Build inside Docker container ./auron-build.sh --docker true --image centos7 --release \ --sparkver 3.5 --scalaver 2.12
Run ./auron-build.sh --help to see all available options, including:
--pre or --release: Build profile--sparkver: Spark version (3.0, 3.1, 3.2, 3.3, 3.4, 3.5)--scalaver: Scala version (2.12, 2.13)--celeborn, --uniffle, --paimon, --iceberg: Optional integrations--skiptests: Skip unit tests (default: true)--sparktests: Run Spark integration testsBy default, the build script skips unit tests (--skiptests true). To run them, you must explicitly set --skiptests false, as shown in the examples below:
# Run all tests ./auron-build.sh --pre --sparkver 3.5 --scalaver 2.12 --skiptests false # Run Spark unit tests ./auron-build.sh --pre --sparkver 3.5 --scalaver 2.12 --sparktests true
Before creating a PR, please:
Search for existing issues: Check if someone else is already working on this
Create a GitHub issue: All contributions (including major changes) require a GitHub issue to be created first. This allows the community to discuss the approach and provide feedback before you invest time in implementation.
For major changes, also create an AIP: If your change is substantial (new features, significant architectural changes, or changes affecting the public API), you must, in addition to the GitHub issue from step 2:
Example AIP: AIP-3: Introduce auron-it for Enhanced CI Integration Testing
Keep changes focused: Split large changes into multiple smaller PRs when possible
Write tests: Add unit tests for bug fixes and new features
Update documentation: Update relevant docs if your change affects user-facing behavior
Format your code: Run the code formatter (see Code Style)
Use a clear, descriptive title that follows this format:
[AURON #<issue-number>] Brief description of the change
Examples:
[AURON #1805] Add contributing guidelines[AURON #123] Fix memory leak in shuffle manager[AURON #456] Add support for new aggregate functionNote: Use the hash format [AURON #<issue-number>] consistently throughout your PR title and description.
We strongly prefer smaller, focused PRs over large ones because:
If you're working on a large feature, consider:
Auron enforces consistent code style across Java, Scala, and Rust code.
Use the dev/reformat script to format all code:
# Format all code ./dev/reformat # Check formatting without making changes ./dev/reformat --check
All source files must include the Apache License 2.0 header. The build will fail if headers are missing or incorrect.
# Run Scala tests ./build/mvn test -Pspark-3.5 -Pscala-2.12 # Run Rust tests cargo test
When adding new features or fixing bugs:
Update documentation when your changes:
The primary communication channel for the Apache Auron community:
Use GitHub Discussions for:
By contributing to Apache Auron, you agree that your contributions will be licensed under the Apache License 2.0. Thank you for contributing to Apache Auron! Your efforts help make this project better for everyone. 🚀