Welcome to the Apache Hudi community! We appreciate your interest in contributing to this open-source data lake platform. This guide will walk you through the process of making your first contribution.
If you are new to the project, we recommend starting with issues listed in https://github.com/apache/hudi-rs/contribute.
Testing and reporting bugs are also valueable contributions. Please follow the issue template to file bug reports.
All issues tagged for a release can be found in the corresponding milestone page, see https://github.com/apache/hudi-rs/milestones.
Features, bugs, and p0 issues that are targeting the next release can be found in this project view. Pull requests won't be tracked in the project view, instead, they will be linked to the corresponding issues.
python/pyproject.toml for current requirement)This project provides pre-commit hooks to catch issues locally before they reach CI. After setting up the virtual environment:
make setup-pre-commit
The hooks are split into two stages for a fast development cycle:
On every commit (~5 seconds):
cargo fmt (same as make format-rust)ruff format (same as make format-python)On every push (thorough, ~1-5 minutes):
cargo clippy and format verification (same as make check-rust)ruff linting and mypy type checking (same as make check-python)These are the same checks that run in CI. To skip hooks temporarily: git commit --no-verify or git push --no-verify.
For most of the time, use dev commands specified in the Makefile.
[!NOTE] This project uses uv as the Python package manager for faster dependency resolution and installation. All Python-related commands in the Makefile have been configured to use uv.
To setup python virtual env, run
make setup-venv
[!NOTE] This will use uv to set up the virtual environment in
.venv/. Activate the virtual environment by runningsource .venv/bin/activatefor example.
Once a virtual environment is activated, build the project for development by
make develop
This will install hudi dependency built from your local repo to the virtual env.
For Rust,
# For all tests make test-rust # or cargo test --workspace # For all tests in a crate / package cargo test -p hudi-core # For a specific test case cargo test -p hudi-core table::tests::hudi_table_get_schema
For Python,
# For all tests make test-python # or pytest -s python/tests # For a specific test case pytest python/tests/test_table_read.py -s -k "test_read_table_has_correct_schema"
Run the below command and fix issues if any:
make format check test
When submitting a pull request, please follow these guidelines:
main branch requires this format, and we always squash commits and then merge the PR, incremental commits' messages do not need to conform to it.We use codecov to generate code coverage report and enforce code coverage rate. See codecov.yml for the configuration.
To help with contributing to the project, please explore Hudi's documentation for further learning.
We expect all community members to follow our Code of Conduct.