blob: 5aa453174c1b436bc1d08b0e8dc565a3fbe0fc4b [file] [view]
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
# Contributing to Apache Paimon-cpp
Thank you for your interest in contributing to paimon-cpp! This document explains how to get started.
---
## Reporting Issues
If you find a bug or want to request a feature, please open an [issue](https://github.com/apache/paimon-cpp/issues/new). Include as much detail as possible — steps to reproduce, expected vs. actual behavior, environment info, etc.
---
## Submitting Pull Requests
1. **Fork** the repository and create a feature branch from `main`.
2. Make your changes following the [Code Style Guide](docs/code-style.md).
3. Add or update tests for the functionality you changed.
4. Ensure all checks pass.
5. Open a pull request against `main`. Fill in the [PR template](.github/PULL_REQUEST_TEMPLATE.md).
### PR Checklist
Before submitting, please verify:
- [ ] Code compiles without warnings under `-Wall` (enabled by default in the build system).
- [ ] `pre-commit run --all-files` passes.
- [ ] New / modified public APIs are marked with `PAIMON_EXPORT`.
- [ ] Every new file has the Apache 2.0 license header.
- [ ] Error handling uses `Status` / `Result<T>` — no exceptions.
- [ ] New utility code checks for existing helpers before reinventing (see the [utility reference](docs/code-style.md#reuse-existing-utilities)).
- [ ] Tests are added or updated for the changed functionality.
- [ ] PR description follows the [template](.github/PULL_REQUEST_TEMPLATE.md).
---
## Development Setup
### Prerequisites
- **C++17** compatible compiler (GCC recommended)
- **CMake** ≥ 3.16
- **Python 3** (for linting scripts and pre-commit)
- **git-lfs** (the repository uses Git LFS for large files)
---
## Code Style
Please read the full [Code Style Guide](docs/code-style.md) before writing code. Key highlights:
- **Formatting**: Google C++ Style base, 100-column limit, 4-space indent. Let clang-format handle it.
- **Error handling**: Use `Status` / `Result<T>` and project macros (`PAIMON_RETURN_NOT_OK`, `PAIMON_ASSIGN_OR_RAISE`). No exceptions.
- **Naming**: PascalCase for classes and methods, snake_case for variables, trailing `_` for members.
- **Headers**: `#pragma once`, includes ordered by category, Apache 2.0 license header on every file.
- **Factory pattern**: Use `static Create()` + private constructor when construction can fail.
- **Testing**: Google Test, `ASSERT_*` preferred over `EXPECT_*`, test files named `*_test.cpp` next to source.
---
## Dev Containers
We provide Dev Container configuration file templates for VS Code:
```bash
cd .devcontainer
cp Dockerfile.template Dockerfile
cp devcontainer.json.template devcontainer.json
```
Then select **Dev Containers: Reopen in Container** from VS Code's Command Palette.
If you make improvements that could benefit all developers, please update the template files and submit a pull request.
---
## License
By contributing to paimon-cpp, you agree that your contributions will be licensed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0).