How to contribute?
==================

If you are reading this, chances are you want to contribute to the Renode project, and that is already great news.

Note that you must sign a Contributor License Agreement (CLA) in order to contribute to this project.

Please read the short manual below where we provide some simple guidelines for a good cooperation experience.

Issues
------

Issues in the Renode project are tracked in the `GitHub issues system <https://github.com/antmicro/renode/issues>`_.

We also use an internal issue tracker, so it is possible that some referenced issues are not publicly available.

Please create an issue even if you plan to fix it (instead of creating a merge request directly - see below).

If you are reporting a bug, the best way to ensure it's reproducible is by using Renode's `Issue reproduction template <https://github.com/renode/renode-issue-reproduction-template>`_.
Use this repo template to create a setup that reproduces your use cases and fails a test.
This will ensure we're able to understand the bug you're experiencing and will help us react faster.

If you'd like to file a feature request, then just carefully describe what you need - the more background and precise suggestions you provide, the higher the chance that someone will be able to implement it.

If, for some reason, it's impossible to create a reproduction repo for your issue, please ensure you provide all of the following:

* the platform you are using (MacOS, Windows, Linux, what distro/version?)
* the Renode version you are using
* the exact platform you are trying to run (``.resc`` and ``.repl`` files or links to those if you are using default ones)
* preferably, the source code of your binary with build instructions - or at least a binary

We know in some cases users are not able to share the full source code of the binary they are trying to run.
In this case you may try to isolate the problem to some smaller example which is not problematic to share, or at least share a binary.

Otherwise you can of course contact us at support@renode.io and provide what is needed under NDA.

Pull requests
-------------

If you plan to fix an issue by yourself, you should use the `GitHub pull requests mechanism <https://github.com/antmicro/renode/pulls>`_.
To do that, you need to:

* create a fork of our repository on your account (if you haven't done it already);
* create a branch based on the current ``master`` branch with the following name:

  ``NUMBER_OF_TICKET-short_name_of_the_issue``, for example ``1234-invalid_instruction_wfi``;
* write and commit your code (see sections below);
* if your pull request is about to fix an issue or add a new feature, use Renode's `Issue reproduction template <https://github.com/renode/renode-issue-reproduction-template>`_ and try to prepare two branches - one that fails a test and one that includes your fix and passes the same test;
* create the pull request to our Renode repository with the proposed fix.

What happens then?

Your merge request will be reviewed by the Renode team, and potentially a discussion on GitHub will ensue.

We might ask you to do some fixes or write a test for your change, but this is only meant to keep code quality high(er).

If this is your first contribution to Renode, you will also be asked to sign our Contributor License Agreement, which you can do directly from within the Pull Request in question.

After you sign the CLA and our team performs a final review of your code, it will be merged to the Renode master branch.

Committing
----------

Guidelines
++++++++++

We recommend small commits. Note that while small commits can always be squashed together, dividing commits is not that straightforward.

For example if for the issue to be fixed you need to correct two classes without changing their public interface, do it in two separate commits.
Also if the change as a whole is big, it is easier to review it afterwards if it is divided into parts similar to the way the original author introduced the changes.
If you change some names and behaviour in the same commit, it is hard to tell which changes apply where.

If you are fixing some formatting issue, please take care to separate these changes from any logic-related commits.
You don't have to split formatting of different files into different commits, however, formatting changes are best done simultaneously for coherence.

It is vital to have all the code compiling without errors after each commit - this is useful for bisecting.

Commit messages
+++++++++++++++

Here is a proposed format of the commit message:

.. code-block::

   [#1234] optional-tag: Short description of a commit

   If you feel that the commit needs a bit more explanation than
   a short description you can put all your thoughts here (after
   a blank line).

``#1234`` is obviously the number of the GitHub issue that describes the problem you're trying to fix.
As we use an internal issue tracker, you may observe that some issue numbers (over #5000) are not pointing to any GitHub issue.

The short description is just a short sentence describing changes introduced by a commit.
If you have problems to formulate a single sentence (because the commit makes a lot of changes) than perhaps you should consider splitting it into several independent commits (as noted above).
We usually write these descriptions in a form of a sentence, in imperative mood, starting with a capitalized letter.

You can add an optional tag word before the commit message - it is especially useful if you have a series of commits related to the same topic (e.g. changes in one peripheral model).

The long description is not obligatory, but nice to have.
There is no word limit here, but we all should be reasonable.
Discussions and long analyses should be placed in the GitHub issue system.

Code formatting and quality
---------------------------

As we use Monodevelop for development, we rely on its formatting engine.
Each project and solution contains settings for the Monodevelop formatter.
If you use another editor, you may read the ``.csproj`` file and apply these rules by hand, as they are written in a readable format.

Please do not introduce formatting that is strictly inconsistent with other files.

Do not use ``regions`` to separate categories of methods/fields in your classes.
We usually try to keep the classes' API at the top, and the gory stuff below.

The rule of thumb is:

* public before protected before private;
* static before instance;
* constructor before method before property before field before constant;
* all inner types at the end.

As this list does not cover all possible options, you may be asked to fix something during review.

