First, thank you for contributing to Iceberg Rust! The goal of this document is to provide everything you need to start contributing to iceberg-rust. The following TOC is sorted progressively, starting with the basics and expanding into more specifics.
- Fork the iceberg-rust repository into your own GitHub account.
- Create a new Git branch.
- Make your changes.
- Submit the branch as a pull request to the main iceberg-rust repo. An iceberg-rust team member should comment and/or review your pull request within a few days. Although, depending on the circumstances, it may take longer.
All changes must be made in a branch and submitted as pull requests. iceberg-rust does not adopt any type of branch naming style, but please use something descriptive of your changes.
Once your changes are ready you must submit your branch as a pull request.
The pull request title must follow the format outlined in the conventional commits spec. Conventional commits is a standardized format for commit messages. iceberg-rust only requires this format for commits on the main
branch. And because iceberg-rust squashes commits before merging branches, this means that only the pull request title must conform to this format.
The following are all good examples of pull request titles:
feat(schema): Add last_updated_ms in schema
docs: add hdfs classpath related troubleshoot
ci: Mark job as skipped if owner is not apache
fix(schema): Ignore prefix if it's empty
refactor: Polish the implementation of read parquet
All pull requests should be reviewed by at least one iceberg-rust committer.
All pull requests are squash merged. We generally discourage large pull requests that are over 300-500 lines of diff. If you would like to propose a change that is larger we suggest coming onto Iceberg's DEV mailing list or Slack #rust Channel and discuss it with us. This way we can talk through the solution and discuss if a change that large is even needed! This will produce a quicker response to the change and likely produce code that aligns better with our process.
Currently, iceberg-rust uses GitHub Actions to run tests. The workflows are defined in .github/workflows
.
For small or first-time contributions, we recommend the dev container method. Prefer to do it yourself? That's fine too!
iceberg-rust provides a pre-configured dev container that could be used in Github Codespaces, VSCode, JetBrains, JuptyerLab. Please pick up your favourite runtime environment.
The fastest way is:
iceberg-rust is primarily a Rust project. To build iceberg-rust, you will need to set up Rust development first. We highly recommend using rustup for the setup process.
For Linux or MacOS, use the following command:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
For Windows, download rustup-init.exe
from here instead.
Rustup will read iceberg-rust's rust-toolchain.toml
and set up everything else automatically. To ensure that everything works correctly, run cargo version
under iceberg-rust's root directory:
$ cargo version
cargo 1.69.0 (6e9a83356 2023-04-12)
Currently, iceberg-rust uses docker to set up environment for integration tests.
You can learn how to install docker from here.
For macos users, you can install OrbStack as a docker alternative.
- To compile the project:
make build
- To check code styles:
make check
- To run unit tests only:
make unit-test
- To run all tests:
make test
We expect all community members to follow our Code of Conduct.