Contributing to Trusted Firmware-A Tests
========================================

Getting Started
---------------

-  Make sure you have a Github account and you are logged on
   `developer.trustedfirmware.org`_.

   For any non-trivial piece of work, we advise you to create a `task`_ if one
   does not already exist. This gives everyone visibility of whether others are
   working on something similar.

   Please select the `Trusted Firmware-A Tests` tag in the task creation form.

-  Clone the repository from the Gerrit server. The project details may be found
   on the `tf-a-tests project page`_. We recommend the "`Clone with commit-msg
   hook`" clone method, which will setup the git commit hook that automatically
   generates and inserts appropriate `Change-Id:` lines in your commit messages.

-  Base you work on the latest ``master`` branch.

Making Changes
--------------

-  Make commits of logical units. See these general `Git guidelines`_ for
   contributing to a project.

-  Follow the `Linux coding style`_; this style is enforced for the TF-A Tests
   project (style errors only, not warnings).

   Use the ``checkpatch.pl`` script provided with the Linux source tree. A
   Makefile target is provided for convenience (see section `Checking source
   code style`_ in the User Guide).

-  Keep the commits on topic. If you need to fix another bug or make another
   enhancement, please address it on a separate patch series.

-  Avoid long commit series. If you do have a long series, consider whether
   some commits should be squashed together or addressed in a separate series.

-  Where appropriate, please update the documentation.

-  Ensure that each changed file has the correct copyright and license
   information.

-  Please test your changes. As a minimum, ensure that all standard tests pass
   on the Foundation FVP. See `Running the TF-A Tests`_ for more information.

Submitting Changes
------------------

-  Ensure that each commit in the series has at least one ``Signed-off-by:``
   line, using your real name and email address. If anyone else contributes to
   the commit, they must also add their own ``Signed-off-by:`` line.

   By adding this line the contributor certifies the contribution is made under
   the terms of the `Developer Certificate of Origin (DCO)`_.

   More details may be found in the `Gerrit Signed-off-by Lines guidelines`_.

-  Ensure that each commit also has a unique ``Change-Id:`` line. If you have
   cloned the repository with the "`Clone with commit-msg hook`" clone method
   (as advised in section `Getting started`_), this should already be the case.

   More details may be found in the `Gerrit Change-Ids documentation`_.

-  Submit your patches to the Gerrit review server. Please choose a Gerrit topic
   for your patch series - that is, a short tag associated with all of the
   changes in the same group, such as the local topic branch name.

   Refer to the `Gerrit documentation`_ for more details.

-  Once the patch has had sufficient peer review and has passed the checks run
   by the continuous integration system, the `maintainers`_ will merge your
   patch.

--------------

*Copyright (c) 2018, Arm Limited. All rights reserved.*

.. _maintainers: maintainers.rst
.. _license.rst: license.rst
.. _Developer Certificate of Origin (DCO): dco.txt
.. _Checking source code style: docs/user-guide.rst#checking-source-code-style
.. _Running the TF-A Tests: docs/user-guide.rst#running-the-tf-a-tests

.. _Git guidelines: http://git-scm.com/book/ch5-2.html
.. _Linux coding style: https://www.kernel.org/doc/html/latest/process/coding-style.html

.. _developer.trustedfirmware.org: https://developer.trustedfirmware.org
.. _task: https://developer.trustedfirmware.org/maniphest/query/open/
.. _tf-a-tests project page: https://review.trustedfirmware.org/#/admin/projects/tf-a-tests
.. _Gerrit documentation: https://review.trustedfirmware.org/Documentation/user-upload.html
.. _Gerrit Signed-off-by Lines guidelines: https://review.trustedfirmware.org/Documentation/user-signedoffby.html
.. _Gerrit Change-Ids documentation: https://review.trustedfirmware.org/Documentation/user-changeid.html
