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