- Clone the repository :)
- Create a branch with a short and self explanatory name in your clone.
- Checkout your new branch and add commits with detailed and descriptive commit logs.
- When your are ready, first make sure that you're in sync with the upstream repository. Then create a pull (merge) request from the repository page.
- Follow up with the automated and manual code review process to merge your request in the master.
If the master is updated after you have crated your pull-request, please rebase your branch with all the latest commits on top of master before submitting your pull-request again.
- Organize your codes in appropriate packages.
- Document your code thoroughly.
- Write lots and lots of tests.
- Test everything before creating the pull request.
- Pull changes from master before submitting your pull request.
- As a rule of thumb, always do a
rebase
unless someone else is simultaneously working on your branch.
- Create branch based on the latest version of
master
with an appropriate name. - Develop!
- When you think the branch is ready for a pull request, please rebase your branch with the latest
master
. - Create a pull request with appropriate title and description.
- When a pull request resolves one specific issue, mention it using the famous
Resolves {task_id}
format.
- Document everything!
- Learn how to write a good javadoc:
- Learn how to write good Kotlin documentations.
- Suppose you're gonna write a test for class
com.example.Foo
, then your unit test should be namedcom.example.FooTest
and your integration test should be namedcom.example.FooIT
. Basically, test should be organized in the same package as Subject Under Test and haveTest
andIT
suffixes for unit and integration tests, respectively. - Checkout JUnit 5's documentation
- Learn how to write integration tests for Spring:
- Checkout XUnit Test Patterns
Kotlin Coroutines are Kotlin lightweight threads allowing to write non-blocking code in an imperative way. On language side, suspending functions provides an abstraction for asynchronous operations while on library side kotlinx.coroutines provides functions like async { } and types like Flow. Read the official doc for more detailed information.