CMake Review Process
********************

The following documents the process for reviewing and integrating changes.
See `CONTRIBUTING.rst`_ for instructions to contribute changes.
See documentation on `CMake Development`_ for more information.

.. _`CONTRIBUTING.rst`: ../../CONTRIBUTING.rst
.. _`CMake Development`: README.rst

.. contents:: The review process consists of the following steps:

Merge Request
=============

A user initiates the review process for a change by pushing a *topic
branch* to his or her own fork of the `CMake Repository`_ on GitLab and
creating a *merge request* ("MR").  The new MR will appear on the
`CMake Merge Requests Page`_.  The rest of the review and integration
process is managed by the merge request page for the change.

During the review process, the MR submitter should address review comments
or test failures by updating their local topic branch to fix their commits
(e.g. via ``git commit --amend`` or ``git rebase -i``), and then issuing a
(force-)push of the topic branch to their remote (e.g. ``git push --force``).
This will automatically initiate a new round of review on the existing MR.

We recommend that users enable the "Remove source branch when merge
request is accepted" option when creating the MR or by editing it.
This will cause the MR topic branch to be automatically removed from
the user's fork during the `Merge`_ step.

.. _`CMake Merge Requests Page`: https://gitlab.kitware.com/cmake/cmake/-/merge_requests
.. _`CMake Repository`: https://gitlab.kitware.com/cmake/cmake

Workflow Status
---------------

`CMake GitLab Project Developers`_ may set one of the following labels
in GitLab to track the state of a MR:

* ``workflow:wip`` indicates that the MR needs additional updates from
  the MR submitter before further review.  Use this label after making
  comments that require such updates.

* ``workflow:in-review`` indicates that the MR awaits feedback from a
  human reviewer or from `Topic Testing`_.  Use this label after making
  comments requesting such feedback.

* ``workflow:nightly-testing`` indicates that the MR awaits results
  of `Integration Testing`_.  Use this label after making comments
  requesting such staging.

* ``workflow:expired`` indicates that the MR has been closed due
  to a period of inactivity.  See the `Expire`_ step.  Use this label
  after closing a MR for this reason.

* ``workflow:external-discussion`` indicates that the MR has been closed
  pending discussion elsewhere.  See the `External Discussion`_ step.
  Use this label after closing a MR for this reason.

The workflow status labels are intended to be mutually exclusive,
so please remove any existing workflow label when adding one.

.. _`CMake GitLab Project Developers`: https://gitlab.kitware.com/cmake/cmake/-/settings/members

Robot Review
============

The "Kitware Robot" (``@kwrobot``) automatically performs basic checks on
the commits proposed in a MR.  If all is well the robot silently reports
a successful "build" status to GitLab.  Otherwise the robot posts a comment
with its diagnostics.  **A topic may not be merged until the automatic
review succeeds.**

Note that the MR submitter is expected to address the robot's comments by
*rewriting* the commits named by the robot's diagnostics (e.g., via
``git rebase -i``). This is because the robot checks each commit individually,
not the topic as a whole. This is done in order to ensure that commits in the
middle of a topic do not, for example, add a giant file which is then later
removed in the topic.

Automatic Check
---------------

The automatic check is repeated whenever the topic branch is updated.
One may explicitly request a re-check by adding a comment with the
following command among the `comment trailing lines`_::

  Do: check

``@kwrobot`` will add an award emoji to the comment to indicate that it
was processed and also run its checks again.

Automatic Format
----------------

The automatic check will reject commits introducing source code not
formatted according to ``clang-format``.  One may ask the robot to
automatically rewrite the MR topic branch with expected formatting
by adding a comment with the following command among the
`comment trailing lines`_::

  Do: reformat

``@kwrobot`` will add an award emoji to the comment to indicate that it
was processed and also rewrite the MR topic branch and force-push an
updated version with every commit formatted as expected by the check.

Human Review
============

Anyone is welcome to review merge requests and make comments!

Please make comments directly on the MR page Discussion and Changes tabs
and not on individual commits.  Comments on a commit may disappear
from the MR page if the commit is rewritten in response.

Reviewers may add comments providing feedback or to acknowledge their
approval.  Lines of specific forms will be extracted during the `merge`_
step and included as trailing lines of the generated merge commit message.
Each review comment consists of up to two parts which must be specified
in the following order: `comment body`_, then `comment trailing lines`_.
Each part is optional, but they must be specified in this order.

Comment Body
------------

The body of a comment may be free-form `GitLab Flavored Markdown`_.
See GitLab documentation on `Special GitLab References`_ to add links to
things like issues, commits, or other merge requests (even across projects).

Additionally, a line in the comment body may start with one of the
following votes:

* ``-1`` or ``:-1:`` indicates "the change is not ready for integration".

* ``+1`` or ``:+1:`` indicates "I like the change".
  This adds an ``Acked-by:`` trailer to the `merge`_ commit message.

* ``+2`` indicates "the change is ready for integration".
  This adds a ``Reviewed-by:`` trailer to the `merge`_ commit message.

* ``+3`` indicates "I have tested the change and verified it works".
  This adds a ``Tested-by:`` trailer to the `merge`_ commit message.

.. _`GitLab Flavored Markdown`: https://gitlab.kitware.com/help/user/markdown.md
.. _`Special GitLab References`: https://gitlab.kitware.com/help/user/markdown.md#special-gitlab-references

Comment Trailing Lines
----------------------

Zero or more *trailing* lines in the last section of a comment may appear
with the form ``Key: Value``.  The first such line should be separated
from a preceding `comment body`_ by a blank line.  Any key-value pair(s)
may be specified for human reference.  A few specific keys have meaning to
``@kwrobot`` as follows.

Comment Trailer Votes
^^^^^^^^^^^^^^^^^^^^^

Among the `comment trailing lines`_ one may cast a vote using one of the
following pairs followed by nothing but whitespace before the end of the line:

* ``Rejected-by: me`` indicates "the change is not ready for integration".
* ``Acked-by: me`` indicates "I like the change".
  This adds an ``Acked-by:`` trailer to the `merge`_ commit message.
* ``Reviewed-by: me`` indicates "the change is ready for integration".
  This adds a ``Reviewed-by:`` trailer to the `merge`_ commit message.
* ``Tested-by: me`` indicates "I have tested the change and verified it works".
  This adds a ``Tested-by:`` trailer to the `merge`_ commit message.

Each ``me`` reference may instead be an ``@username`` reference or a full
``Real Name <user@domain>`` reference to credit someone else for performing
the review.  References to ``me`` and ``@username`` will automatically be
transformed into a real name and email address according to the user's
GitLab account profile.

Comment Trailer Commands
^^^^^^^^^^^^^^^^^^^^^^^^

Among the `comment trailing lines`_ authorized users may issue special
commands to ``@kwrobot`` using the form ``Do: ...``:

* ``Do: check`` explicitly re-runs the robot `Automatic Check`_.
* ``Do: reformat`` rewrites the MR topic for `Automatic Format`_.
* ``Do: test`` submits the MR for `Topic Testing`_.
* ``Do: stage`` submits the MR for `Integration Testing`_.
* ``Do: merge`` submits the MR for `Merge`_.

See the corresponding sections for details on permissions and options
for each command.

Commit Messages
---------------

Part of the human review is to check that each commit message is appropriate.
The first line of the message should begin with one or two words indicating the
area the commit applies to, followed by a colon and then a brief summary.
Committers should aim to keep this first line short. Any subsequent lines
should be separated from the first by a blank line and provide relevant, useful
information.

Area Prefix on Commit Messages
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The appropriateness of the initial word describing the area the commit applies
to is not something the automatic robot review can judge, so it is up to the
human reviewer to confirm that the area is specified and that it is
appropriate. Good area words include the module name the commit is primarily
fixing, the main C++ source file being edited, ``Help`` for generic
documentation changes or a feature or functionality theme the changes apply to
(e.g. ``server`` or ``Autogen``). Examples of suitable first lines of a commit
message include:

* ``Help: Fix example in cmake-buildsystem(7) manual``
* ``FindBoost: Add support for 1.64``
* ``Autogen: Extended mocInclude tests``
* ``cmLocalGenerator: Explain standard flag selection logic in comments``

Referencing Issues in Commit Messages
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

If the commit fixes a particular reported issue, this information should
ideally also be part of the commit message. The recommended way to do this is
to place a line at the end of the message in the form ``Fixes: #xxxxx`` where
``xxxxx`` is the GitLab issue number and to separate it from the rest of the
text by a blank line. For example::

  Help: Fix FooBar example robustness issue

  FooBar supports option X, but the example provided
  would not work if Y was also specified.

  Fixes: #12345

GitLab will automatically create relevant links to the merge request and will
close the issue when the commit is merged into master. GitLab understands a few
other synonyms for ``Fixes`` and allows much more flexible forms than the
above, but committers should aim for this format for consistency. Note that
such details can alternatively be specified in the merge request description.

Referencing Commits in Commit Messages
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The preferred form for references to other commits is
``commit <shorthash> (<subject>, <date>)``, where:

* ``<shorthash>``:
  The abbreviated hash of the commit.

* ``<subject>``:
  The first line of the commit message.

* ``<date>``:
  The author date of the commit, in its original time zone, formatted as
  ``CCYY-MM-DD``.  ``git-log(1)`` shows the original time zone by default.

This may be generated with ``git show -s --pretty=reference <commit>`` with
Git 2.25 and newer. Older versions of Git can generate the same format via
``git show -s --date=short --pretty="format:%h (%s, %ad)" <commit>``.

If the commit is a fix for the mentioned commit, consider using a ``Fixes:``
trailer in the commit message with the specified format. This trailer should
not be word-wrapped. Note that if there is also an issue for what is being
fixed, it is preferable to link to the issue instead.

If relevant, add the first release tag of CMake containing the commit after
the ``<date>``, i.e., ``commit <shorthash> (<subject>, <date>, <tag>)``.
Or, use the output of ``git describe --contains <commit>`` as the ``<tag>``.

Alternatively, the full commit ``<hash>`` may be used.

Revising Commit Messages
^^^^^^^^^^^^^^^^^^^^^^^^

Reviewers are encouraged to ask the committer to amend commit messages to
follow these guidelines, but prefer to focus on the changes themselves as a
first priority. Maintainers will also make a check of commit messages before
merging.

Topic Testing
=============

CMake uses `GitLab CI`_ to test merge requests, configured by the top-level
``.gitlab-ci.yml`` file.  Results may be seen both on the merge request's
pipeline page and on the `CMake CDash Page`_.  Filtered CDash results
showing just the pipeline's jobs can be reached by selecting the ``cdash``
job in the ``External`` stage of the pipeline.

Lint and documentation build jobs run automatically after every push.
Heavier jobs require a manual trigger to run:

* Merge request authors may visit their merge request's pipeline and click the
  "Play" button on one or more jobs manually.  If the merge request has the
  "Allow commits from members who can merge to the target branch" check box
  enabled, CMake maintainers may use the "Play" button too.

* `CMake GitLab Project Developers`_ may trigger CI on a merge request by
  adding a comment with a command among the `comment trailing lines`_::

    Do: test

  ``@kwrobot`` will add an award emoji to the comment to indicate that it
  was processed and also trigger all manual jobs in the merge request's
  pipeline.

  The ``Do: test`` command accepts the following arguments:

  * ``--named <regex>``, ``-n <regex>``: Trigger jobs matching ``<regex>``
    anywhere in their name.  Job names may be seen on the merge request's
    pipeline page.
  * ``--stage <stage>``, ``-s <stage>``: Only affect jobs in a given stage.
    Stage names may be seen on the merge request's pipeline page.  Note that
    the names are determined by what is in the ``.gitlab-ci.yml`` file and may
    be capitalized in the web page, so lowercasing the webpage's display name
    for stages may be required.
  * ``--action <action>``, ``-a <action>``: The action to perform on the jobs.
    Possible actions:

    * ``manual`` (the default): Start jobs awaiting manual interaction.
    * ``unsuccessful``: Start or restart jobs which have not completed
      successfully.
    * ``failed``: Restart jobs which have completed, but without success.
    * ``completed``: Restart all completed jobs.


In order to keep job names shorter and keep as much information visible on the
GitLab web interface as possible, jobs have a short prefix which indicates
what its main purpose is:

  * ``b:`` jobs build CMake for the purposes of running the
    test suite.
  * ``l:`` jobs perform "linting" on the CMake source tree such as static
    analysis.
  * ``p:`` jobs perform preparatory tasks for use in other jobs.
  * ``t:`` jobs perform testing of CMake.
  * ``u:`` jobs upload other job results to permanent locations.

If the merge request topic branch is updated by a push, a new manual trigger
using one of the above methods is needed to start CI again.

.. _`GitLab CI`: https://gitlab.kitware.com/help/ci/README.md
.. _`CMake CDash Page`: https://open.cdash.org/index.php?project=CMake

Integration Testing
===================

The above `topic testing`_ tests the MR topic independent of other
merge requests and on only a few key platforms and configurations.
`CMake Integration Testing`_ also uses a large number of machines
provided by Kitware and generous volunteers that cover nearly all
supported platforms, generators, and configurations.  In order to
avoid overwhelming these resources, they do not test every MR
individually.  Instead, these machines follow an *integration branch*,
run tests on a nightly basis (or continuously during the day), and
post to the `CMake CDash Page`_.  Some follow ``master``.  Most follow
a special integration branch, the *topic stage*.

The topic stage is a special branch maintained by the "Kitware Robot"
(``@kwrobot``).  It consists of the head of the MR target integration
branch (e.g. ``master``) branch followed by a sequence of merges each
integrating changes from an open MR that has been staged for integration
testing.  Each time the target integration branch is updated the stage
is rebuilt automatically by merging the staged MR topics again.
The branch is stored in the upstream repository by special refs:

* ``refs/stage/master/head``: The current topic stage branch.
  This is used by continuous builds that report to CDash.
* ``refs/stage/master/nightly/latest``: Topic stage as of 1am UTC each night.
  This is used by most nightly builds that report to CDash.
* ``refs/stage/master/nightly/<yyyy>/<mm>/<dd>``: Topic stage as of 1am UTC
  on the date specified. This is used for historical reference.

`CMake GitLab Project Developers`_ may stage a MR for integration testing
by adding a comment with a command among the `comment trailing lines`_::

  Do: stage

``@kwrobot`` will add an award emoji to the comment to indicate that it
was processed and also attempt to add the MR topic branch to the topic
stage.  If the MR cannot be added (e.g. due to conflicts) the robot will
post a comment explaining what went wrong.

Once a MR has been added to the topic stage it will remain on the stage
until one of the following occurs:

* The MR topic branch is updated by a push.

* The MR target integration branch (e.g. ``master``) branch is updated
  and the MR cannot be merged into the topic stage again due to conflicts.

* A developer or the submitter posts an explicit ``Do: unstage`` command.
  This is useful to remove a MR from the topic stage when one is not ready
  to push an update to the MR topic branch.  It is unnecessary to explicitly
  unstage just before or after pushing an update because the push will cause
  the MR to be unstaged automatically.

* The MR is closed.

* The MR is merged.

Once a MR has been removed from the topic stage a new ``Do: stage``
command is needed to stage it again.

.. _`CMake Integration Testing`: integration-testing.rst

Resolve
=======

The workflow used by the CMake project supports a number of different
ways in which a MR can be moved to a resolved state.  In addition to
the conventional practices of merging or closing a MR without merging it,
a MR can also be moved to a quasi-resolved state pending some action.
This may involve moving discussion to an issue or it may be the result of
an extended period of inactivity.  These quasi-resolved states are used
to help manage the relatively large number of MRs the project receives
and are not an indication of the changes being rejected.  The following
sections explain the different resolutions a MR may be given.

Merge
-----

Once review has concluded that the MR topic is ready for integration,
`CMake GitLab Project Masters`_ may merge the topic by adding a comment
with a command among the `comment trailing lines`_::

  Do: merge

``@kwrobot`` will add an award emoji to the comment to indicate that it
was processed and also attempt to merge the MR topic branch to the MR
target integration branch (e.g. ``master``).  If the MR cannot be merged
(e.g. due to conflicts) the robot will post a comment explaining what
went wrong.  If the MR is merged the robot will also remove the source
branch from the user's fork if the corresponding MR option was checked.

The robot automatically constructs a merge commit message of the following
form::

  Merge topic 'mr-topic-branch-name'

  00000000 commit message subject line (one line per commit)

  Acked-by: Kitware Robot <kwrobot@kitware.com>
  Merge-request: !0000

Mention of the commit short sha1s and MR number helps GitLab link the
commits back to the merge request and indicates when they were merged.
The ``Acked-by:`` trailer shown indicates that `Robot Review`_ passed.
Additional ``Acked-by:``, ``Reviewed-by:``, and similar trailers may be
collected from `Human Review`_ comments that have been made since the
last time the MR topic branch was updated with a push.

The ``Do: merge`` command accepts the following arguments:

* ``-t <topic>``: substitute ``<topic>`` for the name of the MR topic
  branch in the constructed merge commit message.

Additionally, ``Do: merge`` extracts configuration from trailing lines
in the MR description (the following have no effect if used in a MR
comment instead):

* ``Backport: release[:<commit-ish>]``: merge the topic branch into
  the ``release`` branch to backport the change.  This is allowed
  only if the topic branch is based on a commit in ``release`` already.
  If only part of the topic branch should be backported, specify it as
  ``:<commit-ish>``.  The ``<commit-ish>`` may use `git rev-parse`_
  syntax to reference commits relative to the topic ``HEAD``.
  See additional `backport instructions`_ for details.
  For example:

  ``Backport: release``
    Merge the topic branch head into both ``release`` and ``master``.
  ``Backport: release:HEAD~1^2``
    Merge the topic branch head's parent's second parent commit into
    the ``release`` branch.  Merge the topic branch head to ``master``.

* ``Topic-rename: <topic>``: substitute ``<topic>`` for the name of
  the MR topic branch in the constructed merge commit message.
  It is also used in merge commits constructed by ``Do: stage``.
  The ``-t`` option to a ``Do: merge`` command overrides any topic
  rename set in the MR description.

.. _`CMake GitLab Project Masters`: https://gitlab.kitware.com/cmake/cmake/-/settings/members
.. _`backport instructions`: https://gitlab.kitware.com/utils/git-workflow/-/wikis/Backport-topics
.. _`git rev-parse`: https://git-scm.com/docs/git-rev-parse

Close
-----

If review has concluded that the MR should not be integrated then it
may be closed through GitLab.  This would normally be a final state
with no expectation that the MR would be re-opened in the future.
It is also used when a MR is being superseded by another separate one,
in which case a reference to the new MR should be added to the MR being
closed.

Expire
------

If progress on a MR has stalled for a while, it may be closed with a
``workflow:expired`` label and a comment indicating that the MR has
been closed due to inactivity (it may also be done where the MR is blocked
for an extended period by work in a different MR).  This is not an
indication that there is a problem with the MR's content, it is only a
practical measure to allow the reviewers to focus attention on MRs that
are actively being worked on.  As a guide, the average period of inactivity
before transitioning a MR to the expired state would be around 2 weeks,
but this may decrease to 1 week or less when there is a high number of
open merge requests.

Reviewers would usually provide a message similar to the following when
resolving a MR as expired::

  Closing for now. @<MR-author> please re-open when ready to continue work.

This is to make it clear to contributors that they are welcome to re-open
the expired MR when they are ready to return to working on it and moving
it forward.  In the meantime, the MR will appear as ``Closed`` in GitLab,
but it can be differentiated from permanently closed MRs by the presence
of the ``workflow:expired`` label.

**NOTE:** Please re-open *before* pushing an update to the MR topic branch
to ensure GitLab will still act on the association.  If changes are pushed
before re-opening the MR, the reviewer should initiate a ``Do: check`` to
force GitLab to act on the updates.

External Discussion
-------------------

In some situations, a series of comments on a MR may develop into a more
involved discussion, or it may become apparent that there are broader
discussions that need to take place before the MR can move forward in an
agreed direction.  Such discussions are better suited to GitLab issues
rather than in a MR because MRs may be superseded by a different MR, or
the set of changes may evolve to look quite different to the context in
which the discussions began.  When this occurs, reviewers may ask the
MR author to open an issue to discuss things there and they will transition
the MR to a resolved state with the label ``workflow:external-discussion``.
The MR will appear in GitLab as closed, but it can be differentiated from
permanently closed MRs by the presence of the ``workflow:external-discussion``
label.  Reviewers should leave a message clearly explaining the action
so that the MR author understands that the MR closure is temporary and
it is clear what actions need to happen next.  The following is an example
of such a message, but it will usually be necessary to tailor the message
to the individual situation::

  The desired behavior here looks to be more involved than first thought.
  Please open an issue so we can discuss the relevant details there.
  Once the path forward is clear, we can re-open this MR and continue work.

When the discussion in the associated issue runs its course and the way
forward is clear, the MR can be re-opened again and the
``workflow:external-discussion`` label removed.  Reviewers should ensure
that the issue created contains a reference to the MR so that GitLab
provides a cross-reference to link the two.
