blob: 19e4fd5e00c6c07f222a5a1e6908b34dec1eab4e [file] [log] [blame] [view]
# Contributor Tips
This is an opinionated guide documenting workflows that some members of the team
have found useful. It is focused on meta-tooling, not on IREE code specifically
(you will find the latter in the [Developer Overview](developer_overview.md)) It
is certainly possible to use workflows other than these, but some common tasks,
especially for maintainers will likely be made easier if you use these flows. It
assumes a basic knowledge of `git` and GitHub and suggests some specific ways of
using it.
## Git Structure
We tend to use the "triangular" or "forking" workflow. Develop primarily on a
clone of the repository on your development machine. Any local branches named
the same as persistent branches from the
[main repository](https://github.com/google/iree) (currently `main`, `google`,
and `stable`) are pristine (though potentially stale) copies. You only
fastforward these to match upstream and otherwise do development on other
branches. When sending PRs, you push to a different branch on your public fork
and create the PR from there.
### Setup
1. Create a fork of the main repository.
2. Create a local git repository with remotes `upstream` (the main repository)
and `origin` (your personal fork). To list your current remotes `git remote
-v`.
a. If you already cloned from the main repository (e.g. by following the
getting started guide):
```shell
# From your existing git repo
git remote rename origin upstream
git remote add origin git@github.com:<github_username>/iree.git
```
b. If you haven't already cloned:
```shell
# From whatever directory under which you want to nest your repo
git clone git@github.com:<github_username>/iree.git
cd iree
git remote add upstream git@github.com:google/iree.git
```
This is especially important for maintainers who have write access (so can
push directly to the main repository) and admins who have elevated
privileges (so can push directly to protected branches). These names are
just suggestions, but you might find some scripts where the defaults are for
remotes named like this. For extra safety, you can make it difficult to push
directly to upstream by setting the push url to something invalid: `git
remote set-url --push upstream DISABLE`, which requires re-enabling the push
URL explicitly before pushing.
3. Use a script like
[git_update.sh](https://github.com/google/iree/blob/main/scripts/git/git_update.sh)
to easily synchronize `main` with `upstream`. Submodules make this is a
little trickier than it should be. You can also add this as a git alias.
```shell
git config alias.update "! /path/to/git-update"
git config alias.sync "update main"
```
## Useful Tools
* GitHub CLI (https://github.com/cli/cli). A CLI for interacting with GitHub.
Most importantly, it allows scripting the creation of pull requests.
* Refined GitHub Chrome and Firefox Extension:
https://github.com/sindresorhus/refined-github. Nice extension that adds a
bunch of features to the GitHub UI.
* Squashed Merge Messages Chrome and Firefox Extension:
https://github.com/zachwhaley/squashed-merge-message. Simple extension that
implements the desired pattern for IREE squash-merge and merge-commit
messages, copying the PR title and body.
* VSCode: https://code.visualstudio.com/. The most commonly used IDE amongst
IREE developers.