Contributing to VOLTHA
======================

We'd love to accept your patches and contributions to the VOLTHA project. There are
just a few small guidelines you need to follow.

Guides, Rules and Best Practices
--------------------------------

VOLTHA follows `Google's Engineering Practices <https://google.github.io/eng-practices/>`_,
`Golang Formatting Guide <https://go.dev/doc/effective_go#formatting>`_. Use these documents as a guide when
writing, submitting or reviewing code.
VOLTHA uses gerrit to submit, review, tests and finally merge patches.

Submitting Code
+++++++++++++++

Some additional points for developers:

- Submit your changes early and often.  Code and design review input
  with corrections early in the process prevent huge changes later.
- :doc:`Create a Jira ticket for code changes <contributing/jira_tickets>` (required)
- :doc:`Update copyright notices <contributing/copyright>`
- `Commit message <https://docs.voltha.org/master/howto/code/commit-message.html#pull-request-commit-message>`_ and jenkins automation.

  - To enable automation, prefix your commit message with a jira ticket

     - ``[VOL-4550]`` - Spiffy enhancement/feature/problem summary

  - This addition will allow jenkins to magically update tickets
    with processed job status.
- :doc:`Request a code review <contributing/code_review>`

Steps to successful PRs
+++++++++++++++++++++++

 1. Checkout the code base and prepare your patch.
 2. Workflow to modify VOLTHA code through gerrit is identical to `onos-classic`
    and is described in `Sample Gerrit Workflow page <https://wiki.onosproject.org/display/ONOS/Sample+Gerrit+Workflow>`_
 3. Before submitting your patch via `git review` please pre-screen your changes to ensure code quality.

 .. list-table:: Patch Pre-Screening
    :widths: 10, 40

    * - Command
      - Description
    * - `make lint <https://docs.voltha.org/master/howto/code/linting.html>`_
      - Syntax check source for problems (lint, lint-shelcheck, lint-doc8)
    * - make sca
      - Static Code Analysis
    * - make build
      - Assemble, compile, generate, link, ...
    * - make test
      - Invoke VOLTHA test suite(s)
    * - make help
      - Show available targets: make help | grep lint

 4. :ref:`Commit message syntax and testing directives <pull-request--commit-message>`

 5. Submitting your patch will initiate a validation
    `jenkins job <https://jenkins.lfbroadband.org>`_.
    Wait for job completion status before proceeding.

    - Job status will be sent to you asynchronously in email at job completion.
    - For direct monitoring :doc:`review gerrit Change Log<contributing/patch_followup>` for your patch.

    - If testing fails please fix your patch with step 3 then repeat 2 and 3 as needed.

    **Passing CI verification is mandatory.**

    To view accumulated job status:

      - `navigate to a patch <https://gerrit.lfbroadband.org/c/ci-management/+/34599>`_
      - View "Submit requirements" in the top left.
      - Verified ``+1 Jenkins Technical User`` will indicate SUCCESS.
      - Verified ``-1 Jenkins Technical User`` will indicate FAILURE.

    If the CI check does not start or fails and you believe the issue is
    un-related to a changeset you can re-trigger by commenting on the
    patch with `recheck <https://docs.voltha.org/master/howto/code/pull_request.html#development-and-code-reviews>`_

    If failures persist `ask for assistance <https://lf-broadband.atlassian.net/wiki>`_ in slack or a mailing list.

 6. When patch comments are offered please make the appropriate fixes and then
    amend your commit with `git commit --amend` and re-upload to gerrit with `git review`.

 7. Await review. Everyone can comment on code changes, but only Core contributors
    can give final review approval.

    **All changes must acquire +2 Approval**.

    Join one of the `communication channels <https://lf-broadband.atlassian.net/wiki>`_
    to request a review or to bring additional attention to your patch.

  8. A patch will be ready to submit a merge request when

     - "Submit requirements" in the top left is showing:

       - Code-Review: +2 approval (or 2 x +1 approval)
       - Verified ``+1 Jenkins Technical User``

Versioning
++++++++++

All of the VOLTHA components and the charts include a VERSION file that specifies
the version of the service, library, protobuf, test suite included in the repository.

- The `VERSION <https://gerrit.lfbroadband.org/plugins/gitiles/voltha-go/+/refs/heads/master/VERSION>`_ file can be found in a repository root directory.
- One exception: maven based builds using pom.xml files.

The VERSION is in the format and follows the `SemVer principles <https://semver.org>`_
VOLTHA also follows the guidelines on how to increment versions as described in the
`SemVer specification <https://semver.org/#semantic-versioning-specification-semver>`_.

Each increment of the VERSION file in a patch automatically triggers publishing of the repository
artifact, e.g. docker images, with that tag.
In VOLTHA we also use a `x.y.z-dev` format which identifies a non-released component (what is `master`).
When a patch is merged with the `-dev` suffix in the VERSION file no artifact is published except for `master`
docker images. The `-dev` suffix should be removed when a feature being worked on and the component
is ready for release.

We expect contributions to the VOLTHA codebase to follow these rules when submitting a patch
and the same rules to be enforced by reviewers during the core review process.


Core Contributors
-----------------

Anyone with a Gerrit account can open new issues, comment on existing issues, or
contribute code by opening a review.

A **“core contributor”** is someone who can manage, approve and
merge patches, and create new branches in the main repository.

Core contributors are responsible for maintaining the quality of contributions
to the codebase. The goal of this program is to have a diverse group of
individuals whose expertise in aggregate covers the entire project.

The benefits of being a core contributor include:
 - Increased influence of the direction of the project
 - The ability to create branches in the main repository and after others approve it
   merge your own code
 - Community recognition and visibility for their contributions and expertise.

Becoming a Core Contributor
+++++++++++++++++++++++++++

Core contributor candidates need to have a demonstrated proficiency with the
VOLTHA codebase and a track record of code reviews.  Members of the Technical
Steering Team (TST) and existing core contributors will regularly invite people
to become new core contributors. Nominations can also be made (including
self-nominations) to the VOLTHA TST (`voltha-tst@lists.voltha.org`) at any time.

A good nomination will include details about who the person is (including their email
and Github and/or Gerrit username) and outline their experience with the VOLTHA codebase
and project at large.
Nominations are intended to start a conversation that results in a decision to
make the person a core contributor – anyone whose nomination is not initially
approved is encouraged to gain more experience with code submission and code
review in order to gain further mastery over the codebase. Partial approval is
also possible (e.g. a person may be granted the ability to handles patches only
on a certain repository), and full approval may be granted after the contributor
has gained more experience.

New core contributors will be assigned a mentor that is either a TST member or
existing core contributor. The mentor will serve as the primary point of contact
to help onboard the new core contributors and answer any questions they have
with their new responsibilities. The mentor is not the only point of contact,
and core contributors should feel free to reach out to others if and when they
have questions or concerns.

Guidelines for Core Contributors
++++++++++++++++++++++++++++++++

Contributions in VOLTHA can should be merged after two different +1 arrive on a
given patch-set that is verified by CI as well.
For your own contributions, you now have the ability to approve and merge your
own code, pending that you received two other positive reviews.
For larger or potentially controversial reviews, please give the
community an opportunity (at least a few business days) to review your
contribution. Please always ask for comments on the #voltha-dev Slack channel.
**With great power comes great responsibility; please don't abuse
this privilege.**

All Core Contributors have +2 and merge capabilities on all the repositories related
to the VOLTHA project, but we expect that they are responsible and exercise their
privilege **only** on patches and repositories they have expertise in and are comfortable reviewing and merging.

To help patchset verification the VOLTHA test infrastructure offers Per-Patchset Verification Jobs
triggered by specific keyword used in the patch. More information can be found in the
`testing automation page <https://docs.voltha.org/master/testing/voltha_test_automation.html#per-patchset-verification-jobs>`_
We suggest Core contributors to use these triggers when they would like more checks on a patch they are uncertain about
or that might have differences when applied to hardware pods.

VOLTHA follows `Google’s best practices for code review <https://google.github.io/eng-practices/review/reviewer/>`_.
You should apply these guidelines strictly and with confidence when reviewing
submissions.

If you are unsure about something in an issue or a review, leave a comment
that outlines your concerns. If a resolution is difficult to reach in the
comments section, the TST meetings are a good place to raise your concerns and
have a discussion.

Community Guidelines
--------------------

This project follows `Google's Open Source Community Guidelines <https://opensource.google/conduct/>`_

and LF BB's `Code of Conduct <https://www.linuxfoundation.org/code-of-conduct>`_.
