github.com/guilhermebr/docker@v1.4.2-0.20150428121140-67da055cebca/docs/sources/project/find-an-issue.md (about) 1 page_title: Make a project contribution 2 page_description: Basic workflow for Docker contributions 3 page_keywords: contribute, pull request, review, workflow, beginner, expert, squash, commit 4 5 <style type="text/css"> 6 7 /* GitHub label styles */ 8 .gh-label { 9 display: inline-block; 10 padding: 3px 4px; 11 font-size: 12px; 12 font-weight: bold; 13 line-height: 1; 14 color: #fff; 15 border-radius: 2px; 16 box-shadow: inset 0 -1px 0 rgba(0,0,0,0.12); 17 } 18 19 /* Experience */ 20 .gh-label.beginner { background-color: #B5E0B5; color: #333333; } 21 .gh-label.expert { background-color: #599898; color: #ffffff; } 22 .gh-label.master { background-color: #306481; color: #ffffff; } 23 .gh-label.novice { background-color: #D6F2AC; color: #333333; } 24 .gh-label.proficient { background-color: #8DC7A9; color: #333333; } 25 26 /* Kind */ 27 .gh-label.bug { background-color: #FF9DA4; color: #333333; } 28 .gh-label.cleanup { background-color: #FFB7B3; color: #333333; } 29 .gh-label.content { background-color: #CDD3C2; color: #333333; } 30 .gh-label.feature { background-color: #B7BEB7; color: #333333; } 31 .gh-label.graphics { background-color: #E1EFCB; color: #333333; } 32 .gh-label.improvement { background-color: #EBD2BB; color: #333333; } 33 .gh-label.proposal { background-color: #FFD9C0; color: #333333; } 34 .gh-label.question { background-color: #EEF1D1; color: #333333; } 35 .gh-label.usecase { background-color: #F0E4C2; color: #333333; } 36 .gh-label.writing { background-color: #B5E9D5; color: #333333; } 37 38 39 </style> 40 41 42 # Find and claim an issue 43 44 On this page, you choose what you want to work on. As a contributor you can work 45 on whatever you want. If you are new to contributing, you should start by 46 working with our known issues. 47 48 ## Understand the issue types 49 50 An existing issue is something reported by a Docker user. As issues come in, 51 our maintainers triage them. Triage is its own topic. For now, it is important 52 for you to know that triage includes ranking issues according to difficulty. 53 54 Triaged issues have one of these labels: 55 56 <table class="tg"> 57 <tr> 58 <td class="tg-031e">Level</td> 59 <td class="tg-031e">Experience level guideline</td> 60 </tr> 61 <tr> 62 <td class="tg-031e"><strong class="gh-label beginner">exp/beginner</strong></td> 63 <td class="tg-031e">You have made less than 10 contributions in your life time to any open source project.</td> 64 </tr> 65 <tr> 66 <td class="tg-031e"><strong class="gh-label novice">exp/novice</strong></td> 67 <td class="tg-031e">You have made more than 10 contributions to an open source project or at least 5 contributions to Docker. </td> 68 </tr> 69 <tr> 70 <td class="tg-031e"><strong class="gh-label proficient">exp/proficient</strong></td> 71 <td class="tg-031e">You have made more than 5 contributions to Docker which amount to at least 200 code lines or 1000 documentation lines. </td> 72 </tr> 73 <tr> 74 <td class="tg-031e"><strong class="gh-label expert">exp/expert</strong></td> 75 <td class="tg-031e">You have made less than 20 commits to Docker which amount to 500-1000 code lines or 1000-3000 documentation lines. </td> 76 </tr> 77 <tr> 78 <td class="tg-031e"><strong class="gh-label master">exp/master</strong></td> 79 <td class="tg-031e">You have made more than 20 commits to Docker and greater than 1000 code lines or 3000 documentation lines.</td> 80 </tr> 81 </table> 82 83 As the table states, these labels are meant as guidelines. You might have 84 written a whole plugin for Docker in a personal project and never contributed to 85 Docker. With that kind of experience, you could take on an <strong 86 class="gh-label expert">exp/expert</strong> or <strong class="gh-label 87 master">exp/master</strong> level task. 88 89 ## Claim a beginner or novice issue 90 91 In this section, you find and claim an open documentation lines issue. 92 93 94 1. Go to the `docker/docker` <a 95 href="https://github.com/docker/docker" target="_blank">repository</a>. 96 97 2. Click on the "Issues" link. 98 99 A list of the open issues appears. 100 101 ![Open issues](/project/images/issue_list.png) 102 103 3. Look for the <strong class="gh-label beginner">exp/beginner</strong> items on the list. 104 105 4. Click on the "labels" dropdown and select <strong class="gh-label beginner">exp/beginner</strong>. 106 107 The system filters to show only open <strong class="gh-label beginner">exp/beginner</strong> issues. 108 109 5. Open an issue that interests you. 110 111 The comments on the issues can tell you both the problem and the potential 112 solution. 113 114 6. Make sure that no other user has chosen to work on the issue. 115 116 We don't allow external contributors to assign issues to themselves. So, you 117 need to read the comments to find if a user claimed the issue by leaving a 118 `#dibs` comment on the issue. 119 120 7. When you find an open issue that both interests you and is unclaimed, add a 121 `#dibs` comment. 122 123 ![Easy issue](/project/images/easy_issue.png) 124 125 This example uses issue 11038. Your issue # will be different depending on 126 what you claimed. After a moment, Gordon the Docker bot, changes the issue 127 status to claimed. 128 129 8. Make a note of the issue number; you'll need it later. 130 131 ## Sync your fork and create a new branch 132 133 If you have followed along in this guide, you forked the `docker/docker` 134 repository. Maybe that was an hour ago or a few days ago. In any case, before 135 you start working on your issue, sync your repository with the upstream 136 `docker/docker` master. Syncing ensures your repository has the latest 137 changes. 138 139 To sync your repository: 140 141 1. Open a terminal on your local host. 142 143 2. Change directory to the `docker-fork` root. 144 145 $ cd ~/repos/docker-fork 146 147 3. Checkout the master branch. 148 149 $ git checkout master 150 Switched to branch 'master' 151 Your branch is up-to-date with 'origin/master'. 152 153 Recall that `origin/master` is a branch on your remote GitHub repository. 154 155 4. Make sure you have the upstream remote `docker/docker` by listing them. 156 157 $ git remote -v 158 origin https://github.com/moxiegirl/docker.git (fetch) 159 origin https://github.com/moxiegirl/docker.git (push) 160 upstream https://github.com/docker/docker.git (fetch) 161 upstream https://github.com/docker/docker.git (push) 162 163 If the `upstream` is missing, add it. 164 165 $ git remote add upstream https://github.com/docker/docker.git 166 167 5. Fetch all the changes from the `upstream master` branch. 168 169 $ git fetch upstream master 170 remote: Counting objects: 141, done. 171 remote: Compressing objects: 100% (29/29), done. 172 remote: Total 141 (delta 52), reused 46 (delta 46), pack-reused 66 173 Receiving objects: 100% (141/141), 112.43 KiB | 0 bytes/s, done. 174 Resolving deltas: 100% (79/79), done. 175 From github.com:docker/docker 176 * branch master -> FETCH_HEAD 177 178 This command says get all the changes from the `master` branch belonging to 179 the `upstream` remote. 180 181 7. Rebase your local master with the `upstream/master`. 182 183 $ git rebase upstream/master 184 First, rewinding head to replay your work on top of it... 185 Fast-forwarded master to upstream/master. 186 187 This command applies all the commits from the upstream master to your local 188 master. 189 190 8. Check the status of your local branch. 191 192 $ git status 193 On branch master 194 Your branch is ahead of 'origin/master' by 38 commits. 195 (use "git push" to publish your local commits) 196 nothing to commit, working directory clean 197 198 Your local repository now has all the changes from the `upstream` remote. You 199 need to push the changes to your own remote fork which is `origin master`. 200 201 9. Push the rebased master to `origin master`. 202 203 $ git push origin master 204 Username for 'https://github.com': moxiegirl 205 Password for 'https://moxiegirl@github.com': 206 Counting objects: 223, done. 207 Compressing objects: 100% (38/38), done. 208 Writing objects: 100% (69/69), 8.76 KiB | 0 bytes/s, done. 209 Total 69 (delta 53), reused 47 (delta 31) 210 To https://github.com/moxiegirl/docker.git 211 8e107a9..5035fa1 master -> master 212 213 9. Create a new feature branch to work on your issue. 214 215 Your branch name should have the format `XXXX-descriptive` where `XXXX` is 216 the issue number you are working on. For example: 217 218 $ git checkout -b 11038-fix-rhel-link 219 Switched to a new branch '11038-fix-rhel-link' 220 221 Your branch should be up-to-date with the `upstream/master`. Why? Because you 222 branched off a freshly synced master. Let's check this anyway in the next 223 step. 224 225 9. Rebase your branch from upstream/master. 226 227 $ git rebase upstream/master 228 Current branch 11038-fix-rhel-link is up to date. 229 230 At this point, your local branch, your remote repository, and the Docker 231 repository all have identical code. You are ready to make changes for your 232 issue. 233 234 235 ## Where to go next 236 237 At this point, you know what you want to work on and you have a branch to do 238 your work in. Go onto the next section to learn [how to work on your 239 changes](/project/work-issue/).