# How to Contribute to OpenIM (Submitting Pull Requests)

English · 中文 · Українська · Česky · Magyar · Español · فارسی · Français · Deutsch · Polski · Indonesian · Suomi · മലയാളം · 日本語 · Nederlands · Italiano · Русский · Português (Brasil) · Esperanto · 한국어 · العربي · Tiếng Việt · Dansk · Ελληνικά · Türkçe

This guide will use [openimsdk/open-im-server](https://github.com/openimsdk/open-im-server) as an example to explain in detail how to contribute code to the OpenIM project. We adopt a "one issue, one branch" strategy to ensure each issue corresponds to a dedicated branch for effective code change management. ### 1. Fork the Repository Go to the [openimsdk/open-im-server](https://github.com/openimsdk/open-im-server) GitHub page, click the "Fork" button in the upper right corner to fork the repository to your GitHub account. ### 2. Clone the Repository Clone the repository you forked to your local machine: ```bash git clone https://github.com/your-username/open-im-server.git ``` ### 3. Set Upstream Remote Add the original repository as a remote upstream to track updates: ```bash git remote add upstream https://github.com/openimsdk/open-im-server.git ``` ### 4. Create an Issue Create a new issue in the original repository detailing the problem you encountered or the new feature you wish to add. ### 5. Create a New Branch Create a new branch off the main branch with a descriptive name and Issue ID, for example: ```bash git checkout -b fix-bug-123 ``` ### 6. Commit Changes After making changes on your local branch, commit these changes: ```bash git add . git commit -m "Describe your changes in detail" ``` ### 7. Push the Branch Push your branch back to your GitHub fork: ```bash git push origin fix-bug-123 ``` ### 8. Create a Pull Request Go to your fork on GitHub and click the "Pull Request" button. Ensure the PR description is clear and links to the related issue. ### 9. Sign the CLA If this is your first time submitting a PR, you will need to reply in the comments of the PR: ``` I have read the CLA Document and I hereby sign the CLA ``` ### Programming Standards Please refer to the following documents for detailed information on Go language programming standards: - [Go Coding Standards](https://github.com/openimsdk/open-im-server/blob/main/docs/contrib/go-code.md) - [Code Conventions](https://github.com/openimsdk/open-im-server/blob/main/docs/contrib/code-conventions.md) ### Logging Standards - **Do not use the standard `log` package**. - Use the `"github.com/openimsdk/tools/log"` package for logging, which supports multiple log levels: `debug`, `info`, `warn`, `error`. - **Error logs should only be printed in the function where they are first actively called** to prevent log duplication and ensure clear error context. ### Exception and Error Handling - **Prohibit the use of `panic`**: The code should not use `panic` to avoid abrupt termination when encountering unrecoverable errors. - **Error Wrapping**: Use `"github.com/openimsdk/tools/errs"` to wrap errors, maintaining the integrity of error information and facilitating debugging. - **Error Propagation**: If a function cannot handle an error itself, it should return the error to the caller, rather than hiding or ignoring it.