Community contributions to libdatadog are welcome 😃! See below for some basic guidelines.
Many great ideas for new features come from the community, and we'd be happy to consider yours!
To share your request, you can open a Github issue with the details about what you'd like to see. At a minimum, please provide:
- The goal of the new feature
- A description of how it might be used or behave
- Links to any important resources (e.g. GitHub repos, websites, screenshots, specifications, diagrams)
Additionally, if you can, include:
- A description of how it could be accomplished
- Code snippets that might demonstrate its use or implementation
- Screenshots or mockups that visually demonstrate the feature
- Links to similar features that would serve as a good comparison
- (Any other details that would be useful for implementing this feature!)
For any urgent matters (such as outages) or issues concerning the Datadog service or UI, contact our support team via https://docs.datadoghq.com/help/ for direct, faster assistance.
You can submit bug reports concerning libdatadog by
opening a Github issue. At a minimum, please provide:
- A description of the problem
- Steps to reproduce
- Expected behavior
- Actual behavior
- Errors or warnings received
- Any details you can share about your configuration
If at all possible, also provide:
- Logs (from the library/profiler/application/agent) or other diagnostics
- Screenshots, links, or other visual aids that are publicly accessible
- Code sample or test that reproduces the problem
- An explanation of what causes the bug and/or how it can be fixed
Reports that include rich detail are better, and ones with code that reproduce the bug are best.
We welcome code contributions to the library, which you can submit as a pull request. To create a pull request:
- Fork the repository from https://github.com/datadog/libdatadog
- Make any changes for your patch
- Write tests that demonstrate how the feature works or how the bug is fixed
- Update any documentation especially for new features.
- Submit the pull request from your fork back to the latest revision of the
mainbranch on https://github.com/datadog/libdatadog
The pull request will be run through our CI pipeline, and a project member will review the changes with you. At a minimum, to be accepted and merged, pull requests must:
- Have a stated goal and detailed description of the changes made
- Include thorough test coverage and documentation, where applicable
- Pass all tests and code quality checks (linting/coverage/benchmarks) on CI
- Receive at least one approval from a project member with push permissions
We also recommend that you share in your description:
- Any motivations or intent for the contribution
- Links to any issues/pull requests it might be related to
- Links to any webpages or other external resources that might be related to the change
- Screenshots, code samples, or other visual aids that demonstrate the changes or how they are implemented
- Benchmarks if the feature is anticipated to have performance implications
- Any limitations, constraints or risks that are important to consider
If at any point you have a question or need assistance with your pull request, feel free to mention a project member! We're always happy to help contributors with their pull requests.
All Rust code must be formatted with rustfmt using the project's configuration in rustfmt.toml. You can format your
code locally by running:
cargo +nightly fmt --allIf you'd like CI to automatically format your code and commit the changes to your PR, add the commit-rustfmt-changes
label to your pull request. This will trigger an automatic formatting commit if any changes are needed.
This project uses Conventional Commits for commit messages and pull request titles. This format helps us automatically generate changelogs and determine semantic versioning.
Commit messages and PR titles should follow this structure:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
- feat: Code that adds features to the end user
- fix: A bug fix
- docs: Documentation changes only
- style: Code style changes (formatting, missing semicolons, etc.) that don't affect functionality
- refactor: Code changes that neither fix a bug nor add a feature. Removing a public interface is considered a refactor and should be marked with
!. - perf: Performance improvements
- test: Adding or updating tests
- build: Changes to the build system or external dependencies
- ci: Changes to CI configuration files and scripts
- chore: Other changes that don't modify src or test files
The scope provides additional context about which part of the codebase is affected:
feat(crashtracker): add signal handler for SIGSEGV
fix(profiling): correct memory leak in stack unwinding
docs(readme): update installation instructions
Breaking changes should be indicated by a ! after the type/scope:
feat!: remove deprecated API endpoint
Good commit messages:
feat: add support for custom metadata tagsfix(profiling): resolve deadlock in thread samplingdocs: add examples for exception trackingchore: update dependencies to latest versionstest(crashtracker): add integration tests for signal handling
Poor commit messages:
update code(not descriptive, missing type)Fixed bug(missing type format, not descriptive)WIP(not meaningful)
When your pull request is merged, all commits will be squashed into a single commit. The PR title will become the final commit message, so it's important that it accurately describes your changes.For that reason your pull request title must follow the conventional commit format described above. Our CI pipeline will automatically validate the PR title and fail if it doesn't comply with the format. You can update the PR title at any time to fix any validation issues.
Many thanks to all of our contributors, and looking forward to seeing you on Github! 🎉