|
|
|
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 the MR with a (force-)push of the topic
|
|
|
|
branch. The update initiates a new round of review.
|
|
|
|
|
|
|
|
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 --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 preferrable 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>)``.
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
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.
|
|
|
|
The `CMake Testing Process`_ also has 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 Testing Process`: 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.
|