| # 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. |