|
| 1 | +# KEP-1553: Issue Triage Workflow and Automation |
| 2 | + |
| 3 | +<!-- toc --> |
| 4 | +- [Release Signoff Checklist](#release-signoff-checklist) |
| 5 | +- [Summary](#summary) |
| 6 | + - [Note to Reviewers](#note-to-reviewers) |
| 7 | +- [Motivation](#motivation) |
| 8 | + - [Goals](#goals) |
| 9 | + - [Non-Goals](#non-goals) |
| 10 | +- [Proposal](#proposal) |
| 11 | + - [User Stories](#user-stories) |
| 12 | + - [Group Leads](#group-leads) |
| 13 | + - [Reviewers and Approvers](#reviewers-and-approvers) |
| 14 | + - [Contributors](#contributors) |
| 15 | + - [Notes/Constraints/Caveats (optional)](#notesconstraintscaveats-optional) |
| 16 | + - [Risks and Mitigations](#risks-and-mitigations) |
| 17 | +- [Design Details](#design-details) |
| 18 | + - [Graduation Criteria](#graduation-criteria) |
| 19 | + - [Phase 0](#phase-0) |
| 20 | + - [needs-triage and triage/accepted labels](#needs-triage-and-triageaccepted-labels) |
| 21 | + - [Remove or rename unused triage/** labels](#remove-or-rename-unused-triage-labels) |
| 22 | +- [Implementation History](#implementation-history) |
| 23 | +- [Drawbacks](#drawbacks) |
| 24 | +- [Alternatives](#alternatives) |
| 25 | +- [Infrastructure Needed](#infrastructure-needed) |
| 26 | +<!-- /toc --> |
| 27 | + |
| 28 | +## Release Signoff Checklist |
| 29 | + |
| 30 | +- [ ] Enhancement issue in release milestone, which links to KEP dir in [kubernetes/enhancements] (not the initial KEP PR) |
| 31 | +- [ ] KEP approvers have approved the KEP status as `implementable` |
| 32 | +- [ ] Design details are appropriately documented |
| 33 | +- [ ] Test plan is in place, giving consideration to SIG Architecture and SIG Testing input |
| 34 | +- [ ] Graduation criteria is in place |
| 35 | +- [ ] "Implementation History" section is up-to-date for milestone |
| 36 | +- [ ] User-facing documentation has been created in [kubernetes/website], for publication to [kubernetes.io] |
| 37 | +- [ ] Supporting documentation e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes |
| 38 | + |
| 39 | +[kubernetes.io]: https://kubernetes.io/ |
| 40 | +[kubernetes/enhancements]: https://github.com/kubernetes/enhancements |
| 41 | +[kubernetes/kubernetes]: https://github.com/kubernetes/kubernetes |
| 42 | +[kubernetes/website]: https://github.com/kubernetes/website |
| 43 | + |
| 44 | +## Summary |
| 45 | + |
| 46 | +To ease the burden of SIG/area reviewers/approvers, we would like to prescribe |
| 47 | +a triage workflow and supporting automation. |
| 48 | + |
| 49 | +### Note to Reviewers |
| 50 | + |
| 51 | +For this `provisional` phase, the details of this KEP are left intentionally |
| 52 | +light. There was significant discussion across issues, mailing list threads, |
| 53 | +and PRs that didn't lead to forward progress because it seemed we were trying |
| 54 | +to solve everything at once. |
| 55 | + |
| 56 | +Here we attempt to scope a single deliverable before moving on to discussing |
| 57 | +workflow, label states, and entry/exit criteria. |
| 58 | + |
| 59 | +## Motivation |
| 60 | + |
| 61 | +At present, there are [2,155 open issues and 902 pull requests](https://github.com/kubernetes/kubernetes/issues?utf8=%E2%9C%93&q=is%3Aopen) open in |
| 62 | +`kubernetes/kubernetes`. |
| 63 | + |
| 64 | +- [356 are categorized as `lifecycle/stale`](https://github.com/kubernetes/kubernetes/labels/lifecycle%2Fstale) |
| 65 | +- [246 are categorized as `lifecycle/rotten`](https://github.com/kubernetes/kubernetes/labels/lifecycle%2Frotten) |
| 66 | +- [690 are categorized as `lifecycle/frozen`](https://github.com/kubernetes/kubernetes/labels/lifecycle%2Ffrozen) |
| 67 | + |
| 68 | +This makes for about 20% of open issues/PRs that are in some state of staleness. |
| 69 | +If we consider items marked as `lifecycle/frozen`, then we're looking at around |
| 70 | +42% of issues/PRs that could potentially require attention. |
| 71 | + |
| 72 | +### Goals |
| 73 | + |
| 74 | +See [User Stories](#user-stories). |
| 75 | + |
| 76 | +<<[UNRESOLVED]>> |
| 77 | + |
| 78 | +### Non-Goals |
| 79 | + |
| 80 | +- Prescribing an issue triage workflow for all projects within Kubernetes orgs |
| 81 | + |
| 82 | +<<[/UNRESOLVED]>> |
| 83 | + |
| 84 | +## Proposal |
| 85 | + |
| 86 | +### User Stories |
| 87 | + |
| 88 | +#### Group Leads |
| 89 | + |
| 90 | +As a SIG Chair/Technical Lead, WG/UG organizer, or subproject owner, I want to |
| 91 | +be able to easily triage my group's backlog of open issues and PRs to accelerate |
| 92 | +merge velocity and issue resolution. |
| 93 | + |
| 94 | +#### Reviewers and Approvers |
| 95 | + |
| 96 | +As a reviewer/approver, I want a simple system to categorize issues/PRs in my |
| 97 | +purview, so that I can prioritize what to review first. |
| 98 | + |
| 99 | +#### Contributors |
| 100 | + |
| 101 | +As a contributor, I want to be able to submit issues or PRs and: |
| 102 | + |
| 103 | +- understand how the community works to address new submissions |
| 104 | +- have some assurance that they will be routed to the correct group |
| 105 | +- have them addressed in a timely manner |
| 106 | + |
| 107 | +<<[UNRESOLVED]>> |
| 108 | + |
| 109 | +### Notes/Constraints/Caveats (optional) |
| 110 | + |
| 111 | +<!-- |
| 112 | +What are the caveats to the proposal? |
| 113 | +What are some important details that didn't come across above. |
| 114 | +Go in to as much detail as necessary here. |
| 115 | +This might be a good place to talk about core concepts and how they releate. |
| 116 | +--> |
| 117 | + |
| 118 | +<<[/UNRESOLVED]>> |
| 119 | + |
| 120 | +<<[UNRESOLVED]>> |
| 121 | + |
| 122 | +### Risks and Mitigations |
| 123 | + |
| 124 | +<!-- |
| 125 | +What are the risks of this proposal and how do we mitigate. Think broadly. |
| 126 | +For example, consider both security and how this will impact the larger |
| 127 | +kubernetes ecosystem. |
| 128 | +
|
| 129 | +How will security be reviewed and by whom? |
| 130 | +
|
| 131 | +How will UX be reviewed and by whom? |
| 132 | +
|
| 133 | +Consider including folks that also work outside the SIG or subproject. |
| 134 | +--> |
| 135 | + |
| 136 | +<<[/UNRESOLVED]>> |
| 137 | + |
| 138 | +## Design Details |
| 139 | + |
| 140 | +<!-- |
| 141 | +This section should contain enough information that the specifics of your |
| 142 | +change are understandable. This may include API specs (though not always |
| 143 | +required) or even code snippets. If there's any ambiguity about HOW your |
| 144 | +proposal will be implemented, this is the place to discuss them. |
| 145 | +--> |
| 146 | + |
| 147 | +### Graduation Criteria |
| 148 | + |
| 149 | +<!-- |
| 150 | +**Note:** *Not required until targeted at a release.* |
| 151 | +--> |
| 152 | + |
| 153 | +_Not required in `provisional` state._ |
| 154 | + |
| 155 | +### Phase 0 |
| 156 | + |
| 157 | +#### needs-triage and triage/accepted labels |
| 158 | + |
| 159 | +We currently have a Prow plugin called `require-matching-label`, which requires |
| 160 | +specific labels to be set on a issue or pull request. |
| 161 | + |
| 162 | +Examples in [kubernetes/kubernetes] include: |
| 163 | + |
| 164 | +- `needs-kind` (needs a `kind/foo` label) |
| 165 | +- `needs-priority` (needs a `priority/bar` label) |
| 166 | +- `needs-sig` (needs a `sig/baz` label) |
| 167 | + |
| 168 | +Here we propose [introducing two new labels](https://github.com/kubernetes/test-infra/pull/16298): |
| 169 | + |
| 170 | +- `needs-triage` |
| 171 | +- `triage/accepted` |
| 172 | + |
| 173 | +The `needs-triage` label would be automatically applied to incoming issues. |
| 174 | + |
| 175 | +Current contributors would then need to inspect issues with the `needs-triage` |
| 176 | +label and attempt to triage them. |
| 177 | + |
| 178 | +Upon determining that an issue is ready to be actively worked on, an org member |
| 179 | +can apply the `triage/accepted` label using the following bot command: |
| 180 | + |
| 181 | +```shell |
| 182 | +/triage accept |
| 183 | +``` |
| 184 | + |
| 185 | +(Alternatively, contributors with write access to `kubernetes/kubernetes` would be |
| 186 | +able to manually apply the `triage/accepted` label.) |
| 187 | + |
| 188 | +**Considerations:** |
| 189 | + |
| 190 | +- `triage/accepted` should be considered a placeholder name for the |
| 191 | + label in this provisional state, depending on what we decide is the most |
| 192 | + appropriate name. |
| 193 | +- There will be an expectation that only SIG members designated to triage |
| 194 | + issues are applying triage labels. We're considering limiting application of |
| 195 | + this label to the [`milestone-maintainers` GitHub team](https://github.com/orgs/kubernetes/teams/milestone-maintainers). |
| 196 | + |
| 197 | +From here, a group can search the open items labeled with |
| 198 | +`triage/accepted` and proceed to work on them. |
| 199 | + |
| 200 | +A nice example of a written SIG workflow is the [grooming document from |
| 201 | +SIG Cluster Lifecycle](https://git.k8s.io/community/sig-cluster-lifecycle/grooming.md). |
| 202 | + |
| 203 | +#### Remove or rename unused triage/** labels |
| 204 | + |
| 205 | +As we're considering reviving the `triage/**` labels in this workflow, it's |
| 206 | +important that all labels with this affix are up-to-date, removing any |
| 207 | +`triage/**` label deemed to be unused. |
| 208 | + |
| 209 | +The current list of `triage/**` labels is as follows: |
| 210 | + |
| 211 | +- `triage/duplicate` |
| 212 | +- `triage/needs-information` |
| 213 | +- `triage/not-reproducible` |
| 214 | +- `triage/support` |
| 215 | +- `triage/unresolved` |
| 216 | + |
| 217 | +We propose here removing the following labels: |
| 218 | + |
| 219 | +- `triage/duplicate` |
| 220 | +- `triage/not-reproducible` |
| 221 | +- `triage/unresolved` |
| 222 | + |
| 223 | +We rename the following labels: |
| 224 | + |
| 225 | +- `triage/support` --> `kind/support`: Issue has been identified as a support |
| 226 | + question, which should be routed to the appropriate forum and closed |
| 227 | + immediately afterwards |
| 228 | +- `triage/needs-information` --> `lifecycle/needs-information`: Issue requires |
| 229 | + more information (from submitter or SIG) in order to work on it |
| 230 | + |
| 231 | +Which leaves the following label and accompanying definition: |
| 232 | + |
| 233 | +- `triage/accepted`: Issue has been triaged by a SIG representative and |
| 234 | + is ready to be worked |
| 235 | + |
| 236 | +## Implementation History |
| 237 | + |
| 238 | +- 2020-02-15 - [Issue Triage KEP submitted as `provisional`](https://github.com/kubernetes/enhancements/pull/1554) |
| 239 | +- 2020-02-15 - [Issue Triage Enhancement issue](https://github.com/kubernetes/enhancements/issues/1553) opened |
| 240 | +- 2020-02-14 - [Carry PR opened](https://github.com/kubernetes/test-infra/pull/16298) for `needs-triage` and `triage/accepted` labels |
| 241 | +- 2020-02-14 - [Carry PR opened](https://github.com/kubernetes/test-infra/pull/16299) to rename `triage/**` labels to `close/**` |
| 242 | +- 2019-05-30 - [Original PR opened](https://github.com/kubernetes/test-infra/pull/12814) to rename `triage/**` labels to `close/**` |
| 243 | +- 2019-05-01 - ["Deadlines are horrible"](https://groups.google.com/d/topic/kubernetes-sig-release/dGVBrlkOXQo/discussion) discussion |
| 244 | +- 2019-03-18 - [Original PR opened](https://github.com/kubernetes/test-infra/pull/11818) for `needs-triage` and `lifecycle/ready` labels |
| 245 | +- 2019-03-18 - [k/k-wide triage workflow improvements](https://github.com/kubernetes/community/issues/3456) issue opened |
| 246 | +- 2019-03-08 - ["Issue triage again"](https://groups.google.com/d/topic/kubernetes-sig-contribex/BvGmOQ0v5f0/discussion) discussion |
| 247 | +- 2016-11-14 - [Initial mailing list](https://groups.google.com/d/topic/kubernetes-sig-contribex/mI7kuTFa_I4/discussion) discussion on issue triage |
| 248 | + |
| 249 | +## Drawbacks |
| 250 | + |
| 251 | +N/A |
| 252 | + |
| 253 | +<<[UNRESOLVED]>> |
| 254 | + |
| 255 | +## Alternatives |
| 256 | + |
| 257 | +<!-- |
| 258 | +What other approaches did you consider and why did you rule them out? These do |
| 259 | +not need to be as detailed as the proposal, but should include enough |
| 260 | +information to express the idea and why it was not acceptable. |
| 261 | +--> |
| 262 | + |
| 263 | +<<[/UNRESOLVED]>> |
| 264 | + |
| 265 | +## Infrastructure Needed |
| 266 | + |
| 267 | +At the current stage of this proposal, Prow already supports the behaviors we require: |
| 268 | + |
| 269 | +- Adding new labels |
| 270 | +- Enforcing label requirements on issues/PRs |
0 commit comments