Skip to content

Latest commit

 

History

History
117 lines (78 loc) · 4.44 KB

File metadata and controls

117 lines (78 loc) · 4.44 KB

Contributing to Paimon C++

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. Include as much detail as possible — steps to reproduce, expected vs. actual behavior, environment info, etc.


Commit Messages and Pull Request Titles

Use the Conventional Commits format for commit messages and pull request titles:

<type>(<optional-scope>): <description>

Examples:

feat(parquet): support page-level bitmap filtering
fix: handle non-contiguous row ranges
test(executor): add shutdown coverage
docs: update the build instructions

Choose a type and optional scope that accurately describe the change. Keep the description concise and write it in the imperative mood. A pull request title should summarize the complete change and use the same format.


Submitting Pull Requests

  1. Fork the repository and create a feature branch from main.
  2. Make your changes following the Code Style Guide.
  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.

When addressing review feedback or adding follow-up changes to an open pull request, prefer a separate commit instead of amending and force-pushing existing commits. This makes the incremental diff easier for reviewers to inspect. Rewrite existing commits only when a maintainer explicitly requests it.

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).
  • Tests are added or updated for the changed functionality.
  • PR description follows the template.

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 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:

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.