.. _github-reviews:

======================
LLVM GitHub User Guide
======================

.. contents::
   :local:

Introduction
============
The LLVM Project uses `GitHub <https://github.com/>`_ for
`Source Code <https://github.com/llvm/llvm-project>`_,
`Releases <https://github.com/llvm/llvm-project/releases>`_,
`Issue Tracking <https://github.com/llvm/llvm-project/issues>`_., and
`Code Reviews <https://github.com/llvm/llvm-project/pulls>`_.

This page describes how the LLVM Project users and developers can
participate in the project using GitHub.

Before your first PR
====================

Please ensure that you have set a valid email address in your GitHub account,
see :ref:`github-email-address`.

Pull Requests
=============
The LLVM project is using GitHub Pull Requests for Code Reviews. This document
describes the typical workflow of creating a Pull Request and getting it reviewed
and accepted. This is meant as an overview of the GitHub workflow, for complete
documentation refer to `GitHub's documentation <https://docs.github.com/pull-requests>`_.

.. note::
   If you are using a Pull Request for purposes other than review
   (eg: precommit CI results, convenient web-based reverts, etc)
   add the `skip-precommit-approval <https://github.com/llvm/llvm-project/labels?q=skip-precommit-approval>`_
   label to the PR.

GitHub Tools
------------
You can interact with GitHub in several ways: via git command line tools,
the web browser, `GitHub Desktop <https://desktop.github.com/>`_, or the
`GitHub CLI <https://cli.github.com>`_. This guide will cover the git command line
tools and the GitHub CLI.

Creating Pull Requests
----------------------
Keep in mind that when creating a pull request, it should generally only contain one
self-contained commit initially.
This makes it easier for reviewers to understand the introduced changes and
provide feedback. It also helps maintain a clear and organized commit history
for the project. If you have multiple changes you want to introduce, it's
recommended to create separate pull requests for each change.

Create a local branch per commit you want to submit and then push that branch
to your `fork <https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks>`_
of the llvm-project and
`create a pull request from the fork <https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork>`_.
As GitHub uses the first line of the commit message truncated to 72 characters
as the pull request title, you may have to edit to reword or to undo this
truncation.

Creating Pull Requests with GitHub CLI
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
With the CLI it's enough to create the branch locally and then run:

::

  gh pr create

When prompted select to create and use your own fork and follow
the instructions to add more information needed.

.. note::

  When you let the GitHub CLI create a fork of llvm-project to
  your user, it will change the git "remotes" so that "origin" points
  to your fork and "upstream" points to the main llvm-project repository.

Updating Pull Requests
----------------------
In order to update your pull request, the only thing you need to do is to push
your new commits to the branch in your fork. That will automatically update
the pull request.

When updating a pull request, you should push additional "fix up" commits to
your branch instead of force pushing. This makes it easier for GitHub to
track the context of previous review comments. Consider using the
`built-in support for fixups <https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---fixupamendrewordltcommitgt>`_
in git.

If you do this, you must squash and merge before landing the PR and
you must use the pull request title and description as the commit message.
You can do this manually with an interactive git rebase or with GitHub's
built-in tool. See the section about landing your fix below.

When pushing to your branch, make sure you push to the correct fork. Check your
remotes with:

::

  git remote -v

And make sure you push to the remote that's pointing to your fork.

Rebasing Pull Requests and Force Pushes
---------------------------------------
In general, you should avoid rebasing a Pull Request and force pushing to the
branch that's the root of the Pull Request during the review. This action will
make the context of the old changes and comments harder to find and read.

Sometimes, a rebase might be needed to update your branch with a fix for a test
or in some dependent code.

After your PR is reviewed and accepted, you want to rebase your branch to ensure
you won't encounter merge conflicts when landing the PR.

.. note::
  This guide assumes that the PR branch only has 1 author. If you are
  collaborating with others on a single branch, be careful how and when you push
  changes. ``--force-with-lease`` may be useful in this situation.

Approvals
---------

Before merging a PR you must have the required approvals. See
:ref:`lgtm_how_a_patch_is_accepted` for more details.


Landing your change
-------------------

After your PR is approved, ensure that:

  * The PR title and description describe the final changes. These will be used
    as the title and message of the final squashed commit. The titles and
    messages of commits in the PR will **not** be used.
  * You have set a valid email address in your GitHub account, see :ref:`github-email-address`.

.. note::
   The LLVM Project monorepo on GitHub is configured to always use "Squash
   and Merge" as the pull request merge option when using the web interface.
   With this option, GitHub uses the PR summary as the default commit
   message.

   Users with write access who can merge PRs have a final opportunity to edit
   the commit title and message before merging. However, this option is not
   available to contributors without write access.

At this point, you can merge your changes. If you do not have write permissions
for the repository, the merge button in GitHub's web interface will be
disabled. If this is the case, continue following the steps here but ask one of
your reviewers to click the merge button on your behalf.

If the PR is a single commit, all you need to do is click the merge button in
GitHub's web interface.

If your PR contains multiple commits, you need to consolidate those commits into
one commit. There are three different ways to do this, shown here with the most
commonly used first:

* Use the button `Squash and merge` in GitHub's web interface, if you do this
  remember to review the commit message when prompted.

  Afterwards you can select the option `Delete branch` to delete the branch
  from your fork.

* `Interactive rebase <https://git-scm.com/docs/git-rebase#_interactive_mode>`_
  with fixups. This is the recommended method since you can control the final
  commit message and check that the final commit looks as you expect. When
  your local state is correct, remember to force-push to your branch and press
  the merge button in GitHub's web interface afterwards.

* Merge using the GitHub command line interface. Switch to your branch locally
  and run:

  ::

    gh pr merge --squash --delete-branch

  If you observe an error message from the above informing you that your pull
  request is not mergeable, then that is likely because upstream has been
  modified since your pull request was authored in a way that now results in a
  merge conflict. You must first resolve this merge conflict in order to merge
  your pull request. In order to do that:

  ::

    git fetch upstream
    git rebase upstream/main

  Then fix the source files causing merge conflicts and make sure to rebuild and
  retest the result. Then:

  ::

    git add <files with resolved merge conflicts>
    git rebase --continue

  Finally, you'll need to force push to your branch one more time before you can
  merge:

  ::

    git push --force
    gh pr merge --squash --delete-branch

  This force push may ask if you intend to push hundreds, or potentially
  thousands of patches (depending on how long it's been since your pull request
  was initially authored vs. when you intended to merge it). Since you're pushing
  to a branch in your fork, this is ok and expected. Github's UI for the pull
  request will understand that you're rebasing just your patches, and display
  this result correctly with a note that a force push did occur.

.. _github_branches:

Branches
========

It is possible to create branches in `llvm/llvm-project/` that start with
`users/<username>/`, however this is intended to be able to support "stacked"
pull-request. Do not create any branches in the `llvm/llvm-project` repository
otherwise, please use a fork (see above). User branches that aren't
associated with a pull-request **will be deleted**.

Stacked Pull Requests
=====================

To separate related changes or to break down a larger PR into smaller, reviewable
pieces, use "stacked pull requests" — this helps make the review process
smoother.

.. note::
   The LLVM Project monorepo on GitHub is configured to always use "Squash and
   Merge" as the pull request merge option. As a result, each PR results in
   exactly one commit being merged into the project.

   This means that stacked pull requests are the only available option for
   landing a series of related changes. In contrast, submitting a PR with
   multiple commits and merging them as-is (without squashing) is not supported
   in LLVM.

While GitHub does not natively support stacked pull requests, there are several
common alternatives.

To illustrate, assume that you are working on two branches in your fork of the
``llvm/llvm-project`` repository, and you want to eventually merge both into
``main``:

- `feature_1`, which contains commit `feature_commit_1`
- `feature_2`, which contains commit `feature_commit_2` and depends on
  `feature_1` (so it also includes `feature_commit_1`)

Your options are as follows:

#. Use user branches in ``llvm/llvm-project``

   Create user branches in the main repository, as described
   :ref:`above<github_branches>`. Then:

   - Open a pull request from `users/<username>/feature_1` → `main`
   - Open another from `users/<username>/feature_2` → `users/<username>/feature_1`

   This approach allows GitHub to display clean, incremental diffs for each PR
   in the stack, making it much easier for reviewers to see what has changed at
   each step. Once `feature_1` is merged, GitHub will automatically rebase and
   re-target your branch `feature_2` to `main`. For more complex stacks, you can
   perform this step using the web interface.

   This approach requires commit access. See how to obtain it
   `here <https://llvm.org/docs/DeveloperPolicy.html#obtaining-commit-access>`_.

#. Two PRs with a dependency note

   Create PR_1 for `feature_1` and PR_2 for `feature_2`. In PR_2, include a
   note in the PR summary indicating that it depends on PR_1 (e.g.,
   “Depends on #PR_1”).

   To make review easier, make it clear which commits are part of the base PR
   and which are new, e.g. "The first N commits are from the base PR". This
   helps reviewers focus only on the incremental changes.

#. Use a stacked PR tool

   Use tools like SPR or Graphite (described below) to automate managing
   stacked PRs. These tools are also based on using user branches
   in ``llvm/llvm-project``.

.. note::
   When not using user branches, GitHub will not display proper diffs for
   subsequent PRs in a stack. Instead, it will show a combined diff that
   includes all commits from earlier PRs.

   As described above, it is the PR author’s responsibility to clearly indicate
   which commits are relevant to the current PR.
   For example: “The first N commits are from the base PR.”

   You can avoid this issue by using user branches directly in the
   ``llvm/llvm-project`` repository.


Using Graphite for stacked Pull Requests
----------------------------------------

`Graphite <https://app.graphite.dev/>`_ is a stacked pull request tool supported
by the LLVM repo (the other being `reviewable.io <https://reviewable.io>`_).

Graphite will want to create branches under ``llvm/llvm-project`` rather than your
private fork, so the guidance above, about branch naming, is critical, otherwise
``gt submit`` (i.e. publish your PRs for review) will fail.

Use ``gt config`` then ``Branch naming settings`` and ``Set a prefix for branch names``.
Include the last ``/``.

If you didn't do the above and Graphite created non-prefixed branches, a simple way to
unblock is to rename (``git -m <old name> <new name>``), and then checkout the branch
and ``gt track``.

Pre-merge Continuous Integration (CI)
-------------------------------------

Multiple checks will be applied on a pull-request, either for linting/formatting
or some build and tests. None of these are perfect and you will encounter
false positive, infrastructure failures (unstable or unavailable worker), or
you will be unlucky and based your change on a broken revision of the main branch.

None of the checks are strictly mandatory: these are tools to help us build a
better codebase and be more productive (by avoiding issues found post-merge and
possible reverts). As a developer you're empowered to exercise your judgement
about bypassing any of the checks when merging code.

The infrastructure can print messages that make it seem like these are mandatory,
but this is just an artifact of GitHub infrastructure and not a policy of the
project.

However, please make sure you do not force-merge any changes that have clear
test failures directly linked to your changes. Our policy is still to keep the
``main`` branch in a good condition, and introducing failures to be fixed later
violates that policy.

Problems After Landing Your Change
==================================

Even though your PR passed the pre-commit checks and is approved by reviewers, it
may cause problems for some configurations after it lands. You will be notified
if this happens and the community is ready to help you fix the problems.

This process is described in detail
:ref:`here <MyFirstTypoFix Issues After Landing Your PR>`.


Checking out another PR locally
-------------------------------
Sometimes you want to review another person's PR on your local machine to run
tests or inspect code in your preferred editor. This is easily done with the
CLI:

::

  gh pr checkout <PR Number>

This is also possible with the web interface and the normal git command line
tools, but the process is a bit more complicated. See GitHub's
`documentation <https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/checking-out-pull-requests-locally?platform=linux&tool=webui#modifying-an-inactive-pull-request-locally>`_
on the topic.

Example Pull Request with GitHub CLI
====================================
Here is an example for creating a Pull Request with the GitHub CLI:

::

  # Clone the repo
  gh repo clone llvm/llvm-project

  # Switch to the repo and create a new branch
  cd llvm-project
  git switch -c my_change

  # Create your changes
  $EDITOR file.cpp

  # Don't forget clang-format
  git clang-format

  # and don't forget running your tests
  ninja check-llvm

  # Commit, use a good commit message
  git commit file.cpp

  # Create the PR, select to use your own fork when prompted.
  # If you don't have a fork, gh will create one for you.
  gh pr create

  # If you get any review comments, come back to the branch and
  # adjust them.
  git switch my_change
  $EDITOR file.cpp

  # Commit your changes
  git commit file.cpp -m "Code Review adjustments"

  # Format changes
  git clang-format HEAD~

  # Recommit if any formatting changes
  git commit -a --amend

  # Push your changes to your fork branch, be mindful of
  # your remotes here, if you don't remember what points to your
  # fork, use git remote -v to see. Usually origin points to your
  # fork and upstream to llvm/llvm-project
  git push origin my_change

Before merging the PR, it is recommended that you rebase locally and re-run test
checks:

::

  # Add upstream as a remote (if you don't have it already)
  git remote add upstream https://github.com/llvm/llvm-project.git

  # Make sure you have all the latest changes
  git fetch upstream && git rebase -i upstream/main

  # Make sure tests pass with latest changes and your change
  ninja check

  # Push the rebased changes to your fork.
  git push origin my_change --force

  # Now merge it
  gh pr merge --squash --delete-branch


See more in-depth information about how to contribute in the following documentation:

* :doc:`Contributing`
* :doc:`MyFirstTypoFix`

Example Pull Request with git
====================================

Instead of using the GitHub CLI to create a PR, you can push your code to a
remote branch on your fork and create the PR to upstream using the GitHub web
interface.

Here is an example of making a PR using git and the GitHub web interface:

First follow the instructions to [fork the repository](https://docs.github.com/en/get-started/quickstart/fork-a-repo?tool=webui#forking-a-repository).

Next follow the instructions to [clone your forked repository](https://docs.github.com/en/get-started/quickstart/fork-a-repo?tool=webui#cloning-your-forked-repository).

Once you've cloned your forked repository,

::

  # Switch to the forked repo
  cd llvm-project

  # Create a new branch
  git switch -c my_change

  # Create your changes
  $EDITOR file.cpp

  # Don't forget clang-format
  git clang-format

  # and don't forget running your tests
  ninja check-llvm

  # Commit, use a good commit message
  git commit file.cpp

  # Push your changes to your fork branch, be mindful of
  # your remotes here, if you don't remember what points to your
  # fork, use git remote -v to see. Usually origin points to your
  # fork and upstream to llvm/llvm-project
  git push origin my_change

Navigate to the URL printed to the console from the git push command in the last step.
Create a pull request from your branch to llvm::main.

::

  # If you get any review comments, come back to the branch and
  # adjust them.
  git switch my_change
  $EDITOR file.cpp

  # Commit your changes
  git commit file.cpp -m "Code Review adjustments"

  # Format changes
  git clang-format HEAD~

  # Recommit if any formatting changes
  git commit -a --amend

  # Re-run tests and make sure nothing broke.
  ninja check

  # Push your changes to your fork branch, be mindful of
  # your remotes here, if you don't remember what points to your
  # fork, use git remote -v to see. Usually origin points to your
  # fork and upstream to llvm/llvm-project
  git push origin my_change

Before merging the PR, it is recommended that you rebase locally and re-run test
checks:

::

  # Add upstream as a remote (if you don't have it already)
  git remote add upstream https://github.com/llvm/llvm-project.git

  # Make sure you have all the latest changes
  git fetch upstream && git rebase -i upstream/main

  # Make sure tests pass with latest changes and your change
  ninja check

  # Push the rebased changes to your fork.
  git push origin my_change --force

Once your PR is approved, rebased, and tests are passing, click `Squash and
Merge` on your PR in the GitHub web interface.

See more in-depth information about how to contribute in the following documentation:

* :doc:`Contributing`
* :doc:`MyFirstTypoFix`

Releases
========

.. _backporting:

Backporting Fixes to the Release Branches
-----------------------------------------
You can use special comments on issues or pull requests to make backport
requests for the release branches.  To do this, after your pull request has been
merged:

1. Edit "Milestone" at the right side of the issue or pull request
   to say "LLVM X.Y Release"

2. Add a comment to it in the following format:

::

  /cherry-pick <commit> <commit> <...>

This command takes one or more git commit hashes as arguments and will attempt
to cherry-pick the commit(s) to the release branch.  If the commit(s) fail to
apply cleanly, then a comment with a link to the failing job will be added to
the issue/pull request.  If the commit(s) do apply cleanly, then a pull request
will be created with the specified commits.

If a commit you want to backport does not apply cleanly, you may resolve
the conflicts locally and then create a pull request against the release
branch.  Just make sure to add the release milestone to the pull request.

Getting admin access to CI infrastructure
=========================================

Any individual who is responsible for setting up and/or maintaining CI infrastructure for a LLVM project can
request to be granted the CI/CD role to the LLVM organization admins. The request can be made by creating
`a Github issue <https://github.com/llvm/llvm-project/issues/new>`_ and using the ``infrastructure`` label.
Applicants must include a justification for why the role is being requested. Applications are reviewed on a
case-by-case basis by the LLVM admins and the role can be revoked at any point as the LLVM admins see fit.
