<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kubernetes Contributors – Getting Started</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/</link><description>Recent content in Getting Started on Kubernetes Contributors</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: Making your First Contribution</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/first-contribution/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/first-contribution/</guid><description>
&lt;h1 id="your-first-contribution">Your First Contribution&lt;/h1>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/first-contribution/#find-something-to-work-on">Find something to work on&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/first-contribution/#find-a-good-first-topic">Find a good first topic&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/first-contribution/#issue-assignment-in-github">Issue Assignment in Github&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/first-contribution/#learn-about-sigs">Learn about SIGs&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/first-contribution/#sig-structure">SIG structure&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/first-contribution/#find-a-sig-that-is-related-to-your-contribution">Find a SIG that is related to your contribution&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/first-contribution/#sig-specific-contributing-guidelines">SIG-specific contributing guidelines&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/first-contribution/#file-an-issue">File an Issue&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="find-something-to-work-on">Find something to work on&lt;/h2>
&lt;p>The first step to getting starting contributing to Kubernetes is to find something
to work on. Help is always welcome, and no contribution is too small (but see below)!&lt;/p>
&lt;p>Here are some things you can do today to get started contributing:&lt;/p>
&lt;ul>
&lt;li>Help improve the Kubernetes documentation&lt;/li>
&lt;li>Clarify code, variables, or functions that can be renamed or commented on&lt;/li>
&lt;li>Write test coverage&lt;/li>
&lt;li>Help triage issues&lt;/li>
&lt;/ul>
&lt;p>If the above suggestions don&amp;rsquo;t appeal to you, you can browse the
&lt;a href="https://go.k8s.io/good-first-issue">issues labeled as a good first issue&lt;/a> to see who is looking for help. Those interested
in contributing without writing code can also find ideas in the
&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/non-code-contributions/">Non-Code Contributions Guide&lt;/a>.&lt;/p>
&lt;p>&lt;em>Note&lt;/em>: although contributions are welcome, beware that every pull
request creates work for maintainers and costs for testing it.
Fixing &lt;em>linter warnings&lt;/em> is often &lt;em>not&lt;/em> worth it because the
existing code is fine. Always discuss with maintainers first
before creating such PRs.&lt;/p>
&lt;h3 id="find-a-good-first-topic">Find a good first topic&lt;/h3>
&lt;p>There are &lt;a href="https://github.com/kubernetes/">multiple repositories&lt;/a> within the Kubernetes organization.
Each repository has beginner-friendly issues that are a great place to
get started on your contributor journey. For example, &lt;a href="https://git.k8s.io/kubernetes">kubernetes/kubernetes&lt;/a> has
&lt;a href="https://go.k8s.io/help-wanted">help wanted&lt;/a> and &lt;a href="https://go.k8s.io/good-first-issue">good first issue&lt;/a> labels for issues that don&amp;rsquo;t need high-level
Kubernetes knowledge to contribute to. The &lt;code>good first issue&lt;/code> label also indicates
that Kubernetes Members have committed to providing &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/help-wanted/">extra assistance&lt;/a> for new
contributors. Another way to get started is to find a documentation improvement,
such as a missing/broken link, which will give you exposure to the code
submission/review process without the added complication of technical depth.&lt;/p>
&lt;h3 id="issue-assignment-in-github">Issue Assignment in Github&lt;/h3>
&lt;p>When you&amp;rsquo;ve found an issue to work on, you can assign it to yourself.&lt;/p>
&lt;ul>
&lt;li>Reply with &lt;code>/assign&lt;/code> or &lt;code>/assign @yourself&lt;/code> on the issue you&amp;rsquo;d like to work on&lt;/li>
&lt;li>The &lt;a href="https://github.com/k8s-ci-robot">K8s-ci-robot&lt;/a> will automatically assign the issue to you.&lt;/li>
&lt;li>Your name will then be listed under, &lt;code>Assignees&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="learn-about-sigs">Learn about SIGs&lt;/h2>
&lt;p>Some repositories in the Kubernetes Organization are owned by
[Special Interest Groups], or SIGs.&lt;/p>
&lt;p>The Kubernetes community is broken out into SIGs in order to improve its workflow,
and more easily manage what is a very large community project. The developers
within each SIG have autonomy and ownership over that SIG&amp;rsquo;s part of Kubernetes.
Understanding how to interact with SIGs is an important part of contributing
to Kubernetes. Check out the &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/community/community-groups/">list of SIGs&lt;/a> for contact information.&lt;/p>
&lt;h3 id="sig-structure">SIG structure&lt;/h3>
&lt;p>A SIG is an open, community effort.&lt;/p>
&lt;p>Anybody is welcome to jump into a SIG and begin fixing issues, critique design
proposals, and review code. SIGs have regular &lt;a href="https://kubernetes.io/community/">video meetings&lt;/a> which everyone
is welcome to attend. Each SIG has a Slack channel, meeting notes, and their own
documentation that is useful to read and understand. There is an entire SIG
(&lt;a href="https://github.com/kubernetes/community/blob/main/sig-contributor-experience/README.md">sig-contributor-experience&lt;/a>) devoted to improving your experience as a contributor.
If you have an idea for improving the contributor experience, please consider
attending one of the Contributor Experience SIG&amp;rsquo;s &lt;a href="https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/edit">weekly meetings&lt;/a>.&lt;/p>
&lt;h3 id="find-a-sig-that-is-related-to-your-contribution">Find a SIG that is related to your contribution&lt;/h3>
&lt;p>Finding the appropriate SIG for your contribution and adding a SIG label will
help you ask questions in the correct place and give your contribution higher
visibility and a faster community response.&lt;/p>
&lt;p>For Pull Requests, the automatically assigned reviewer will add a SIG label
if you haven&amp;rsquo;t already done so.&lt;/p>
&lt;p>For Issues, please note that the community is working on a more automated workflow.
Since SIGs do not directly map onto Kubernetes subrepositories, it may be
difficult to find which SIG your contribution belongs in. Review the
&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/community/community-groups/">list of SIGs&lt;/a> to determine which SIG is most likely related to your
contribution.&lt;/p>
&lt;p>&lt;em>Example:&lt;/em> if you are filing a CNI issue (that&amp;rsquo;s &lt;a href="https://github.com/containernetworking/cni">Container Networking Interface&lt;/a>)
you&amp;rsquo;d choose the &lt;a href="https://git.k8s.io/community/sig-network">Network SIG&lt;/a>. Add the SIG label in a new comment on GitHub
by typing the following:&lt;/p>
&lt;pre tabindex="0">&lt;code>/sig network
&lt;/code>&lt;/pre>&lt;p>Follow the link in the SIG name column to reach each SIG&amp;rsquo;s README.&lt;/p>
&lt;p>Most SIGs will have a set of GitHub Teams with tags that can be mentioned in a
comment on issues and pull requests for higher visibility. If you are not sure
about the correct SIG for an issue, you can try &lt;a href="https://github.com/kubernetes/community/blob/main/sig-contributor-experience/README.md">SIG-contributor-experience&lt;/a>,
or &lt;a href="http://slack.k8s.io/">ask in Slack&lt;/a>.&lt;/p>
&lt;h3 id="sig-specific-contributing-guidelines">SIG-specific contributing guidelines&lt;/h3>
&lt;p>Some SIGs have their own &lt;code>CONTRIBUTING.md&lt;/code> files, which may contain extra information
or guidelines in addition to these general ones. These are located in the SIG-specific
community directories:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/sig-apps/CONTRIBUTING.md">&lt;code>/sig-apps/CONTRIBUTING.md&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/sig-cli/CONTRIBUTING.md">&lt;code>/sig-cli/CONTRIBUTING.md&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/sig-multicluster/CONTRIBUTING.md">&lt;code>/sig-multicluster/CONTRIBUTING.md&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/sig-node/CONTRIBUTING.md">&lt;code>/sig-node/CONTRIBUTING.md&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/sig-storage/CONTRIBUTING.md">&lt;code>/sig-storage/CONTRIBUTING.md&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/sig-windows/CONTRIBUTING.md">&lt;code>/sig-windows/CONTRIBUTING.md&lt;/code>&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="file-an-issue">File an Issue&lt;/h3>
&lt;p>Not ready to contribute code, but see something that needs work?
While the community encourages everyone to contribute code, it is also appreciated
when someone reports an issue. Issues should be filed under the appropriate Kubernetes
subrepository. For example, a documentation issue should be opened in
&lt;a href="https://github.com/kubernetes/website/issues">kubernetes/website&lt;/a>. Make sure to adhere to the prompted submission guidelines
while opening an issue. Check the &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/">issue triage guide&lt;/a> for more information.&lt;/p></description></item><item><title>Docs: Contributing to Kubernetes</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/</guid><description>
&lt;h1 id="contributing">Contributing&lt;/h1>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/#communication">Communication&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/#github-workflow">GitHub workflow&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/#opening-a-pull-request">Open a Pull Request&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/#code-review">Code Review&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/#best-practices">Best Practices&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/#testing">Testing&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/#security">Security&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/#documentation">Documentation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/#issues-management-or-triage">Issues Management or Triage&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Kubernetes is open source, but many of the people working on it do so as their day job.
In order to avoid forcing people to be &amp;ldquo;at work&amp;rdquo; effectively 24/7, we want to establish some semi-formal protocols around development.
Hopefully, these rules make things go more smoothly.
If you find that this is not the case, please complain loudly.&lt;/p>
&lt;p>As a potential contributor, your changes and ideas are welcome at any hour of the day or night, weekdays, weekends, and holidays.
Please do not ever hesitate to ask a question or send a pull request.&lt;/p>
&lt;p>Check out our &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/expectations/#code-review">community guiding principles&lt;/a> on how to create great code as a big group.&lt;/p>
&lt;p>Beginner focused information can be found below in &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/#opening-a-pull-request">Open a Pull Request&lt;/a> and &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/#code-review">Code Review&lt;/a>.&lt;/p>
&lt;p>For quick reference on contributor resources, we have a handy &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/contributor-cheatsheet/">contributor cheatsheet&lt;/a>.&lt;/p>
&lt;h3 id="communication">Communication&lt;/h3>
&lt;p>It is best to contact your &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/first-contribution/#learn-about-sigs">SIG&lt;/a> for issues related to the SIG&amp;rsquo;s topic. Your SIG will be able to help you much more quickly than a general question would.&lt;/p>
&lt;p>For general questions and troubleshooting, use the &lt;a href="https://github.com/kubernetes/community/blob/main/communication/README.md">standard lines of communication&lt;/a> and work through the &lt;a href="https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/">troubleshooting guide&lt;/a>.&lt;/p>
&lt;h2 id="github-workflow">GitHub workflow&lt;/h2>
&lt;p>To check out code to work on, please refer to &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/github-workflow/">the GitHub Workflow Guide&lt;/a>.&lt;/p>
&lt;p>The full workflow for a pull request is documented here:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#the-testing-and-merge-workflow">Kubernetes-specific github workflow&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>That document is comprehensive and detailed, for purposes of a typical pull request we will cover the initial and simple use case here:&lt;/p>
&lt;h2 id="opening-a-pull-request">Opening a Pull Request&lt;/h2>
&lt;p>Pull requests are often called a &amp;ldquo;PR&amp;rdquo;.
Kubernetes generally follows the standard &lt;a href="https://help.github.com/articles/about-pull-requests/">github pull request&lt;/a> process, but there is a layer of additional kubernetes specific (and sometimes SIG specific) differences:&lt;/p>
&lt;p>The first difference you&amp;rsquo;ll see is that a bot will begin applying structured labels to your PR.&lt;/p>
&lt;p>The bot may also make some helpful suggestions for commands to run in your PR to facilitate review.&lt;br>
These &lt;code>/command&lt;/code> options can be entered in comments to trigger auto-labeling and notifications.
Refer to its &lt;a href="https://go.k8s.io/bot-commands">command reference documentation&lt;/a>.&lt;/p>
&lt;p>Common new contributor PR issues are:&lt;/p>
&lt;ul>
&lt;li>Not having correctly signed the CLA ahead of your first PR. See the &lt;a href="https://github.com/kubernetes/community/blob/main/CLA.md">CLA page&lt;/a> for troubleshooting help, in some cases you might need to file a ticket with the CNCF to resolve a CLA problem.&lt;/li>
&lt;li>Finding the right SIG or reviewer(s) for the PR (see &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/#code-review">Code Review&lt;/a> section) and following any SIG or repository specific contributing guidelines (see &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/first-contribution/#learn-about-sigs">Learn about SIGs&lt;/a> section)&lt;/li>
&lt;li>Dealing with test cases which fail on your PR, unrelated to the changes you introduce (see &lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-testing/flaky-tests.md">Test Flakes&lt;/a>)&lt;/li>
&lt;li>Not following &lt;a href="https://github.com/kubernetes/community/blob/main/contributors/guide/scalability-good-practices.md">scalability good practices&lt;/a>&lt;/li>
&lt;li>Include mentions (like @person) and &lt;a href="https://help.github.com/en/articles/closing-issues-using-keywords">keywords&lt;/a> which could close the issue (like fixes #xxxx) in commit messages.&lt;/li>
&lt;/ul>
&lt;h2 id="code-review">Code Review&lt;/h2>
&lt;p>For a brief description of the importance of code review, please read &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/expectations/#code-review">On Code Review&lt;/a>.&lt;br>
There are two aspects of code review: giving and receiving.&lt;/p>
&lt;p>To make it easier for your PR to receive reviews, consider the reviewers will need you to:&lt;/p>
&lt;ul>
&lt;li>Follow the project &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/coding-convention/">coding conventions&lt;/a>&lt;/li>
&lt;li>Write &lt;a href="https://chris.beams.io/posts/git-commit/">good commit messages&lt;/a>&lt;/li>
&lt;li>Break large changes into a logical series of smaller patches which individually make easily understandable changes, and in aggregate solve a broader issue&lt;/li>
&lt;li>Label PRs with appropriate SIGs and reviewers: to do this read the messages the bot sends you to guide you through the PR process&lt;/li>
&lt;/ul>
&lt;p>Reviewers, the people giving the review, are highly encouraged to revisit the &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/includes/cncf-code-of-conduct/">Code of Conduct&lt;/a> as well as &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/expectations/#expectations-of-reviewers-review-latency">community expectations&lt;/a> and must go above and beyond to promote a collaborative, respectful community.
When reviewing PRs from others &lt;a href="http://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/">The Gentle Art of Patch Review&lt;/a> suggests an iterative series of focuses which is designed to lead new contributors to positive collaboration without inundating them initially with nuances:&lt;/p>
&lt;ul>
&lt;li>Is the idea behind the contribution sound?&lt;/li>
&lt;li>Is the contribution architected correctly?&lt;/li>
&lt;li>Is the contribution polished?&lt;/li>
&lt;/ul>
&lt;p>Note: if your pull request isn&amp;rsquo;t getting enough attention, you can use the &lt;a href="https://kubernetes.slack.com/messages/pr-reviews">#pr-reviews&lt;/a> channel on Slack to get help finding reviewers.&lt;/p>
&lt;h2 id="best-practices">Best practices&lt;/h2>
&lt;ul>
&lt;li>Write clear and meaningful git commit messages.&lt;/li>
&lt;li>If the PR will &lt;em>completely&lt;/em> fix a specific issue, include &lt;code>fixes #123&lt;/code> in the PR body (where 123 is the specific issue number the PR will fix. This will automatically close the issue when the PR is merged.&lt;/li>
&lt;li>Make sure you don&amp;rsquo;t include &lt;code>@mentions&lt;/code> or &lt;code>fixes&lt;/code> keywords in your git commit messages. These should be included in the PR body instead.&lt;/li>
&lt;li>When you make a PR for small change (such as fixing a typo, style change, or grammar fix), please squash your commits so that we can maintain a cleaner git history.&lt;/li>
&lt;li>Make sure you include a clear and detailed PR description explaining the reasons for the changes, and ensuring there is sufficient information for the reviewer to understand your PR.&lt;/li>
&lt;li>Additional Readings:
&lt;ul>
&lt;li>&lt;a href="https://chris.beams.io/posts/git-commit/">chris.beams.io/posts/git-commit/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/blog/1506-closing-issues-via-pull-requests">github.com/blog/1506-closing-issues-via-pull-requests &lt;/a>&lt;/li>
&lt;li>&lt;a href="https://davidwalsh.name/squash-commits-git">davidwalsh.name/squash-commits-git &lt;/a>&lt;/li>
&lt;li>&lt;a href="https://mtlynch.io/code-review-love/">https://mtlynch.io/code-review-love/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="testing">Testing&lt;/h2>
&lt;p>Testing is the responsibility of all contributors and is in part owned by all SIGs, but is also coordinated by &lt;a href="https://github.com/kubernetes/community/blob/main/sig-testing">sig-testing&lt;/a>.
Refer to the &lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-testing/testing.md">Testing Guide&lt;/a> for more information.&lt;/p>
&lt;p>There are multiple types of tests.
The location of the test code varies with type, as do the specifics of the environment needed to successfully run the test:&lt;/p>
&lt;ul>
&lt;li>Unit: These confirm that a particular function behaves as intended. Golang includes a native ability for unit testing via the &lt;a href="https://golang.org/pkg/testing/">testing&lt;/a> package. Unit test source code can be found adjacent to the corresponding source code within a given package. For example: functions defined in &lt;a href="https://git.k8s.io/kubernetes/cmd/kubeadm/app/util/version.go">kubernetes/cmd/kubeadm/app/util/version.go&lt;/a> will have unit tests in &lt;a href="https://git.k8s.io/kubernetes/cmd/kubeadm/app/util/version_test.go">kubernetes/cmd/kubeadm/app/util/version_test.go&lt;/a>. These are easily run locally by any developer on any OS.&lt;/li>
&lt;li>Integration: These tests cover interactions of package components or interactions between kubernetes components and some other non-kubernetes system resource (eg: etcd). An example would be testing whether a piece of code can correctly store data to or retrieve data from etcd. Integration tests are stored in &lt;a href="https://git.k8s.io/kubernetes/test/integration">kubernetes/test/integration/&lt;/a>. Running these can require the developer set up additional functionality on their development system.&lt;/li>
&lt;li>End-to-end (&amp;ldquo;e2e&amp;rdquo;): These are broad tests of overall system behavior and coherence. These are more complicated as they require a functional kubernetes cluster built from the sources to be tested. A separate &lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-testing/e2e-tests.md">document detailing e2e testing&lt;/a> and test cases themselves can be found in &lt;a href="https://git.k8s.io/kubernetes/test/e2e">kubernetes/test/e2e/&lt;/a>.&lt;/li>
&lt;li>Conformance: These are a set of testcases, currently a subset of the integration/e2e tests, that the Architecture SIG has approved to define the core set of interoperable features that all Kubernetes deployments must support. For more information on Conformance tests please see the &lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-architecture/conformance-tests.md">Conformance Testing&lt;/a> Document.&lt;/li>
&lt;/ul>
&lt;p>Continuous integration will run these tests either as pre-submits on PRs, post-submits against master/release branches, or both.&lt;br>
The results appear on &lt;a href="https://testgrid.k8s.io">testgrid&lt;/a>.&lt;/p>
&lt;p>sig-testing is responsible for that official infrastructure and CI.
The associated automation is tracked in the &lt;a href="https://git.k8s.io/test-infra">test-infra repo&lt;/a>.
If you&amp;rsquo;re looking to run e2e tests on your own infrastructure, &lt;a href="https://git.k8s.io/test-infra/kubetest">kubetest&lt;/a> is the mechanism.&lt;/p>
&lt;h2 id="security">Security&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://git.k8s.io/security/security-release-process.md">Security Release Page&lt;/a> - outlines the procedures for the handling of security issues.&lt;/li>
&lt;li>&lt;a href="https://kubernetes.io/docs/reference/issues-security/security/">Security and Disclosure Information&lt;/a> - check this page if you wish to report a security vulnerability.&lt;/li>
&lt;/ul>
&lt;h2 id="documentation">Documentation&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://kubernetes.io/editdocs/">Contributing to Documentation&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="issues-management-or-triage">Issues Management or Triage&lt;/h2>
&lt;p>Have you ever noticed the total number of &lt;a href="https://issues.k8s.io">open issues&lt;/a>?
Helping to manage or triage these open issues can be a great contribution and a great opportunity to learn about the various areas of the project.
Triaging is the word we use to describe the process of adding multiple types of descriptive labels to GitHub issues, in order to speed up routing issues to the right folks.
Refer to the &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/">Issue Triage Guidelines&lt;/a> for more information.&lt;/p></description></item><item><title>Docs: Platforms Guide</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/platforms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/platforms/</guid><description>
&lt;h2 id="adding-supported-platforms">Adding supported platforms&lt;/h2>
&lt;p>The default Kubernetes platform is &lt;code>linux/amd64&lt;/code>. This platform has always been
fully tested, and the build and release systems initially supported only this
platform. SIG Release started an &lt;a href="https://github.com/kubernetes/kubernetes/issues/38067">effort to support multiple architectures&lt;/a>.
As part of this effort, they added support in our build and release pipelines
for the architectures &lt;code>arm&lt;/code>, &lt;code>arm64&lt;/code>, &lt;code>ppc64le&lt;/code> and &lt;code>s390x&lt;/code> on different
operating systems like Linux, Windows and macOS.&lt;/p>
&lt;p>The main focus was to have binaries and container images to be available for
these architectures/operating systems. Contributors should be able to to take
these artifacts and set up CI jobs to adequately test these platforms.
Specifically to call out the ability to run conformance tests on these
platforms.&lt;/p>
&lt;p>Target of this document is to provide a starting point for adding new platforms
to Kubernetes from a SIG Architecture and SIG Release perspective. This does not
include release mechanics or supportability in terms of functionality.&lt;/p>
&lt;h3 id="step-0-engage-with-the-community">Step 0: Engage with the community&lt;/h3>
&lt;p>The first step is to express the interest in adding a new platform or promoting
one into a different Tier. This can be done by opening a GitHub issue in the
&lt;a href="https://github.com/kubernetes/sig-release/issues">SIG Release repository&lt;/a>,
attending the weekly SIG Release meetings or writing a message to the &lt;a href="https://groups.google.com/g/kubernetes-sig-release">SIG
Release mailing list&lt;/a>.&lt;/p>
&lt;p>The ultimate decision to approve or reject a platform will be done in the
community as part of the standard lazy consensus. Even if all mentioned
requirements for a platform are being met, it&amp;rsquo;s possible that external
dependencies, infrastructure costs or anything else have influence on the
maintainability of the platform.&lt;/p>
&lt;h3 id="step-1-building">Step 1: Building&lt;/h3>
&lt;p>The container image based build infrastructure should support this architecture.
This implicitly requires the following:&lt;/p>
&lt;ul>
&lt;li>golang should support the platform&lt;/li>
&lt;li>All dependencies, whether vendored or run separately, should support this
platform&lt;/li>
&lt;/ul>
&lt;p>In other words, anyone in the community should be able to use the SIG Release
provided build tooling to generate all artifacts required to build Kubernetes.&lt;/p>
&lt;p>More information about how to build Kubernetes can be found in &lt;a href="https://github.com/kubernetes/kubernetes/tree/3f7c09e/build#building-kubernetes">the build
documentation&lt;/a>.&lt;/p>
&lt;h3 id="step-2-testing">Step 2: Testing&lt;/h3>
&lt;p>It is not enough for builds to work as it gets bit-rotted quickly when vendoring
in in new changes, update versions of things to be used etc. This means the
project need a good set of tests that exercise a wide battery of jobs in this
new architecture.&lt;/p>
&lt;p>A good starting point from a testing perspective are:&lt;/p>
&lt;ul>
&lt;li>unit tests&lt;/li>
&lt;li>e2e tests&lt;/li>
&lt;li>node e2e tests&lt;/li>
&lt;/ul>
&lt;p>This will ensure that community members can rely on these architectures on a
consistent basis, which will give folks who are making changes a signal when
they break things in a specific architecture.&lt;/p>
&lt;p>This implies a set of folks who stand up and maintain both post-submit and
periodic tests, watch them closely and raise the flag when things break. They
will also have to help debug and fix any platform specific issues as well.&lt;/p>
&lt;p>Creating custom &lt;a href="https://testgrid.k8s.io">testgrid&lt;/a> dashboards can help to monitor platform specific
tests.&lt;/p>
&lt;h3 id="step-3-releasing">Step 3: Releasing&lt;/h3>
&lt;p>The first 2 steps provide a reasonable expectation that there are people taking
care of a supported platform and it works in a reproducible environment.&lt;/p>
&lt;p>Getting to the next level is another big jump, because it needs to be ensured
that real users can rely on the shipped artifacts.&lt;/p>
&lt;p>This means specifically to add a set of CI jobs to the release-informing and
release-blocking tabs of testgrid. The Kubernetes release team has a &amp;ldquo;CI signal&amp;rdquo;
group that relies on the status(es) of these jobs to either ship or hold a
release. Essentially, if things are mostly red with occasional green, it would
be prudent to not even bother making this architecture as part of the release.
CI jobs get added to release-informing first and when these get to a point where
they work really well, then they get promoted to release-blocking.&lt;/p>
&lt;p>The main problem here is once the project starts to ship something, users will
start to rely on it. While it&amp;rsquo;s straight forward to setup a CI job as a one time
thing, it&amp;rsquo;s a totally one to consistently maintain them over time. What SIG
Release is looking for is a strong green CI signal for release managers to cut a
release and for folks to be able to report problems and them getting addressed.
This also includes &lt;a href="https://github.com/cncf/k8s-conformance">conformance testing&lt;/a> to ensure that the supported
platform behaves as intended. This can be done by working with SIG Architecture
as part of the &lt;a href="https://github.com/kubernetes/community/tree/master/sig-architecture#conformance-definition">conformance sub project&lt;/a> in addition to testing and release.&lt;/p>
&lt;h3 id="step-4-finishing">Step 4: Finishing&lt;/h3>
&lt;p>If you got this far, you really have made it! You have a clear engagement with
the community, you are working seamlessly with all the relevant SIGs, you have
your content in the Kubernetes release and get end users to adopt your
architecture. Having achieved conformance, you will gain conditional use of the
Kubernetes trademark relative to your offerings.&lt;/p>
&lt;h2 id="deprecating-and-removing-supported-platforms">Deprecating and removing supported platforms&lt;/h2>
&lt;p>Supported platforms may be considered as deprecated for various reasons, for
example if they are being replaced by new ones, are not actively used or
maintained any more. Deprecating an already supported platform has to follow a
couple of steps:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>The platform deprecation has been announced on the &lt;a href="https://groups.google.com/g/kubernetes-announce">Kubernetes Announce
mailing list&lt;/a>
and links to an Kubernetes GitHub issue for further discussions and consensus.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The deprecation will be active immediately after consensus has been reached
at a set deadline. This incorporates approval from SIG Release and
Architecture.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Removing the supported platform will be done in the beginning of the next
minor (v1.N+1.0) release cycle, which means to:&lt;/p>
&lt;ul>
&lt;li>Update the Kubernetes build scripts to exclude the platform from all targets&lt;/li>
&lt;li>Update the &lt;a href="https://github.com/kubernetes/sig-release">kubernetes/sig-release&lt;/a>
repository to reflect the current set of supported platforms.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>Please note that actively supported release branches are not affected by the
removal. This ensures compatibility with existing artifact consumers on a best
effort basis.&lt;/p></description></item><item><title>Docs: Pull Request Process</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/</guid><description>
&lt;p>This doc explains the process and best practices for submitting a pull request to the &lt;a href="https://github.com/kubernetes/kubernetes">Kubernetes project&lt;/a> and its associated sub-repositories.
It should serve as a reference for all contributors, and be useful especially to new and infrequent submitters.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#before-you-submit-a-pull-request">Before You Submit a Pull Request&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#run-local-verifications">Run Local Verifications&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#the-pull-request-submit-process">The Pull Request Submit Process&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#marking-unfinished-pull-requests">Marking Unfinished Pull Requests&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#pull-requests-and-the-release-cycle">Pull Requests and the Release Cycle&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#comment-commands-reference">Comment Commands Reference&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#automation">Automation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#how-the-e2e-tests-work">How the e2e Tests Work&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#why-was-my-pull-request-closed">Why was my pull request closed?&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#why-is-my-pull-request-not-getting-reviewed">Why is my pull request not getting reviewed?&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#best-practices-for-faster-reviews">Best Practices for Faster Reviews&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#familiarize-yourself-with-project-conventions">Familiarize yourself with project conventions&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#is-the-feature-wanted-file-a-kubernetes-enhancement-proposal">Is the feature wanted? File a Kubernetes Enhancement Proposal&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#kiss-yagni-mvp-etc">KISS, YAGNI, MVP, etc.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#smaller-is-better-small-commits-small-pull-requests">Smaller Is Better: Small Commits, Small Pull Requests&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#open-a-different-pull-request-for-fixes-and-generic-features">Open a Different Pull Request for Fixes and Generic Features&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#dont-open-pull-requests-that-span-the-whole-repository">Don&amp;rsquo;t Open Pull Requests That Span the Whole Repository&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#comments-matter">Comments Matter&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#test">Test&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#squashing">Squashing&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#commit-message-guidelines">Commit Message Guidelines&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#its-ok-to-push-back">It&amp;rsquo;s OK to Push Back&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#common-sense-and-courtesy">Common Sense and Courtesy&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#trivial-edits">Trivial Edits&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#large-or-automatic-edits">Large or Automatic Edits&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#fixing-linter-issues">Fixing Linter Issues&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#ai-guidance">AI Guidance&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#the-testing-and-merge-workflow">The Testing and Merge Workflow&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#more-about-ok-to-test">More About &lt;code>Ok-To-Test&lt;/code>&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h1 id="before-you-submit-a-pull-request">Before You Submit a Pull Request&lt;/h1>
&lt;p>This guide is for contributors who already have a pull request to submit.
If you&amp;rsquo;re looking for information on setting up your developer environment and creating code to contribute to Kubernetes, see the &lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/development.md">development guide&lt;/a>.&lt;/p>
&lt;p>First-time contributors should head to the &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/">Contributor Guide&lt;/a> to get started.&lt;/p>
&lt;p>&lt;strong>Make sure your pull request adheres to our best practices.
These include following project conventions, making small pull requests, and commenting thoroughly. Please read the more detailed section on &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#best-practices-for-faster-reviews">Best Practices for Faster Reviews&lt;/a> at the end of this doc.&lt;/strong>&lt;/p>
&lt;h2 id="run-local-verifications">Run Local Verifications&lt;/h2>
&lt;p>You can run these local verifications before you submit your pull request to predict the pass or fail of continuous integration.&lt;/p>
&lt;ul>
&lt;li>Run and pass &lt;code>make verify&lt;/code> (can take 30-40 minutes)&lt;/li>
&lt;li>Run and pass &lt;code>make test&lt;/code>&lt;/li>
&lt;li>Run and pass &lt;code>make test-integration&lt;/code>&lt;/li>
&lt;/ul>
&lt;h1 id="the-pull-request-submit-process">The Pull Request Submit Process&lt;/h1>
&lt;p>Merging a pull request requires the following steps to be completed before the pull request will be merged automatically.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://help.github.com/articles/about-pull-requests/">Open a pull request&lt;/a>
&lt;ul>
&lt;li>&lt;em>For kubernetes/kubernetes repository only:&lt;/em> Add &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/release-notes/">release notes&lt;/a> if needed.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Follow the EasyCLA steps to &lt;a href="https://git.k8s.io/community/CLA.md">sign the CLA&lt;/a> (prerequisite)&lt;/li>
&lt;li>Pass all e2e tests&lt;/li>
&lt;li>Get all necessary approvals from reviewers and code owners&lt;/li>
&lt;/ul>
&lt;h2 id="marking-unfinished-pull-requests">Marking Unfinished Pull Requests&lt;/h2>
&lt;p>If you want to solicit reviews before the implementation of your pull request is complete, you should hold your pull request to ensure that Tide does not pick it up and attempt to merge it.
There are two methods to achieve this:&lt;/p>
&lt;ol>
&lt;li>You may add the &lt;code>/hold&lt;/code> or &lt;code>/hold cancel&lt;/code> comment commands&lt;/li>
&lt;li>You may add or remove a &lt;code>WIP&lt;/code> or &lt;code>[WIP]&lt;/code> prefix to your pull request title&lt;/li>
&lt;/ol>
&lt;p>The GitHub robots will add and remove the &lt;code>do-not-merge/hold&lt;/code> label as you use the comment commands and the &lt;code>do-not-merge/work-in-progress&lt;/code> label as you edit your title.
While either label is present, your pull request will not be considered for merging.&lt;/p>
&lt;h2 id="pull-requests-and-the-release-cycle">Pull Requests and the Release Cycle&lt;/h2>
&lt;p>If a pull request has been reviewed but held or not approved, it might be due to the current phase in the &lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-release/release.md">Release Cycle&lt;/a>.
Occasionally, a SIG may freeze their own code base when working towards a specific feature or goal that could impact other development.
During this time, your pull request could remain unmerged while their release work is completed.&lt;/p>
&lt;p>If you feel your pull request is in this state, contact the appropriate &lt;a href="https://git.k8s.io/community/sig-list.md">SIG&lt;/a> or &lt;a href="https://git.k8s.io/sig-release">SIG-Release&lt;/a> for clarification.&lt;/p>
&lt;p>Check the &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#the-testing-and-merge-workflow">The Testing and Merge Workflow&lt;/a> at the end of this document if you&amp;rsquo;re interested in the details on how exactly the automation processes pull requests.&lt;/p>
&lt;h2 id="comment-commands-reference">Comment Commands Reference&lt;/h2>
&lt;p>&lt;a href="https://go.k8s.io/bot-commands">The commands doc&lt;/a> contains a reference for all comment commands.&lt;/p>
&lt;h2 id="automation">Automation&lt;/h2>
&lt;p>The Kubernetes developer community uses a variety of automation to manage pull requests.
This automation is described in detail &lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/automation.md">in the automation doc&lt;/a>.&lt;/p>
&lt;h2 id="how-the-e2e-tests-work">How the e2e Tests Work&lt;/h2>
&lt;p>The end-to-end tests will post the status results to the pull request.
If an e2e test fails, &lt;code>@k8s-ci-robot&lt;/code> will comment on the pull request with the test history and the comment-command to re-run that test. e.g.&lt;/p>
&lt;blockquote>
&lt;p>The following tests failed, say /retest to rerun them all.&lt;/p>
&lt;/blockquote>
&lt;h1 id="why-was-my-pull-request-closed">Why was my pull request closed?&lt;/h1>
&lt;p>Pull requests older than 90 days will be closed.
Exceptions can be made for pull requests that have active review comments, or that are awaiting other dependent pull requests.
Closed pull requests are easy to recreate, and little work is lost by closing a pull request that subsequently needs to be reopened.
We want to limit the total number of pull requests in flight to:&lt;/p>
&lt;ul>
&lt;li>Maintain a clean project&lt;/li>
&lt;li>Remove old pull requests that would be difficult to rebase as the underlying code has changed over time&lt;/li>
&lt;li>Encourage code velocity&lt;/li>
&lt;/ul>
&lt;h1 id="why-is-my-pull-request-not-getting-reviewed">Why is my pull request not getting reviewed?&lt;/h1>
&lt;p>A few factors affect how long your pull request might wait for review.&lt;/p>
&lt;p>If it&amp;rsquo;s the last few weeks of a milestone, we need to reduce churn and stabilize.&lt;/p>
&lt;p>Or, it could be related to best practices.
One common issue is that the pull request is too big to review.
Let&amp;rsquo;s say you&amp;rsquo;ve touched 39 files and have 8657 insertions.
When your would-be reviewers pull up the diffs, they run away - this pull request is going to take 4 hours to review and they don&amp;rsquo;t have 4 hours right now.
They&amp;rsquo;ll get to it later, just as soon as they have more free time (ha!).&lt;/p>
&lt;p>There is a detailed rundown of best practices, including how to avoid too-lengthy pull requests, in the next section.&lt;/p>
&lt;p>But, if you&amp;rsquo;ve already followed the best practices and you still aren&amp;rsquo;t getting any pull request love, here are some things you can do to move the process along:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Make sure that your pull request has an assigned reviewer (assignee in GitHub). If not, reply to the pull request comment stream asking for a reviewer to be assigned. This is done via a &lt;a href="https://prow.k8s.io/command-help">bot command&lt;/a> (the bot may have suggestions for this) and looks like this: &lt;code>/assign @username&lt;/code>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Ping the assignee (@username) on the pull request comment stream, and ask for an estimate of when they can get to the review.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Ping the assignee on &lt;a href="http://slack.kubernetes.io">Slack&lt;/a>. Remember that a person&amp;rsquo;s GitHub username might not be the same as their Slack username.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Ping the assignee by email (many of us have publicly available email addresses).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>If you&amp;rsquo;re a member of the organization ping the &lt;a href="https://github.com/orgs/kubernetes/teams">team&lt;/a> (via @team-name) that works in the area you&amp;rsquo;re submitting code to.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>If you have fixed all the issues from a review, and you haven&amp;rsquo;t heard back, you should ping the assignee on the comment stream with a &amp;ldquo;please take another look&amp;rdquo; (&lt;code>PTAL&lt;/code>) or similar comment indicating that you are ready for another review.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>If you still don&amp;rsquo;t hear back, post a link to the pull request in the &lt;code>#pr-reviews&lt;/code> channel on Slack to find additional reviewers.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Read on to learn more about how to get faster reviews by following best practices.&lt;/p>
&lt;h1 id="best-practices-for-faster-reviews">Best Practices for Faster Reviews&lt;/h1>
&lt;p>Most of this section is not specific to Kubernetes, but it&amp;rsquo;s good to keep these best practices in mind when you&amp;rsquo;re making a pull request.&lt;/p>
&lt;p>You&amp;rsquo;ve just had a brilliant idea on how to make Kubernetes better.
Let&amp;rsquo;s call that idea Feature-X.
Feature-X is not even that complicated.
You have a pretty good idea of how to implement it.
You jump in and implement it, fixing a bunch of stuff along the way.
You send your pull request - this is awesome!
And it sits.
And sits.
A week goes by and nobody reviews it.
Finally, someone offers a few comments, which you fix up and wait for more review. And you wait.
Another week or two go by. This is horrible.&lt;/p>
&lt;p>Let&amp;rsquo;s talk about best practices so your pull request gets reviewed quickly.&lt;/p>
&lt;h2 id="familiarize-yourself-with-project-conventions">Familiarize yourself with project conventions&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/development.md">Development guide&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/coding-convention/">Coding conventions&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-architecture/api-conventions.md">API conventions&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-cli/kubectl-conventions.md">Kubectl conventions&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="is-the-feature-wanted-file-a-kubernetes-enhancement-proposal">Is the feature wanted? File a Kubernetes Enhancement Proposal&lt;/h2>
&lt;p>Are you sure Feature-X is something the Kubernetes team wants or will accept?
Is it implemented to fit with other changes in flight?
Are you willing to bet a few days or weeks of work on it?&lt;/p>
&lt;p>It&amp;rsquo;s better to get confirmation beforehand.&lt;/p>
&lt;p>When you want to make a large or otherwise significant change, you should follow the &lt;a href="https://github.com/kubernetes/enhancements/blob/master/keps/sig-architecture/0000-kep-process/README.md">Kubernetes Enhancement Proposal process&lt;/a>.&lt;/p>
&lt;p>Even for small changes, it is often a good idea to gather feedback on an issue you filed, or even simply ask in the appropriate SIG&amp;rsquo;s Slack channel to invite discussion and feedback from code owners.
Here&amp;rsquo;s a &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/community/community-groups/">list of SIGs&lt;/a>, this includes their public meetings.&lt;/p>
&lt;h2 id="kiss-yagni-mvp-etc">KISS, YAGNI, MVP, etc.&lt;/h2>
&lt;p>Sometimes we need to remind each other of core tenets of software design - Keep It Simple, You Aren&amp;rsquo;t Gonna Need It, Minimum Viable Product, and so on.
Adding a feature &amp;ldquo;because we might need it later&amp;rdquo; is antithetical to software that ships.
Add the things you need NOW and (ideally) leave room for things you might need
later - but don&amp;rsquo;t implement them now.&lt;/p>
&lt;h2 id="smaller-is-better-small-commits-small-pull-requests">Smaller Is Better: Small Commits, Small Pull Requests&lt;/h2>
&lt;p>Small commits and small pull requests get reviewed faster and are more likely to be correct than big ones.&lt;/p>
&lt;p>Attention is a scarce resource.
If your pull request takes 60 minutes to review, the reviewer&amp;rsquo;s eye for detail is not as keen in the last 30 minutes as it was in the first.
It might not get reviewed at all if it requires a large continuous block of time from the reviewer.&lt;/p>
&lt;p>&lt;strong>Breaking up commits&lt;/strong>&lt;/p>
&lt;p>Break up your pull request into multiple commits, at logical break points.&lt;/p>
&lt;p>Making a series of discrete commits is a powerful way to express the evolution of an idea or the different ideas that make up a single feature.
Strive to group logically distinct ideas into separate commits.&lt;/p>
&lt;p>For example, if you found that Feature-X needed some prefactoring to fit in, make a commit that JUST does that prefactoring.
Then make a new commit for Feature-X.&lt;/p>
&lt;p>Strike a balance with the number of commits.
A pull request with 25 commits is still very cumbersome to review, so use your best judgment.&lt;/p>
&lt;p>&lt;strong>Breaking up Pull Requests&lt;/strong>&lt;/p>
&lt;p>Or, going back to our prefactoring example, you could also fork a new branch, do the prefactoring there and send a pull request for that.
If you can extract whole ideas from your pull request and send those as pull requests of their own, you can avoid the painful problem of continually rebasing.&lt;/p>
&lt;p>Kubernetes is a fast-moving codebase - lock in your changes ASAP with your small pull request, and make merges be someone else&amp;rsquo;s problem.&lt;/p>
&lt;p>Multiple small pull requests are often better than multiple commits.
Don&amp;rsquo;t worry about flooding us with pull requests. We&amp;rsquo;d rather have 100 small,obvious pull requests than 10 unreviewable monoliths.&lt;/p>
&lt;p>We want every pull request to be useful on its own, so use your best judgment on what should be a pull request vs. a commit.&lt;/p>
&lt;p>As a rule of thumb, if your pull request is directly related to Feature-X and nothing else, it should probably be part of the Feature-X pull request.
If you can explain why you are doing seemingly no-op work (&amp;ldquo;it makes the Feature-X change easier, I promise&amp;rdquo;) we&amp;rsquo;ll probably be OK with it.
If you can imagine someone finding value independently of Feature-X, try it as a pull request.
(Do not link pull requests by &lt;code>#&lt;/code> in a commit description, because GitHub creates lots of spam.
Instead, reference other pull requests via the pull request your commit is in.)&lt;/p>
&lt;h2 id="open-a-different-pull-request-for-fixes-and-generic-features">Open a Different Pull Request for Fixes and Generic Features&lt;/h2>
&lt;p>&lt;strong>Put changes that are unrelated to your feature into a different pull request.&lt;/strong>&lt;/p>
&lt;p>Often, as you are implementing Feature-X, you will find bad comments, poorly named functions, bad structure, weak type-safety, etc.&lt;/p>
&lt;p>You absolutely should fix those things (or at least file issues, please) - but not in the same pull request as your feature. Otherwise, your diff will have way too many changes, and your reviewer won&amp;rsquo;t see the forest for the trees.&lt;/p>
&lt;p>&lt;strong>Look for opportunities to pull out generic features.&lt;/strong>&lt;/p>
&lt;p>For example, if you find yourself touching a lot of modules, think about the dependencies you are introducing between packages.
Can some of what you&amp;rsquo;re doing be made more generic and moved up and out of the Feature-X package?
Do you need to use a function or type from an otherwise unrelated package?
If so, promote!
We have places for hosting more generic code.&lt;/p>
&lt;p>Likewise, if Feature-X is similar in form to Feature-W which was checked in last month, and you&amp;rsquo;re duplicating some tricky stuff from Feature-W, consider prefactoring the core logic out and using it in both Feature-W and
Feature-X.
(Do that in its own commit or pull request, please.)&lt;/p>
&lt;h2 id="dont-open-pull-requests-that-span-the-whole-repository">Don&amp;rsquo;t Open Pull Requests That Span the Whole Repository&lt;/h2>
&lt;p>Often a new contributor will find some problem that exists in many places across the main
&lt;code>kubernetes/kubernetes&lt;/code> repository, and file a PR to fix it everywhere at once. Maybe
there&amp;rsquo;s a cool new function in the latest golang release that everyone ought to be using,
or a recently-deprecated function that ought to be replaced with calls to its replacement.
Sometimes a contributor will run a linter or security scanner across the code to find
problems, or fix a particular spelling mistake in comments or variable names. (It&amp;rsquo;s
&amp;ldquo;deprecated&amp;rdquo;, not &amp;ldquo;depreciated&amp;rdquo;!)&lt;/p>
&lt;p>The problem with this approach is that different parts of &lt;code>kubernetes/kubernetes&lt;/code> are
maintained by different SIGs, and so changes to those different parts require approvals
from different people. A PR containing 20 one-line changes scattered across the repository
could end up needing 5 or 10 approvals or more before it can be merged. (While there are a
handful of people who can approve changes across large portions of the repository, those
are generally the people who are the most busy and hardest to get reviews from, especially
when you&amp;rsquo;re a new contributor with no connections within the community yet.)&lt;/p>
&lt;p>The effort required to review such sweeping changes might not be worth it, see
&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#large-or-automatic-edits">&amp;ldquo;large or automatic edits&amp;rdquo;&lt;/a> below.&lt;/p>
&lt;p>If you really want to try to get such a PR merged, your best bet is to break up the PR
into separate PRs for each SIG whose code it touches. You can look at the &lt;code>OWNERS&lt;/code> files
in a directory (or its parent directory) to see who owns that code, and then group the
changes together accordingly (e.g., with one PR touching files in &lt;code>cmd/kube-proxy&lt;/code> and
&lt;code>pkg/util/iptables&lt;/code>, which are owned by SIG Network, and another PR touching files in
&lt;code>pkg/kubelet&lt;/code> and &lt;code>pkg/controller/nodelifecycle&lt;/code>, which are owned by SIG Node.)&lt;/p>
&lt;h2 id="comments-matter">Comments Matter&lt;/h2>
&lt;p>In your code, if someone might not understand why you did something (or you won&amp;rsquo;t remember why later), comment it. Many code-review comments are about this exact issue.&lt;/p>
&lt;p>If you think there&amp;rsquo;s something pretty obvious that we could follow up on, add a TODO.&lt;/p>
&lt;p>Read up on &lt;a href="https://blog.golang.org/godoc-documenting-go-code">GoDoc&lt;/a> - follow those general rules for comments.&lt;/p>
&lt;h2 id="test">Test&lt;/h2>
&lt;p>Nothing is more frustrating than starting a review, only to find that the tests are inadequate or absent.
Very few pull requests can touch the code and NOT touch tests.&lt;/p>
&lt;p>If you don&amp;rsquo;t know how to test Feature-X, please ask!
We&amp;rsquo;ll be happy to help you design things for easy testing or to suggest appropriate test cases.&lt;/p>
&lt;h2 id="squashing">Squashing&lt;/h2>
&lt;p>Your reviewer has finally sent you feedback on Feature-X.&lt;/p>
&lt;p>Make the fixups, and don&amp;rsquo;t squash yet.
Put them in a new commit, and re-push.
That way your reviewer can look at the new commit on its own, which is much faster than starting over.&lt;/p>
&lt;p>We might still ask you to clean up your commits at the very end for the sake of a more readable history, but don&amp;rsquo;t do this until asked: typically at the point where the pull request would otherwise be tagged &lt;code>LGTM&lt;/code>.&lt;/p>
&lt;p>Each commit should have a good title line (&amp;lt;70 characters) and include an additional description paragraph describing in more detail the change intended.&lt;/p>
&lt;p>For more information, see &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/github-workflow/#squash-commits">squash commits&lt;/a>.&lt;/p>
&lt;p>&lt;strong>General squashing guidelines:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Sausage =&amp;gt; squash&lt;/li>
&lt;/ul>
&lt;p>Do squash when there are several commits to fix bugs in the original commit(s), address reviewer feedback, etc.
Really we only want to see the end state, and commit message for the whole pull request.&lt;/p>
&lt;ul>
&lt;li>Layers =&amp;gt; don&amp;rsquo;t squash&lt;/li>
&lt;/ul>
&lt;p>Don&amp;rsquo;t squash when there are independent changes layered to achieve a single goal.
For instance, writing a code munger could be one commit, applying it could be another, and adding a precommit check could be a third.
One could argue they should be separate pull requests, but there&amp;rsquo;s really no way to test/review the munger without seeing it applied, and there needs to be a precommit check to ensure the munged output doesn&amp;rsquo;t immediately get out of date.&lt;/p>
&lt;p>&lt;strong>Note&lt;/strong>: you can also use the &lt;code>tide/merge-method-squash&lt;/code> label on your PR to let the bot handle squashing
&lt;em>all&lt;/em> commits, which can be done by commenting &lt;code>/label tide/merge-method-squash&lt;/code>. As opposed to squashing by hand, this will prevent removal of the &lt;code>lgtm&lt;/code> label (if already applied) and re-run of the CI tests. Although,
if this label is used, please know the following:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>All commit messages will be squashed and combined and the final commit message will be a combination of all
commit messages according to how GitHub generates the &lt;a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges#merge-message-for-a-squash-merge">message for a squash merge&lt;/a>, for example, if this is the lifecycle of your PR:&lt;/p>
&lt;pre tabindex="0">&lt;code># commit 1
Original commit msg
Some useful information
Some more useful information
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code># commit 2
Address review comments
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code># commit 3
Fix test
&lt;/code>&lt;/pre>&lt;p>After applying the label, if the PR is merged, the final commit message will end up being:&lt;/p>
&lt;pre tabindex="0">&lt;code>Title of your PR (#PR-number)
* Original commit msg
Some useful information
Some more useful information
* Address review comments
* Fix test
&lt;/code>&lt;/pre>&lt;p>Since commit messages are meant to be a record of the &amp;ldquo;why&amp;rdquo; and &amp;ldquo;what&amp;rdquo; of your changes, having
messages like &amp;ldquo;Address review comments&amp;rdquo; in the final commit message adds no real value in terms
of communicating the &amp;ldquo;what&amp;quot;s and &amp;ldquo;why&amp;quot;s of your change. Please see &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#commit-message-guidelines">Commit Message Guidelines&lt;/a> for more details on writing better commit messages.&lt;/p>
&lt;p>Using this label can help when squashing by hand is considered too challenging or not worth the
extra effort. It can also speed up merging because squashing by hand implies getting another LGTM
from a reviewer and re-run of the CI tests.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="commit-message-guidelines">Commit Message Guidelines&lt;/h2>
&lt;p>PR comments are not represented in the commit history.
Commits and their commit messages are the &lt;em>&amp;ldquo;permanent record&amp;rdquo;&lt;/em> of the changes being done in your PR and their commit messages should accurately describe both &lt;em>what&lt;/em> and &lt;em>why&lt;/em> it is being done.&lt;/p>
&lt;p>Commit messages are comprised of two parts; the subject and the body.&lt;/p>
&lt;p>The subject is the first line of the commit message and is often the only part
that is needed for small or trivial changes.
Those may be done as &amp;ldquo;one liners&amp;rdquo; with the &lt;code>git commit -m&lt;/code> or the &lt;code>--message&lt;/code> flag, but only if the what and especially why can be fully described in that few words.&lt;/p>
&lt;p>The commit message body is the portion of text below the subject when you run
&lt;code>git commit&lt;/code> without the &lt;code>-m&lt;/code> flag which will open the commit message for editing
in your &lt;a href="https://help.github.com/en/github/using-git/associating-text-editors-with-git">preferred editor&lt;/a>.
Typing a few further sentences of clarification is a useful investment in time both for your reviews and overall later project maintenance.&lt;/p>
&lt;pre tabindex="0">&lt;code>This is the commit message subject
Any text here is the commit message body
Some text
Some more text
...
# Please enter the commit message for your changes. Lines starting
# with &amp;#39;#&amp;#39; will be ignored, and an empty message aborts the commit.
#
# On branch example
# Changes to be committed:
# ...
#
&lt;/code>&lt;/pre>&lt;p>Use these guidelines below to help craft a well formatted commit message.
These can be largely attributed to the previous work of &lt;a href="https://chris.beams.io/">Chris Beams&lt;/a>, &lt;a href="https://tpo.pe/">Tim Pope&lt;/a>,
&lt;a href="https://scottchacon.com/">Scott Chacon&lt;/a> and &lt;a href="https://ben.straub.cc/">Ben Straub&lt;/a>.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#try-to-keep-the-subject-line-to-50-characters-or-less-do-not-exceed-72-characters">Try to keep the subject line to 50 characters or less; do not exceed 72 characters&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#the-first-word-in-the-commit-message-subject-should-be-capitalized-unless-it-starts-with-a-lowercase-symbol-or-other-identifier">The first word in the commit message subject should be capitalized unless it starts with a lowercase symbol or other identifier&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#do-not-end-the-commit-message-subject-with-a-period">Do not end the commit message subject with a period&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#use-imperative-mood-in-your-commit-message-subject">Use imperative mood in your commit message subject&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#add-a-single-blank-line-before-the-commit-message-body">Add a single blank line before the commit message body&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#wrap-the-commit-message-body-at-72-characters">Wrap the commit message body at 72 characters&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#do-not-use-github-keywords-or-mentions-within-your-commit-message">Do not use GitHub keywords or (@)mentions within your commit message&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#use-the-commit-message-body-to-explain-the-what-and-why-of-the-commit">Use the commit message body to explain the &lt;em>what&lt;/em> and &lt;em>why&lt;/em> of the commit&lt;/a>&lt;/li>
&lt;/ul>
&lt;!-- omit in toc -->
&lt;h3 id="try-to-keep-the-subject-line-to-50-characters-or-less-do-not-exceed-72-characters">Try to keep the subject line to 50 characters or less; do not exceed 72 characters&lt;/h3>
&lt;p>The 50 character limit for the commit message subject line acts as a focus to
keep the message summary as concise as possible.
It should be just enough to describe what is being done.&lt;/p>
&lt;p>The hard limit of 72 characters is to align with the max body size.
When viewing the history of a repository with &lt;code>git log&lt;/code>, git will pad the body text with additional blank spaces.
Wrapping the width at 72 characters ensures the body text will be centered and easily viewable on an 80-column terminal.&lt;/p>
&lt;!-- omit in toc -->
&lt;h4 id="providing-additional-context">Providing additional context&lt;/h4>
&lt;p>You can provide additional context with fewer characters by prefixing your
commit message with the &lt;a href="https://github.com/kubernetes/kubernetes/labels?q=kind">kind&lt;/a> or &lt;a href="https://github.com/kubernetes/kubernetes/labels?q=area">area&lt;/a> that your PR is impacting.
These are commonly used labels that other members of the Kubernetes community will
understand.&lt;/p>
&lt;p>&lt;strong>Examples:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;code>cleanup: remove unused portion of script foo&lt;/code>&lt;/li>
&lt;li>&lt;code>deprecation: add notice for bar feature removal in future release&lt;/code>&lt;/li>
&lt;li>&lt;code>etcd: update default server to 3.4.7&lt;/code>&lt;/li>
&lt;li>&lt;code>kube-proxy: add a test case for HostnameOverride&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>These can serve as a good subject before expanding further on the what and why
within the commit message body.&lt;/p>
&lt;!-- omit in toc -->
&lt;h3 id="the-first-word-in-the-commit-message-subject-should-be-capitalized-unless-it-starts-with-a-lowercase-symbol-or-other-identifier">The first word in the commit message subject should be capitalized unless it starts with a lowercase symbol or other identifier&lt;/h3>
&lt;p>The commit message subject is like an abbreviated sentence.
The first word should be capitalized unless the message begins with symbol, acronym or other identifier such as &lt;a href="https://github.com/kubernetes/kubernetes/labels?q=kind">kind&lt;/a> or &lt;a href="https://github.com/kubernetes/kubernetes/labels?q=area">area&lt;/a> that would regularly be lowercase.&lt;/p>
&lt;!-- omit in toc -->
&lt;h3 id="do-not-end-the-commit-message-subject-with-a-period">Do not end the commit message subject with a period&lt;/h3>
&lt;p>This is primary intended to serve as a space saving measure, but also aids in
driving the subject line to be as short and concise as possible.&lt;/p>
&lt;!-- omit in toc -->
&lt;h3 id="use-imperative-mood-in-your-commit-message-subject">Use imperative mood in your commit message subject&lt;/h3>
&lt;p>Imperative mood can be be thought of as a &lt;em>&amp;ldquo;giving a command&amp;rdquo;&lt;/em>; it is a
&lt;strong>present-tense&lt;/strong> statement that explicitly describes what is being done.&lt;/p>
&lt;p>&lt;strong>Good Examples:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Fix x error in y&lt;/li>
&lt;li>Add foo to bar&lt;/li>
&lt;li>Revert commit &amp;ldquo;baz&amp;rdquo;&lt;/li>
&lt;li>Update pull request guidelines&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Bad Examples&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Fixed x error in y&lt;/li>
&lt;li>Added foo to bar&lt;/li>
&lt;li>Reverting bad commit &amp;ldquo;baz&amp;rdquo;&lt;/li>
&lt;li>Updating the pull request guidelines&lt;/li>
&lt;li>Fixing more things&lt;/li>
&lt;/ul>
&lt;p>A general guideline from &lt;a href="https://chris.beams.io/">Chris Beams&lt;/a> on forming an imperative commit subject
is it should complete this sentence:&lt;/p>
&lt;pre tabindex="0">&lt;code>If applied, this commit will &amp;lt;your subject line here&amp;gt;
&lt;/code>&lt;/pre>&lt;p>&lt;strong>Examples:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;em>If applied, this commit will&lt;/em> &lt;strong>Fix x error in y&lt;/strong>&lt;/li>
&lt;li>&lt;em>If applied, this commit will&lt;/em> &lt;strong>Add foo to bar&lt;/strong>&lt;/li>
&lt;li>&lt;em>If applied, this commit will&lt;/em> &lt;strong>Revert commit &amp;ldquo;baz&amp;rdquo;&lt;/strong>&lt;/li>
&lt;li>&lt;em>If applied, this commit will&lt;/em> &lt;strong>Update the pull request guidelines&lt;/strong>&lt;/li>
&lt;/ul>
&lt;!-- omit in toc -->
&lt;h3 id="add-a-single-blank-line-before-the-commit-message-body">Add a single blank line before the commit message body&lt;/h3>
&lt;p>Git uses the blank line to determine which portion of the commit message is the
subject and body.
Text preceding the blank line is the subject, and text following is considered the body.&lt;/p>
&lt;!-- omit in toc -->
&lt;h3 id="wrap-the-commit-message-body-at-72-characters">Wrap the commit message body at 72 characters&lt;/h3>
&lt;p>The default column width for git is 80 characters.
Git will pad the text of the message body with an additional 4 spaces when viewing the git log.
This would leave you with 76 available spaces for text, however the text would be &amp;ldquo;lop-sided&amp;rdquo;.
To center the text for better viewing, the other side is artificially padded
with the same amount of spaces, resulting in 72 usable characters per line.
Think of them as the margins in a word doc.&lt;/p>
&lt;!-- omit in toc -->
&lt;h3 id="do-not-use-github-keywords-or-mentions-within-your-commit-message">Do not use GitHub keywords or (@)mentions within your commit message&lt;/h3>
&lt;!-- omit in toc -->
&lt;h4 id="github-keywords">GitHub Keywords&lt;/h4>
&lt;p>Using &lt;a href="https://help.github.com/articles/closing-issues-using-keywords">GitHub keywords&lt;/a> followed by a &lt;code>#&amp;lt;issue number&amp;gt;&lt;/code> reference within your
commit message will automatically apply the &lt;code>do-not-merge/invalid-commit-message&lt;/code>
label to your PR preventing it from being merged.&lt;/p>
&lt;p>&lt;a href="https://help.github.com/articles/closing-issues-using-keywords">GitHub keywords&lt;/a> in a PR to close issues is considered a convenience item, but
can have unexpected side-effects &lt;em>when used in a commit message&lt;/em>; often closing something they shouldn&amp;rsquo;t.&lt;/p>
&lt;p>&lt;strong>Blocked Keywords:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>close&lt;/li>
&lt;li>closes&lt;/li>
&lt;li>closed&lt;/li>
&lt;li>fix&lt;/li>
&lt;li>fixes&lt;/li>
&lt;li>fixed&lt;/li>
&lt;li>resolve&lt;/li>
&lt;li>resolves&lt;/li>
&lt;li>resolved&lt;/li>
&lt;/ul>
&lt;!-- omit in toc -->
&lt;h4 id="mentions">(@)Mentions&lt;/h4>
&lt;p>(@)mentions within the commit message will send a notification to that user, and
will continually do so each time the PR is updated.&lt;/p>
&lt;!-- omit in toc -->
&lt;h3 id="use-the-commit-message-body-to-explain-the-_what_-and-_why_-of-the-commit">Use the commit message body to explain the &lt;em>what&lt;/em> and &lt;em>why&lt;/em> of the commit&lt;/h3>
&lt;p>Commits and their commit messages are the &lt;em>&amp;ldquo;permanent record&amp;rdquo;&lt;/em> of the changes
being done in your PR.
Describing why something has changed and what effects it may have.
You are providing context to both your reviewer and the next person that has to touch your code.&lt;/p>
&lt;p>If something is resolving a bug, or is in response to a specific issue, you can
link to it as a reference with the message body itself.
These sorts of breadcrumbs become essential when tracking down future bugs or regressions and further help explain the &lt;em>&amp;ldquo;why&amp;rdquo;&lt;/em> the commit was made.&lt;/p>
&lt;p>&lt;strong>Additional Resources:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://chris.beams.io/posts/git-commit/">How to Write a Git Commit Message - Chris Beams&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project">Distributed Git - Contributing to a Project (Commit Guidelines)&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://preslav.me/2015/02/21/what-s-with-the-50-72-rule/">What’s with the 50/72 rule? - Preslav Rachev&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html">A Note About Git Commit Messages - Tim Pope&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="its-ok-to-push-back">It&amp;rsquo;s OK to Push Back&lt;/h2>
&lt;p>Sometimes reviewers make mistakes.
It&amp;rsquo;s OK to push back on changes your reviewer requested.
If you have a good reason for doing something a certain way, you are absolutely allowed to debate the merits of a requested change.
Both the reviewer and reviewee should strive to discuss these issues in a polite and respectful manner.&lt;/p>
&lt;p>You might be overruled, but you might also prevail.
We&amp;rsquo;re pretty reasonable people.&lt;/p>
&lt;p>Another phenomenon of open-source projects (where anyone can comment on any issue)
is the dog-pile - your pull request gets so many comments from so many people it
becomes hard to follow.
In this situation, you can ask the primary reviewer (assignee) whether they want you to fork a new pull request to clear out all the comments.
You don&amp;rsquo;t HAVE to fix every issue raised by every person who feels like commenting, but you should answer reasonable comments with an explanation.&lt;/p>
&lt;h2 id="common-sense-and-courtesy">Common Sense and Courtesy&lt;/h2>
&lt;p>No document can take the place of common sense and good taste.
Use your best judgment, while you put a bit of thought into how your work can be made easier to review.
If you do these things your pull requests will get merged with less friction.&lt;/p>
&lt;h2 id="trivial-edits">Trivial Edits&lt;/h2>
&lt;p>Each incoming Pull Request needs to be reviewed, checked, and then merged.&lt;/p>
&lt;p>While automation helps with this, each contribution also has an engineering cost.
Therefore it is appreciated if you do NOT make trivial edits and fixes, but
instead focus on giving the entire file a review.&lt;/p>
&lt;p>If you find one grammatical or spelling error, it is likely there are more in
that file, you can really make your Pull Request count by checking the formatting,
checking for broken links, and fixing errors and then submitting all the fixes
at once to that file.&lt;/p>
&lt;p>&lt;strong>Some questions to consider:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Can the file be improved further?&lt;/li>
&lt;li>Does the trivial edit greatly improve the quality of the content?&lt;/li>
&lt;/ul>
&lt;h2 id="large-or-automatic-edits">Large or Automatic Edits&lt;/h2>
&lt;p>Some tools make it very easy to create large and/or automatic Pull Requests, for example:&lt;/p>
&lt;ul>
&lt;li>global search/replace&lt;/li>
&lt;li>linters which automatically correct issues (see also next section)&lt;/li>
&lt;li>AI tools (large language models, assistants, etc) which generate code or documentation&lt;/li>
&lt;/ul>
&lt;p>To make it easier for reviewers to handle such Pull Requests, please explain
how it was generated in the &amp;ldquo;Special notes for your reviewer&amp;rdquo; section of the
Pull Request description. Reviewers may then be able to reproduce those steps
(search/replace, linters) or can start the review with the right expectations
(AI tools). Also consider the section about &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#dont-open-pull-requests-that-span-the-whole-repository">splitting up Pull
Requests&lt;/a> above.&lt;/p>
&lt;p>Even with such tools it is still your responsibility as submitter of a Pull
Request to ensure that the change is correct (to the best of your knowledge),
and that making the change improves the project enough to justify the cost that
is needed to review and merge the Pull Request (see previous section). If
unsure, create a Draft Pull Request and ask for guidance.&lt;/p>
&lt;p>Please understand that reviewers may decide to close a Pull Request with a
reference to this documentation if they come to the conclusion that the
difficulty of properly reviewing the Pull Request outweighs the benefit that
the Pull Request provides.&lt;/p>
&lt;h2 id="ai-guidance">AI Guidance&lt;/h2>
&lt;p>Using AI tools to help write your PR is acceptable, but as the author, you are responsible for understanding every change.
Do not leave the first review of AI generated changes to the reviewers, verify the changes (code review, testing, etc.) before submitting your PR.
Reviewers may ask questions about your AI-assisted code, and if you cannot explain why a change was made, the PR will be closed.
When responding to review comments, please do so without relying on AI tools. Reviewers want to engage directly with you, not with generated responses.
If you used AI tools in preparing your PR, please disclose this in the &amp;ldquo;Special notes for your reviewer&amp;rdquo; section.
All contributions must follow the &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/contributing/">contributions policies&lt;/a> and use commit messages that align with &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#commit-message-guidelines">the policy&lt;/a>.
&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#large-or-automatic-edits">Large AI generated&lt;/a> PRs and AI generated commit messages are discouraged.&lt;/p>
&lt;h2 id="fixing-linter-issues">Fixing Linter Issues&lt;/h2>
&lt;p>Kubernetes has a set of linter checks. Some of those must pass in the entire
code base, some must pass in new or modified code, and some are merely hints
to developers how to improve their code.&lt;/p>
&lt;p>Please do not create Pull Requests for issues found by linters without first
reaching out to maintainers on the &lt;code>#code-organization&lt;/code>
&lt;a href="http://slack.kubernetes.io">Slack&lt;/a> channel to determine whether there is
sufficient interest in fixing such issues.&lt;/p>
&lt;p>When it was discussed, make sure to include people who gave the preliminary
approval of this work as well as the link to the discussion on Slack or GitHub
issue into the PR description. This is a good example to follow:&lt;/p>
&lt;blockquote>
&lt;p>/area code-organization&lt;/p>
&lt;p>This PR fixes linter rules discussed in the Slack &lt;a href="https://kubernetes.slack.com/archives/Foo/Bar">https://kubernetes.slack.com/archives/Foo/Bar&lt;/a>.
Preliminary agreement to address those issues were given by @GHHandle1 and @GHHandle2.&lt;/p>
&lt;p>/assign @GHHandle1
/assign @GHHandle2&lt;/p>
&lt;p>This PR fixes issues in the package:
pkg/kubelet&lt;/p>
&lt;p>Related PRs for other packages:&lt;/p>
&lt;ul>
&lt;li>github.com/link-to-other-PR1&lt;/li>
&lt;li>github.com/link-to-other-PR2&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>It does not matter whether the linter is enabled in Kubernetes or not:&lt;/p>
&lt;ul>
&lt;li>If a linter &lt;em>is&lt;/em> enabled in
&lt;a href="https://github.com/kubernetes/kubernetes/blob/master/hack/golangci.yaml">golangci.yaml&lt;/a>,
then it has already been determined that sweeping changes in the existing
code aren&amp;rsquo;t necessary or just are not worth the cost (e.g. causing rebases of other
Pull Requests or obscuring authorship).&lt;/li>
&lt;li>If a linter &lt;em>is not&lt;/em> enabled, then it might not be important enough.&lt;/li>
&lt;li>If the check is performed by third party tools which are not integrated in
the Kubernetes CI or proprietary, file a bug or start a discussion about it first.&lt;/li>
&lt;/ul>
&lt;p>Such Pull Requests are often large and thus hard to review. When the linter
enforces some opinion or policy, then this is not necessarily something that
applies to Kubernetes. Kubernetes uses the formatting rules enforced by Go.
Stricter rules like specific usage of
&lt;a href="https://golangci-lint.run/usage/linters/#whitespace">whitespace&lt;/a> or using
&lt;a href="https://golangci-lint.run/usage/linters/#usestdlibvars">standard library constants&lt;/a>
are opinionated and not worth the cost of introducing them now.&lt;/p>
&lt;p>Linters worth considering are those which actually improve code correctness,
for example by warning about suspicious code like calling a function and then
not checking the error result.&lt;/p>
&lt;h1 id="the-testing-and-merge-workflow">The Testing and Merge Workflow&lt;/h1>
&lt;p>The Kubernetes merge workflow uses labels, applied by &lt;a href="https://prow.k8s.io/command-help">commands&lt;/a> via comments.
These will trigger actions on your pull request.
Different Kubernetes repositories may require different labels on the path to approval.
A generic explanation of how labels are used in pull requests can be found &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/owners/#code-review-using-owners-files">here&lt;/a>.
The pull request bot will also automatically apply and/or suggest labels.&lt;/p>
&lt;p>&lt;em>Example:&lt;/em> To apply a SIG label, you would type in a comment:&lt;/p>
&lt;pre tabindex="0">&lt;code>/sig apps
&lt;/code>&lt;/pre>&lt;p>&lt;em>NOTE: For pull requests that are in progress but not ready for review,
prefix the pull request title with &lt;code>WIP&lt;/code> or &lt;code>[WIP]&lt;/code> and track any remaining TODOs
in a checklist in the pull request description.&lt;/em>&lt;/p>
&lt;p>Here&amp;rsquo;s the process the pull request goes through on its way from submission to merging:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Make the pull request&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>@k8s-ci-robot&lt;/code> assigns reviewers&lt;/p>
&lt;/li>
&lt;li>
&lt;p>If you&amp;rsquo;re &lt;strong>not&lt;/strong> a member of the Kubernetes organization, a Reviewer/Kubernetes Member checks that the pull request is safe to test.
If so, they comment &lt;code>/ok-to-test&lt;/code>.
Pull requests by Kubernetes organization &lt;a href="https://github.com/kubernetes/community/blob/main/community-membership.md">members&lt;/a> do not need this step. Now the pull request is considered to be trusted, and the pre-submit tests will run:&lt;/p>
&lt;ol>
&lt;li>Automatic tests run. See the current list of tests at this &lt;a href="https://prow.k8s.io/?repo=kubernetes%2Fkubernetes&amp;type=presubmit">link&lt;/a>&lt;/li>
&lt;li>If tests fail, resolve issues by pushing edits to your pull request branch&lt;/li>
&lt;li>If the failure is a flake, anyone on trusted pull requests can comment &lt;code>/retest&lt;/code> to rerun failed tests&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>
&lt;p>Reviewer suggests edits&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Push edits to your pull request branch&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Repeat the prior two steps as needed until the reviewer(s) add &lt;code>/lgtm&lt;/code> label. The &lt;code>/lgtm&lt;/code> label, when applied by someone listed as a &lt;code>reviewer&lt;/code> in the corresponding project &lt;code>OWNERS&lt;/code> file, is a signal that the code has passed review from one or more trusted reviewers for that project&lt;/p>
&lt;/li>
&lt;li>
&lt;p>(Optional) Some reviewers prefer that you squash commits at this step&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Follow the bot suggestions to assign an OWNER who will add the &lt;code>/approve&lt;/code> label to the pull request. The &lt;code>/approve&lt;/code> label, when applied by someone listed as an &lt;code>approver&lt;/code> in the corresponding project &lt;code>OWNERS&lt;/code>, is a signal that the code has passed final review and is ready to be automatically merged&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>The behavior of Prow is configurable across projects. You should be aware of the following configurable behaviors.&lt;/p>
&lt;ul>
&lt;li>If you are listed as an &lt;code>/approver&lt;/code> in the &lt;code>OWNERS&lt;/code> file, an implicit &lt;code>/approve&lt;/code> can be applied to your pull request. This can result in a merge being triggered by a &lt;code>/lgtm&lt;/code> label. This is the configured behavior in many projects, including &lt;code>kubernetes/kubernetes&lt;/code>. You can remove the implicit &lt;code>/approve&lt;/code> with &lt;code>/approve cancel&lt;/code>&lt;/li>
&lt;li>&lt;code>/lgtm&lt;/code> can be configured so that from someone listed as both a &lt;code>reviewer&lt;/code> and an &lt;code>approver&lt;/code> will cause both labels to be applied. For &lt;code>kubernetes/kubernetes&lt;/code> and many other projects this is &lt;em>not&lt;/em> the default behavior, and &lt;code>/lgtm&lt;/code> is decoupled from &lt;code>/approve&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Once the tests pass, and the reviewer adds the &lt;code>lgtm&lt;/code> and &lt;code>approved&lt;/code> labels, the pull request enters the final merge pool.
The merge pool is needed to make sure no incompatible changes have been introduced by other pull requests since the tests were last run on your pull request.&lt;/p>
&lt;!-- TODO: create parallel instructions for reviewers -->
&lt;p>&lt;a href="https://sigs.k8s.io/prow/cmd/tide">Tide&lt;/a> will manage the merge pool
automatically. It uses GitHub queries to select PRs into “tide pools”,
runs as many in a batch as it can (“tide comes in”), and merges them (“tide goes out”).&lt;/p>
&lt;ol>
&lt;li>The pull request enters the &lt;a href="https://prow.k8s.io/tide">merge pool&lt;/a>
if the merge criteria are met. The &lt;a href="https://prow.k8s.io/pr">PR dashboard&lt;/a> shows
the difference between your PR&amp;rsquo;s state and the merge criteria so that you can
easily see all criteria that are not being met and address them.&lt;/li>
&lt;li>If tests fail, resolve issues by pushing edits to your pull request branch&lt;/li>
&lt;li>If the failure is a flake, anyone can comment &lt;code>/retest&lt;/code> if the pull request is trusted&lt;/li>
&lt;li>If tests pass, Tide automatically merges the pull request&lt;/li>
&lt;/ol>
&lt;p>That&amp;rsquo;s the last step. Your pull request is now merged.&lt;/p>
&lt;h2 id="more-about-ok-to-test">More About &lt;code>Ok-To-Test&lt;/code>&lt;/h2>
&lt;ul>
&lt;li>The ok-to-test label is applied by org members to PRs from external contributors, it signals that the PR can be tested.&lt;/li>
&lt;li>For a Contributor, an &lt;code>ok-to-test&lt;/code> label means the regular CI tests will be run for their PR.&lt;/li>
&lt;li>For the reviewer or the member, labelling the PR with &lt;code>ok-to-test&lt;/code> it means a lot more:
&lt;ul>
&lt;li>They need to take care if the PR is not a wastage of our &lt;code>CI/CD&lt;/code> resources.&lt;/li>
&lt;li>Is the PR worth testing or does it need more changes before going through the &lt;code>CI/CD&lt;/code> process?&lt;/li>
&lt;li>Is the PR getting used to run malicious code to misuse our resources ?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>An &lt;code>ok-to-test&lt;/code> label may reduce the workload and smoothens the contributors experience as they can know if there is any failing test. If there is, you can fix the test and they don&amp;rsquo;t have to wait for a long time to get a review from &lt;code>maintainer/assignee&lt;/code>.&lt;/li>
&lt;li>There are various other factors on which labelling of &lt;code>ok-to-test&lt;/code> depends :
&lt;ul>
&lt;li>Size of PR :
&lt;ul>
&lt;li>If the PR is of &lt;code>size/S&lt;/code> or &lt;code>size/M&lt;/code> which is just to fix a grammatical error or spelling mistake, the reviewer can trigger the &lt;code>CI/CD&lt;/code> without having a second thought.&lt;/li>
&lt;li>If the PR is of &lt;code>size/XXL&lt;/code> which aims at adding a new feature, a new API endpoint or any new substantial feature. There needs to other conventions &amp;amp; process to be followed regarding the change made. Hence, it may have a slight delay to get labelled with &lt;code>ok-to-test&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Other org members who are not assigned to the following PR may also label &lt;code>ok-to-test&lt;/code> , if the change is small.&lt;/li>
&lt;li>If the PR is labelled with &lt;code>cncf-cla: no&lt;/code>, then it is better to wait before labelling &lt;code>ok-to-test&lt;/code>.&lt;/li>
&lt;li>PRs with tag &lt;code>do-not-merge/hold&lt;/code> or &lt;code>needs-rebase&lt;/code> should make the appropriate changes before the PR can be labelled &lt;code>ok-to-test&lt;/code>.&lt;/li>
&lt;li>PRs created by mistake without to meaningful change of code should not be labelled &lt;code>ok-to-test&lt;/code> and closed.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>Docs: GitHub Workflow</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/github-workflow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/github-workflow/</guid><description>
&lt;p>&lt;img alt="Git workflow" src="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/git_workflow.png">&lt;/p>
&lt;h2 id="1-fork-in-the-cloud">1. Fork in the cloud&lt;/h2>
&lt;ol>
&lt;li>Visit &lt;a href="https://github.com/kubernetes/kubernetes">https://github.com/kubernetes/kubernetes&lt;/a>&lt;/li>
&lt;li>Click &lt;code>Fork&lt;/code> button (top right) to establish a cloud-based fork.&lt;/li>
&lt;/ol>
&lt;h2 id="2-clone-fork-to-local-storage">2. Clone fork to local storage&lt;/h2>
&lt;p>In your shell, define a local working directory as &lt;code>working_dir&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a2f">export&lt;/span> &lt;span style="color:#b8860b">working_dir&lt;/span>&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#b44">&amp;#34;&lt;/span>&lt;span style="color:#b68;font-weight:bold">${&lt;/span>&lt;span style="color:#b8860b">HOME&lt;/span>&lt;span style="color:#b68;font-weight:bold">}&lt;/span>&lt;span style="color:#b44">/src/k8s.io&amp;#34;&lt;/span> &lt;span style="color:#080;font-style:italic"># Change to your preferred location for source code&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Set &lt;code>user&lt;/code> to match your github profile name:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a2f">export&lt;/span> &lt;span style="color:#b8860b">user&lt;/span>&lt;span style="color:#666">=&lt;/span>&amp;lt;your github profile name&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Both &lt;code>$working_dir&lt;/code> and &lt;code>$user&lt;/code> are mentioned in the figure above.&lt;/p>
&lt;p>Create your clone:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>mkdir -p &lt;span style="color:#b8860b">$working_dir&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a2f">cd&lt;/span> &lt;span style="color:#b8860b">$working_dir&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git clone https://github.com/&lt;span style="color:#b8860b">$user&lt;/span>/kubernetes.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#080;font-style:italic"># or: git clone git@github.com:$user/kubernetes.git&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a2f">cd&lt;/span> &lt;span style="color:#b8860b">$working_dir&lt;/span>/kubernetes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git remote add upstream https://github.com/kubernetes/kubernetes.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#080;font-style:italic"># or: git remote add upstream git@github.com:kubernetes/kubernetes.git&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#080;font-style:italic"># Never push to upstream master&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git remote set-url --push upstream no_push
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#080;font-style:italic"># Confirm that your remotes make sense:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git remote -v
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="3-create-a-working-branch">3. Create a Working Branch&lt;/h2>
&lt;p>Get your local master up to date. Note that depending on which repository you are working from,
the default branch may be called &amp;ldquo;main&amp;rdquo; instead of &amp;ldquo;master&amp;rdquo;.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a2f">cd&lt;/span> &lt;span style="color:#b8860b">$working_dir&lt;/span>/kubernetes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git fetch upstream
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git checkout master
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git rebase upstream/master
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Create your new branch.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>git checkout -b myfeature
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You may now edit files on the &lt;code>myfeature&lt;/code> branch.&lt;/p>
&lt;h3 id="building-kubernetes">Building Kubernetes&lt;/h3>
&lt;p>This workflow is process-specific. For quick-start build instructions for &lt;a href="https://git.k8s.io/kubernetes">kubernetes/kubernetes&lt;/a>, please &lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/development.md#building-kubernetes-on-a-local-osshell-environment">see here&lt;/a>.&lt;/p>
&lt;h2 id="4-keep-your-branch-in-sync">4. Keep your branch in sync&lt;/h2>
&lt;p>You will need to periodically fetch changes from the &lt;code>upstream&lt;/code>
repository to keep your working branch in sync. Note that depending on which repository you are working from,
the default branch may be called &amp;lsquo;main&amp;rsquo; instead of &amp;lsquo;master&amp;rsquo;.&lt;/p>
&lt;p>Make sure your local repository is on your working branch and run the
following commands to keep it in sync:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>git fetch upstream
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git rebase upstream/master
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Please don&amp;rsquo;t use &lt;code>git pull&lt;/code> instead of the above &lt;code>fetch&lt;/code> and
&lt;code>rebase&lt;/code>. Since &lt;code>git pull&lt;/code> executes a merge, it creates merge commits. These make the commit history messy
and violate the principle that commits ought to be individually understandable
and useful (see below).&lt;/p>
&lt;p>You might also consider changing your &lt;code>.git/config&lt;/code> file via
&lt;code>git config branch.autoSetupRebase always&lt;/code> to change the behavior of &lt;code>git pull&lt;/code>, or another non-merge option such as &lt;code>git pull --rebase&lt;/code>.&lt;/p>
&lt;h2 id="5-commit-your-changes">5. Commit Your Changes&lt;/h2>
&lt;p>You will probably want to regularly commit your changes. It is likely that you will go back and edit,
build, and test multiple times. After a few cycles of this, you might
&lt;a href="https://www.w3schools.com/git/git_amend.asp">amend your previous commit&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>git commit
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="6-push-to-github">6. Push to GitHub&lt;/h2>
&lt;p>When your changes are ready for review, push your working branch to
your fork on GitHub.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>git push -f &amp;lt;your_remote_name&amp;gt; myfeature
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="7-create-a-pull-request">7. Create a Pull Request&lt;/h2>
&lt;ol>
&lt;li>Visit your fork at &lt;code>https://github.com/&amp;lt;user&amp;gt;/kubernetes&lt;/code>&lt;/li>
&lt;li>Click the &lt;strong>Compare &amp;amp; Pull Request&lt;/strong> button next to your &lt;code>myfeature&lt;/code> branch.&lt;/li>
&lt;li>Check out the pull request &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/">process&lt;/a> for more details and
advice.&lt;/li>
&lt;/ol>
&lt;p>&lt;em>If you have upstream write access&lt;/em>, please refrain from using the GitHub UI for
creating PRs, because GitHub will create the PR branch inside the main
repository rather than inside your fork.&lt;/p>
&lt;h3 id="get-a-code-review">Get a code review&lt;/h3>
&lt;p>Once your pull request has been opened it will be assigned to one or more
reviewers. Those reviewers will do a thorough code review, looking for
correctness, bugs, opportunities for improvement, documentation and comments,
and style.&lt;/p>
&lt;p>Commit changes made in response to review comments to the same branch on your
fork.&lt;/p>
&lt;p>Very small PRs are easy to review. Very large PRs are very difficult to review.&lt;/p>
&lt;h3 id="squash-commits">Squash commits&lt;/h3>
&lt;p>After a review, prepare your PR for merging by squashing your commits.&lt;/p>
&lt;p>All commits left on your branch after a review should represent meaningful milestones or units of work. Use commits to add clarity to the development and review process.&lt;/p>
&lt;p>Before merging a PR, squash the following kinds of commits:&lt;/p>
&lt;ul>
&lt;li>Fixes/review feedback&lt;/li>
&lt;li>Typos&lt;/li>
&lt;li>Merges and rebases&lt;/li>
&lt;li>Work in progress&lt;/li>
&lt;/ul>
&lt;p>Aim to have every commit in a PR compile and pass tests independently if you can, but it&amp;rsquo;s not a requirement. In particular, &lt;code>merge&lt;/code> commits must be removed, as they will not pass tests.&lt;/p>
&lt;p>To squash your commits, perform an &lt;a href="https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History">interactive rebase&lt;/a>:&lt;/p>
&lt;ol>
&lt;li>Check your git branch:&lt;/li>
&lt;/ol>
&lt;pre tabindex="0">&lt;code>git status
&lt;/code>&lt;/pre>&lt;p>The output should be similar to this:&lt;/p>
&lt;pre tabindex="0">&lt;code>On branch your-contribution
Your branch is up to date with &amp;#39;origin/your-contribution&amp;#39;.
&lt;/code>&lt;/pre>&lt;ol start="2">
&lt;li>Start an interactive rebase using a specific commit hash, or count backwards from your last commit using &lt;code>HEAD~&amp;lt;n&amp;gt;&lt;/code>, where &lt;code>&amp;lt;n&amp;gt;&lt;/code> represents the number of commits to include in the rebase.&lt;/li>
&lt;/ol>
&lt;pre tabindex="0">&lt;code>git rebase -i HEAD~3
&lt;/code>&lt;/pre>&lt;p>The output should be similar to this:&lt;/p>
&lt;pre tabindex="0">&lt;code>pick 2ebe926 Original commit
pick 31f33e9 Address feedback
pick b0315fe Second unit of work
# Rebase 7c34fc9..b0315ff onto 7c34fc9 (3 commands)
#
# Commands:
# p, pick &amp;lt;commit&amp;gt; = use commit
# r, reword &amp;lt;commit&amp;gt; = use commit, but edit the commit message
# e, edit &amp;lt;commit&amp;gt; = use commit, but stop for amending
# s, squash &amp;lt;commit&amp;gt; = use commit, but meld into previous commit
# f, fixup &amp;lt;commit&amp;gt; = like &amp;#34;squash&amp;#34;, but discard this commit&amp;#39;s log message
...
&lt;/code>&lt;/pre>&lt;ol start="3">
&lt;li>Use a command line text editor to change the word &lt;code>pick&lt;/code> to &lt;code>squash&lt;/code> for the commits you want to squash, then save your changes and continue the rebase:&lt;/li>
&lt;/ol>
&lt;pre tabindex="0">&lt;code>pick 2ebe926 Original commit
squash 31f33e9 Address feedback
pick b0315fe Second unit of work
...
&lt;/code>&lt;/pre>&lt;p>The output after saving changes should look similar to this:&lt;/p>
&lt;pre tabindex="0">&lt;code>[detached HEAD 61fdded] Second unit of work
Date: Thu Mar 5 19:01:32 2020 +0100
2 files changed, 15 insertions(+), 1 deletion(-)
...
Successfully rebased and updated refs/heads/master.
&lt;/code>&lt;/pre>&lt;ol start="4">
&lt;li>Force push your changes to your remote branch:&lt;/li>
&lt;/ol>
&lt;pre tabindex="0">&lt;code>git push --force-with-lease
&lt;/code>&lt;/pre>&lt;p>For mass automated fixups such as automated doc formatting, use one or more
commits for the changes to tooling and a final commit to apply the fixup en
masse. This makes reviews easier.&lt;/p>
&lt;p>An alternative to this manual squashing process is to use the Prow and Tide based automation that is configured in GitHub: adding a comment to your PR with &lt;code>/label tide/merge-method-squash&lt;/code> will trigger the automation so that GitHub squash your commits onto the target branch once the PR is approved. Using this approach simplifies things for those less familiar with Git, but there are situations in where it&amp;rsquo;s better to squash locally; reviewers will have this in mind and can ask for manual squashing to be done.&lt;/p>
&lt;p>By squashing locally, you control the commit message(s) for your work, and can separate a large PR into logically separate changes.
For example: you have a pull request that is code complete and has 24 commits. You rebase this against the same merge base, simplifying the change to two commits. Each of those two commits represents a single logical change and each commit message summarizes what changes. Reviewers see that the set of changes are now understandable, and approve your PR.&lt;/p>
&lt;h2 id="merging-a-commit">Merging a commit&lt;/h2>
&lt;p>Once you&amp;rsquo;ve received review and approval, your commits are squashed, your PR is ready for merging.&lt;/p>
&lt;p>Merging happens automatically after both a Reviewer and Approver have approved the PR. If you haven&amp;rsquo;t squashed your commits, they may ask you to do so before approving a PR.&lt;/p>
&lt;h2 id="reverting-a-commit">Reverting a commit&lt;/h2>
&lt;p>In case you wish to revert a commit, use the following instructions.&lt;/p>
&lt;p>&lt;em>If you have upstream write access&lt;/em>, please refrain from using the
&lt;code>Revert&lt;/code> button in the GitHub UI for creating the PR, because GitHub
will create the PR branch inside the main repository rather than inside your fork.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Create a branch and sync it with upstream. Note that depending on which repository you are working from, the default branch may be called &amp;lsquo;main&amp;rsquo; instead of &amp;lsquo;master&amp;rsquo;.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#080;font-style:italic"># create a branch&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git checkout -b myrevert
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#080;font-style:italic"># sync the branch with upstream&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git fetch upstream
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git rebase upstream/master
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>If the commit you wish to revert is a &lt;em>merge commit&lt;/em>, use this command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#080;font-style:italic"># SHA is the hash of the merge commit you wish to revert&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git revert -m &lt;span style="color:#666">1&lt;/span> &amp;lt;SHA&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If it is a &lt;em>single commit&lt;/em>, use this command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#080;font-style:italic"># SHA is the hash of the single commit you wish to revert&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git revert &amp;lt;SHA&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>This will create a new commit reverting the changes. Push this new commit to your remote.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>git push &amp;lt;your_remote_name&amp;gt; myrevert
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Finally, &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/github-workflow/#7-create-a-pull-request">create a Pull Request&lt;/a> using this branch.&lt;/p>
&lt;/li>
&lt;/ul></description></item><item><title>Docs: Coding Conventions</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/coding-convention/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/coding-convention/</guid><description>
&lt;h2 id="code-conventions">Code conventions&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Bash&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://google.github.io/styleguide/shellguide.html">Shell Style Guide&lt;/a>&lt;/li>
&lt;li>Ensure that build, release, test, and cluster-management scripts run on macOS&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Go&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://go.dev/wiki/CodeReviewComments">Go Code Review Comments&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://golang.org/doc/effective_go.html">Effective Go&lt;/a>&lt;/li>
&lt;li>Know and avoid &lt;a href="https://gist.github.com/lavalamp/4bd23295a9f32706a48f">Go landmines&lt;/a>&lt;/li>
&lt;li>Comment your code.
&lt;ul>
&lt;li>&lt;a href="https://go.dev/doc/comment">Go&amp;rsquo;s commenting conventions&lt;/a>&lt;/li>
&lt;li>If reviewers ask questions about why the code is the way it is, that&amp;rsquo;s a sign that comments might be helpful.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Command-line flags should use dashes, not underscores&lt;/li>
&lt;li>Naming
&lt;ul>
&lt;li>Please consider package name when selecting an interface name, and avoid redundancy. For example, &lt;code>storage.Interface&lt;/code> is better than &lt;code>storage.StorageInterface&lt;/code>.&lt;/li>
&lt;li>Do not use uppercase characters, underscores, or dashes in package names.&lt;/li>
&lt;li>Please consider parent directory name when choosing a package name. For example, &lt;code>pkg/controllers/autoscaler/foo.go&lt;/code> should say &lt;code>package autoscaler&lt;/code> not &lt;code>package autoscalercontroller&lt;/code>.
&lt;ul>
&lt;li>Unless there&amp;rsquo;s a good reason, the &lt;code>package foo&lt;/code> line should match the name of the directory in which the &lt;code>.go&lt;/code> file exists.&lt;/li>
&lt;li>Importers can use a different name if they need to disambiguate.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Locks should be called &lt;code>lock&lt;/code> and should never be embedded (always &lt;code>lock sync.Mutex&lt;/code>). When multiple locks are present, give each lock a distinct name following Go conventions: &lt;code>stateLock&lt;/code>, &lt;code>mapLock&lt;/code> etc.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-architecture/api_changes.md">API changes&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-architecture/api-conventions.md">API conventions&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-cli/kubectl-conventions.md">Kubectl conventions&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-instrumentation/logging.md">Logging conventions&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="testing-conventions">Testing conventions&lt;/h2>
&lt;ul>
&lt;li>All new packages and most new significant functionality must come with unit tests.&lt;/li>
&lt;li>Table-driven tests are preferred for testing multiple scenarios/inputs. For an example, see &lt;a href="https://github.com/kubernetes/kubernetes/blob/4b8e819355d791d96b7e9d9efe4cbafae2311c88/test/integration/auth/auth_test.go#L1201">TestNamespaceAuthorization&lt;/a>.&lt;/li>
&lt;li>Significant features should come with integration (test/integration) and/or &lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-testing/e2e-tests.md">end-to-end (test/e2e) tests&lt;/a>.
&lt;ul>
&lt;li>Including new &lt;code>kubectl&lt;/code> commands and major features of existing commands.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Unit tests must pass on macOS and Windows platforms - if you use Linux specific features, your test case must either be skipped on windows or compiled out (skipped is better when running Linux specific commands, compiled out is required when your code does not compile on Windows).&lt;/li>
&lt;li>Avoid relying on Docker Hub. Use the &lt;a href="https://cloud.google.com/artifact-registry/">Google Cloud Artifact Registry&lt;/a> instead.&lt;/li>
&lt;li>Do not expect an asynchronous thing to happen immediately&amp;mdash;do not wait for one second and expect a pod to be running. Wait and retry instead.&lt;/li>
&lt;li>See the &lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-testing/testing.md">testing guide&lt;/a> for additional testing advice.&lt;/li>
&lt;/ul>
&lt;h2 id="directory-and-file-conventions">Directory and file conventions&lt;/h2>
&lt;ul>
&lt;li>Avoid package sprawl. Find an appropriate subdirectory for new packages. &lt;a href="http://issues.k8s.io/4851">See issue #4851&lt;/a> for discussion.
&lt;ul>
&lt;li>Libraries with no appropriate home belong in new package subdirectories of &lt;code>pkg/util&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Avoid general utility packages. Packages called &amp;ldquo;util&amp;rdquo; are suspect. Instead, derive a name that describes your desired function. For example, the utility functions dealing with waiting for operations are in the &lt;code>wait&lt;/code> package and include functionality like &lt;code>Poll&lt;/code>. The full name is &lt;code>wait.Poll&lt;/code>.&lt;/li>
&lt;li>All filenames should be lowercase.&lt;/li>
&lt;li>Go source files and directories use underscores, not dashes.
&lt;ul>
&lt;li>Package directories should generally avoid using separators as much as possible. When package names are multiple words, they usually should be in nested subdirectories.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Document directories and filenames should use dashes rather than underscores.&lt;/li>
&lt;li>Examples should also illustrate &lt;a href="https://kubernetes.io/docs/concepts/configuration/overview/">best practices for configuration and using the system&lt;/a>.&lt;/li>
&lt;li>Follow these conventions for third-party code:
&lt;ul>
&lt;li>Go code for normal third-party dependencies is managed using &lt;a href="https://go.dev/wiki/Modules">go modules&lt;/a> and is described in the kubernetes &lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-architecture/vendor.md">vendoring guide&lt;/a>.&lt;/li>
&lt;li>Other third-party code belongs in &lt;code>third_party&lt;/code>.
&lt;ul>
&lt;li>forked third party Go code goes in &lt;code>third_party/forked&lt;/code>.&lt;/li>
&lt;li>forked &lt;em>golang stdlib&lt;/em> code goes in &lt;code>third_party/forked/golang&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Third-party code must include licenses. This includes modified third-party code and excerpts, as well.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>Docs: Help Wanted and Good First Issue Labels</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/help-wanted/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/help-wanted/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>We use two labels to identify issues that have been specifically created or selected for new contributors: &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/help-wanted/#help-wanted">help wanted&lt;/a> and &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/help-wanted/#good-first-issue">good first
issue&lt;/a>. The &lt;code>good first issue&lt;/code> label is a subset of the &lt;code>help wanted&lt;/code>
label, indicating that members have committed to providing extra assistance for
new contributors. All &lt;code>good first issue&lt;/code> items also have the &lt;code>help wanted&lt;/code>
label.&lt;/p>
&lt;p>We also have some &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/help-wanted/#suggestions-for-experienced-community-members">suggestions&lt;/a> for using these labels to help
grow and improve our community.&lt;/p>
&lt;h2 id="help-wanted">Help Wanted&lt;/h2>
&lt;p>Items marked with the &lt;code>help wanted&lt;/code> label need to ensure that they meet these criteria:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Clear Task&lt;/strong>
The task is agreed upon and does not require further discussions in the
community. Call out if that area of code is untested and requires new
fixtures. Consensus should exist for the high-level approach.&lt;/p>
&lt;p>API and CLI behavior should be decided and included in the OP issue, for example: &amp;ldquo;The
new command syntax is &lt;code>svcat unbind NAME [--orphan] [--timeout 5m]&lt;/code>&amp;rdquo;, with
expected validations called out.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Goldilocks priority&lt;/strong>
The priority should not be so high that a core contributor should do it, but not too low that it
isn&amp;rsquo;t useful enough for a core contributor to spend time reviewing it, answering
questions, helping get it into a release, etc.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Up-To-Date&lt;/strong>
Often these issues become obsolete and have already been completed, are no longer
desired, no longer make sense, or have changed priority or difficulty.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>A good example of a Help Wanted issue description can be found here: &lt;a href="https://github.com/kubernetes/test-infra/issues/21356#issuecomment-799972711">kubernetes/test-infra#21356 (comment)&lt;/a>.&lt;/p>
&lt;p>These commands can be used with GitHub issues to manage the &lt;code>help wanted&lt;/code> label:&lt;/p>
&lt;ul>
&lt;li>&lt;code>/help&lt;/code> : Adds the &lt;code>help wanted&lt;/code> label to an issue.&lt;/li>
&lt;li>&lt;code>/remove-help&lt;/code> : Removes the &lt;code>help wanted&lt;/code> label from an issue. If the
&lt;code>good first issue&lt;/code> label is present, it is removed as well.&lt;/li>
&lt;/ul>
&lt;h2 id="good-first-issue">Good First Issue&lt;/h2>
&lt;p>Items marked with the &lt;code>good first issue&lt;/code> label are intended for &lt;em>first-time
contributors&lt;/em>. It indicates that members will keep an eye out for these pull
requests and shepherd it through our processes.&lt;/p>
&lt;p>&lt;strong>New contributors should not be left to find an approver, ping for reviews,
decipher prow commands, or identify that their build failed due to a flake.&lt;/strong>
It is important to make new contributors feel welcome and valued. We should assure them that they
will have an extra level of help with their first contribution.&lt;/p>
&lt;p>After a contributor has successfully completed one or two &lt;code>good first issue&lt;/code> items, they
should be ready to move on to &lt;code>help wanted&lt;/code> items.&lt;/p>
&lt;p>All &lt;code>good first issue&lt;/code> items need to follow the guidelines for &lt;code>help wanted&lt;/code>
items in addition to meeting the following criteria:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>No Barrier to Entry&lt;/strong>
The task is something that a new contributor can tackle without advanced
setup or domain knowledge.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Solution Explained&lt;/strong>
The recommended solution is clearly described in the issue.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Provides Context&lt;/strong>
If background knowledge is required, this should be explicitly mentioned and a
list of suggested readings included.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Gives Examples&lt;/strong>
Link to examples of similar implementations so new contributors have a
reference guide for their changes.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Identifies Relevant Code&lt;/strong>
The relevant code and tests to be changed should be linked in the issue.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Ready to Test&lt;/strong>
There should be existing tests that can be modified, or existing test cases
fit to be copied. If the area of code doesn&amp;rsquo;t have tests, before labeling the
issue, add a test fixture. This prep often makes a great &lt;code>help wanted&lt;/code> task!&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>A good example of a &lt;code>good first issue&lt;/code> description can be found here: &lt;a href="https://github.com/kubernetes/kubernetes/issues/68231">kubernetes/kubernetes#68231&lt;/a>.&lt;/p>
&lt;p>These commands can be used in the GitHub issue comments to control the &lt;code>good first issue&lt;/code> label:&lt;/p>
&lt;ul>
&lt;li>&lt;code>/good-first-issue&lt;/code> : Adds the &lt;code>good first issue&lt;/code> label to an issue. Also adds
the &lt;code>help wanted&lt;/code> label, if not already present.&lt;/li>
&lt;li>&lt;code>/remove-good-first-issue&lt;/code> : Removes the &lt;code>good first issue&lt;/code> label from an issue.&lt;/li>
&lt;/ul>
&lt;h2 id="suggestions-for-experienced-community-members">Suggestions for Experienced Community Members&lt;/h2>
&lt;p>We encourage our more experienced members to help new contributors, so that the
Kubernetes community can continue to grow and maintain the kind, inclusive
community that we all enjoy today.&lt;/p>
&lt;p>The following suggestions go a long way toward preventing &amp;ldquo;drive-by&amp;rdquo; PRs, and
ensure that our investment in new contributors is rewarded by returning contributors.&lt;/p>
&lt;ul>
&lt;li>Provide extra assistance during reviews on &lt;code>good first issue&lt;/code> pull requests.&lt;/li>
&lt;li>Answer questions and identify useful docs.&lt;/li>
&lt;li>Offer advice such as &amp;ldquo;One way to reproduce this in a cluster is to do X and
then you can use kubectl to poke around,&amp;rdquo; or &amp;ldquo;Did you know that you can
use fake clients to setup and test this easier?&amp;rdquo;&lt;/li>
&lt;li>Help new contributors learn enough about the project, setting up their
environment, running tests, and navigating this area of the code so that they
can tackle a related &lt;code>help wanted&lt;/code> issue next time.&lt;/li>
&lt;/ul>
&lt;p>If you make someone feel like a part of our community, they will know that it is safe to ask
questions, that people will let them know the rules, and that their
contributions are helpful and appreciated. They will stick around! 🌈&lt;/p>
&lt;ul>
&lt;li>Encourage new contributors to seek help on the appropriate slack channels,
introduce them, and include them in your conversations.&lt;/li>
&lt;li>Invite them to the SIG meetings.&lt;/li>
&lt;li>Give credit to new contributors so that others get to know them: &amp;ldquo;Hey, would
someone help give a second LGTM on @newperson&amp;rsquo;s first PR on chocolate
bunnies?&amp;rdquo; Mention them in the SIG channel and meeting, and thank them on Twitter or
#shoutouts.&lt;/li>
&lt;li>Use all the emoji in your approve or lgtm comment. 💖 🚀&lt;/li>
&lt;li>Let them know that their &lt;code>good first issue&lt;/code> is getting extra attention to make
the first one easier and help them find a follow-up issue.&lt;/li>
&lt;li>Suggest a related &lt;code>help wanted&lt;/code> so that can build up experience in an area.&lt;/li>
&lt;li>People are more likely to continue contributing when they know what to expect.
They want to know the acceptable way to ask for people to review a PR, and how to nudge things along
when a PR is stalled. Show them how we operate by helping move their first PR
along.&lt;/li>
&lt;li>If you have time, let the contributor know that they can DM you with questions
that they aren&amp;rsquo;t yet comfortable asking the wider group.&lt;/li>
&lt;/ul></description></item><item><title>Docs: Issue Triage Guidelines</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/</guid><description>
&lt;h2 id="table-of-contents">Table of Contents&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#scope">Scope&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#what-is-triaging">What Is Triaging?&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#why-is-triaging-beneficial">Why Is Triaging Beneficial?&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#how-to-triage-a-step-by-step-flow">How to Triage: A Step-by-Step Flow&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#triage-related-tools">Triage-Related Tools&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#permissions-and-the-bot">Permissions and the Bot&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#triage-party">Triage Party&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#github-project-boards">GitHub Project Boards&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#devstats">DevStats&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#process-pointers-and-advice-from-sigs">Process Pointers and Advice from SIGs&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#running-a-triage-meeting-tips-from-api-machinery">Running a Triage Meeting: Tips from api-machinery&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#triage-guide-by-cluster-lifecycle">Triage Guide by cluster-lifecycle&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#step-one-review-newly-created-open-issues">Step One: Review Newly Created Open Issues&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#conducting-searches">Conducting Searches&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#step-two-triage-issues-by-type">Step Two: Triage Issues by Type&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#support-requests">Support Requests&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#abandoned-or-wrongly-placed-issues">Abandoned or Wrongly Placed Issues&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#needs-more-information">Needs More Information&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#bugs">Bugs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#help-wantedgood-first-issues">Help Wanted/Good First Issues&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#kind-labels">Kind Labels&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#step-three-define-priority">Step Three: Define Priority&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#step-four-find-and-set-the-right-sigs-to-own-an-issue">Step Four: Find and Set the Right SIG(s) to Own an Issue&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#self-assigning">Self-Assigning&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#step-five-follow-up">Step Five: Follow Up&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#if-no-pr-is-created-for-an-issue-within-the-current-release-cycle">If No PR Is Created for an Issue Within the Current Release Cycle&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#if-a-sig-label-is-assigned-but-no-action-is-taken-within-30-days">If a SIG Label Is Assigned, but No Action Is Taken Within 30 Days&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#if-an-issue-has-no-activity-after-90-days">If an Issue Has No Activity After 90 Days&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#further-notes">Further Notes&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#support-requests-channels">Support Requests: Channels&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#user-support-response-example">User Support Response: Example&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="scope">Scope&lt;/h2>
&lt;p>These guidelines serve as a primary document for triaging incoming issues to Kubernetes. SIGs and projects are encouraged to use this guidance as a starting point, and customize to address specific triaging needs.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> These guidelines only apply to the Kubernetes repository. Usage for other Kubernetes-related GitHub repositories is TBD.&lt;/p>
&lt;h2 id="what-is-triaging">What Is Triaging?&lt;/h2>
&lt;p>Issue triage is a process by which a SIG intakes and reviews new GitHub issues and requests, and organizes them to be actioned—either by its own members, or by other SIGs. Triaging involves categorizing issues and pull requests based on factors such as priority/urgency, SIG ownership of the issue, and the issue kind (bug, feature, etc.).&lt;/p>
&lt;p>Triage can happen asynchronously and continuously, or in regularly scheduled meetings. Several Kubernetes SIGs and projects have adopted their own approaches to triaging.&lt;/p>
&lt;h2 id="why-is-triaging-beneficial">Why Is Triaging Beneficial?&lt;/h2>
&lt;p>SIGs who triage regularly say it offers a number of benefits, such as:&lt;/p>
&lt;ul>
&lt;li>Speeding up issue management&lt;/li>
&lt;li>Keeping contributors engaged by shortening response times&lt;/li>
&lt;li>Preventing work from lingering endlessly&lt;/li>
&lt;li>Replacing special requests and one-offs with a neutral process that acts like a boundary&lt;/li>
&lt;li>Greater transparency, interesting discussions, and more collaborative, informed decision-making&lt;/li>
&lt;li>Building prioritization, negotiation and decision-making skills, which are critical to most tech roles&lt;/li>
&lt;li>Reinforcement of SIG community and culture&lt;/li>
&lt;/ul>
&lt;p>People who enjoy product management and iterating on processes tend to enjoy triaging because it empowers their SIGs to maintain a steady, continuous flow of work that is assessed and prioritized based on feedback and value.&lt;/p>
&lt;h1 id="how-to-triage-a-step-by-step-flow">How to Triage: A Step-by-Step Flow&lt;/h1>
&lt;p>This guide walks you through a standard triaging process, beginning with tools and tips.&lt;/p>
&lt;h2 id="triage-related-tools">Triage-Related Tools&lt;/h2>
&lt;p>These are tools that your SIG can use to make the triage process simpler, more efficient and faster.&lt;/p>
&lt;h3 id="permissions-and-the-bot">Permissions and the Bot&lt;/h3>
&lt;p>Opening new issues and leaving comments on other people&amp;rsquo;s issues are possible for all contributors. However, permission to assign specific labels (such as &lt;code>triage&lt;/code>), change milestones, or close other contributors issues is only granted to the author of an issue, assignees, and organization members. For this reason, we use a bot to manage labelling and triaging. For a full list of the bot&amp;rsquo;s commands and permissions, see the &lt;a href="https://go.k8s.io/bot-commands">Prow command reference page&lt;/a>.&lt;/p>
&lt;h3 id="triage-party">Triage Party&lt;/h3>
&lt;p>&lt;a href="https://github.com/google/triage-party">Triage Party&lt;/a> is a tool for triaging incoming GitHub issues for large open-source projects, built with the GitHub API. Made public in April 2020, it facilitates &amp;ldquo;massively multi-player GitHub triage&amp;rdquo; and reduces contributor response latency.&lt;/p>
&lt;p>Its features include:&lt;/p>
&lt;ul>
&lt;li>Queries across multiple repositories&lt;/li>
&lt;li>Queries that are not possible on GitHub:
&lt;ul>
&lt;li>conversation direction (&lt;code>tag: recv&lt;/code>, &lt;code>tag: send&lt;/code>)&lt;/li>
&lt;li>duration (&lt;code>updated: +30d&lt;/code>)&lt;/li>
&lt;li>regexp (&lt;code>label: priority/.*&lt;/code>)&lt;/li>
&lt;li>reactions (&lt;code>reactions: &amp;gt;=5&lt;/code>)&lt;/li>
&lt;li>comment popularity (&lt;code>comments-per-month: &amp;gt;0.9&lt;/code>)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Multiplayer mode: for simultaneous group triage of a pool of issues&lt;/li>
&lt;li>Button to open issue groups as browser tabs (pop-ups must be disabled)&lt;/li>
&lt;li>&amp;ldquo;Shift-Reload&amp;rdquo; for live data pull&lt;/li>
&lt;/ul>
&lt;h3 id="github-project-boards">GitHub Project Boards&lt;/h3>
&lt;p>GitHub offers project boards, set up like &lt;a href="https://en.wikipedia.org/wiki/Kanban">kanban boards&lt;/a>, to help teams organize and track their workflow in order to get work done. The Release Team has come to depend on &lt;a href="https://github.com/orgs/kubernetes/projects/68">their project board&lt;/a> for planning new Kubernetes releases; they also use it as an archive to show the work done for past releases.&lt;/p>
&lt;p>Other SIGs are also using project boards:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/orgs/kubernetes/projects/167">Apps&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/orgs/kubernetes/projects/116">Auth&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/orgs/kubernetes/projects/165">Scheduling&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>We encourage more SIGs to use project boards to enhance visibility and tracking. If you&amp;rsquo;d like some help getting started, visit &lt;a href="https://help.github.com/en/github/managing-your-work-on-github/about-project-boards">GitHub&amp;rsquo;s documentation&lt;/a> or reach out to &lt;a href="https://github.com/kubernetes/community/blob/main/sig-contributor-experience/README.md#contact">SIG Contributor Experience&lt;/a>.&lt;/p>
&lt;h3 id="devstats">DevStats&lt;/h3>
&lt;p>The CNCF has created a &lt;a href="https://devstats.cncf.io/">suite of Grafana dashboards and charts&lt;/a> for collecting metrics related to all the CNCF projects. The &lt;a href="https://k8s.devstats.cncf.io/d/12/dashboards?orgId=1&amp;refresh=15m">Kubernetes dashboard&lt;/a> can be used to help SIGs view real-time metrics on many aspects of their workflow, including:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://k8s.devstats.cncf.io/d/12/dashboards?from=1587157094179&amp;orgId=1&amp;refresh=15m&amp;to=1587758294179&amp;viewPanel=8">Issue Velocity&lt;/a>: How quickly issues are resolved&lt;/li>
&lt;li>&lt;a href="https://k8s.devstats.cncf.io/d/12/dashboards?from=1587157166022&amp;orgId=1&amp;refresh=15m&amp;to=1587758366022&amp;viewPanel=9">PR Velocity&lt;/a>: Including PR workload per SIG, PR time to approve and merge, and other data&lt;/li>
&lt;/ul>
&lt;h2 id="process-pointers-and-advice-from-sigs">Process Pointers and Advice from SIGs&lt;/h2>
&lt;p>Several SIGs consistently meet weekly or monthly to triage issues. Here are some details about their processes.&lt;/p>
&lt;h3 id="running-a-triage-meeting-tips-from-api-machinery">Running a Triage Meeting: Tips from api-machinery&lt;/h3>
&lt;p>The &lt;a href="https://github.com/kubernetes/community/blob/main/sig-api-machinery">api-machinery SIG&lt;/a> has found that triage meetings offer valuable opportunities for newcomers to listen, learn, and start contributing. The SIG hold triage meetings every Tuesday and Thursday and archive recordings via their &lt;a href="https://www.youtube.com/playlist?list=PL69nYSiGNLP21oW3hbLyjjj4XhrwKxH2R">YouTube playlist&lt;/a>. &lt;a href="https://www.youtube.com/watch?v=bRptR9vd4S8&amp;list=PL69nYSiGNLP21oW3hbLyjjj4XhrwKxH2R&amp;index=2&amp;t=13s">Watch an example of one of their meetings&lt;/a>.&lt;/p>
&lt;p>In a typical triage meeting, api-machinery members sort through every issue that they haven&amp;rsquo;t triaged since the previous meeting, using a simple query and issue number to track open PRs and issues. They usually follow this process:&lt;/p>
&lt;ol>
&lt;li>Read through the comments and the code briefly to understand what the issue is about.&lt;/li>
&lt;li>Determine by consensus if it belongs to the api-machinery SIG or not. If not, remove the &lt;code>sig/api-machinery&lt;/code> label.&lt;/li>
&lt;li>Label other SIGs, if appropriate&lt;/li>
&lt;li>Discuss briefly the technical implications&lt;/li>
&lt;li>Assign people with expertise in the domain to review, comment, reject, etc.&lt;/li>
&lt;/ol>
&lt;p>The api-machinery SIG has found that consistently meeting on a regular, fixed schedule is key to the success of a triaging effort. More frequent, small meetings are better than infrequent, large meetings. They also offer a few other pointers for successful triage meetings:&lt;/p>
&lt;ul>
&lt;li>We try to balance the load, and ask people if they are okay taking on an issue before assigning it to them.&lt;/li>
&lt;li>We skip issues that are closed.&lt;/li>
&lt;li>We also skip cherrypicks, because we consider that the code change was reviewed in the original PR.&lt;/li>
&lt;li>We ensure participation from the entire SIG and support company diversity.&lt;/li>
&lt;li>We use this opportunity to add &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#help-wantedgood-first-issues">&lt;code>help wanted&lt;/code> and &lt;code>good first issue&lt;/code>&lt;/a> labels.&lt;/li>
&lt;/ul>
&lt;h3 id="triage-guide-by-cluster-lifecycle">Triage Guide by cluster-lifecycle&lt;/h3>
&lt;p>The cluster-lifecycle SIG has developed a &lt;a href="https://github.com/kubernetes/community/blob/main/sig-cluster-lifecycle/grooming.md">triaging page&lt;/a> detailing their process, including the &lt;a href="https://github.com/kubernetes/community/blob/main/sig-cluster-lifecycle/grooming.md#planning-a-milestone">Milestones&lt;/a> stage. Here is a &lt;a href="https://www.youtube.com/watch?v=Q07_PfkNjlw">March 2020 presentation&lt;/a> delivered to the SIG chairs and leads group on their process.&lt;/p>
&lt;h2 id="step-one-review-newly-created-open-issues">Step One: Review Newly Created Open Issues&lt;/h2>
&lt;p>The first step in a successful triage meeting is reviewing newly created open issues. Kubernetes issues are listed &lt;a href="https://github.com/kubernetes/kubernetes/issues">here&lt;/a>. Labels are the primary tools for triaging. &lt;a href="https://github.com/kubernetes/kubernetes/labels">Here&amp;rsquo;s a comprehensive label list&lt;/a>.&lt;/p>
&lt;p>New issues are automatically assigned a &lt;code>needs-triage&lt;/code> label indicating that these issues are currently awaiting triage. After triaging an issue, the issue owning SIG will use the bot command &lt;code>/triage accepted&lt;/code>. This command removes the &lt;code>needs-triage&lt;/code> label and adds the &lt;code>triage/accepted&lt;/code> label.&lt;/p>
&lt;p>Note that adding labels requires Kubernetes GitHub org membership. If you are not an org member, you should add your triage findings as a comment.&lt;/p>
&lt;h3 id="conducting-searches">Conducting Searches&lt;/h3>
&lt;p>GitHub allows you to filter out types of issues and pull requests, which helps you discover items in need of triaging. This table includes some predetermined searches for convenience:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Search&lt;/th>
&lt;th>What it sorts&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;a href="https://github.com/kubernetes/kubernetes/issues?q=is%3Aissue+is%3Aopen+sort%3Acreated-asc">created-asc&lt;/a>&lt;/td>
&lt;td>Untriaged issues by age&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/kubernetes/kubernetes/issues?q=is%3Aissue+is%3Aopen+label%3Aneeds-sig">needs-sig&lt;/a>&lt;/td>
&lt;td>Issues that need to be assigned to a SIG&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/kubernetes/kubernetes/issues?q=is%3Aopen+is%3Aissue">&lt;code>is:open is:issue&lt;/code>&lt;/a>&lt;/td>
&lt;td>Newest incoming issues&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/kubernetes/kubernetes/issues?q=is%3Aissue+is%3Aopen+sort%3Acomments-desc">comments-desc&lt;/a>&lt;/td>
&lt;td>Busiest untriaged issues, sorted by # of comments&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/kubernetes/kubernetes/issues?q=is%3Aissue+is%3Aopen+sort%3Acomments-asc">comments-asc&lt;/a>&lt;/td>
&lt;td>Issues that need more attention, based on # of comments&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>We suggest preparing your triage by filtering out the oldest, unlabelled issues and pull requests first.&lt;/p>
&lt;h2 id="step-two-triage-issues-by-type">Step Two: Triage Issues by Type&lt;/h2>
&lt;p>Use &lt;a href="https://github.com/kubernetes/kubernetes/labels?utf8=%E2%9C%93&amp;q=triage%2F+kind%2Fsupport">these &lt;code>triage/&lt;/code> and &lt;code>kind/support&lt;/code> labels&lt;/a> to find open issues that can be quickly closed. A triage engineer can add the appropriate labels.&lt;/p>
&lt;p>Depending on your permissions, either close or comment on any issues that are identified as support requests, duplicates, or not-reproducible bugs, or that lack enough information from the reporter.&lt;/p>
&lt;h3 id="support-requests">Support Requests&lt;/h3>
&lt;p>Some people mistakenly use GitHub issues to file support requests. Usually they are asking for help configuring some aspect of Kubernetes. To handle such an issue, direct the author to use our &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#support-requests-channels">support request channels&lt;/a>. Then apply the &lt;code>kind/support&lt;/code> label, which is directed to our support structures, and apply the &lt;code>close&lt;/code> label.&lt;/p>
&lt;p>Please find more detailed information about Support Requests in the &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#further-notes">Further Notes section&lt;/a>.&lt;/p>
&lt;h3 id="abandoned-or-wrongly-placed-issues">Abandoned or Wrongly Placed Issues&lt;/h3>
&lt;p>If an issue is abandoned or in the wrong place, either close or comment on it.&lt;/p>
&lt;h3 id="needs-more-information">Needs More Information&lt;/h3>
&lt;p>The &lt;code>triage/needs-information&lt;/code> label indicates an issue needs more information in order for work to continue; comment on or close it.&lt;/p>
&lt;h3 id="bugs">Bugs&lt;/h3>
&lt;p>First, validate if the problem is a bug by trying to reproduce it.&lt;/p>
&lt;p>If you can reproduce it:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#step-three-define-priority">Define its priority&lt;/a>.&lt;/li>
&lt;li>Search for duplicates to see if the issue has been reported already. If a duplicate is found, let the issue reporter know, reference the original issue, and close the duplicate.&lt;/li>
&lt;/ul>
&lt;p>If you can&amp;rsquo;t reproduce it:&lt;/p>
&lt;ul>
&lt;li>Contact the issue reporter with your findings .&lt;/li>
&lt;li>Close the issue if both the parties agree that it could not be reproduced.&lt;/li>
&lt;/ul>
&lt;p>If you need more information to further work on the issue:&lt;/p>
&lt;ul>
&lt;li>Let the reporter know it by adding an issue comment. Include &lt;code>/triage needs-information&lt;/code> in the comment to apply the &lt;code>triage/needs-information&lt;/code> label.&lt;/li>
&lt;/ul>
&lt;p>In all cases, if you do not get a response within 20 days, close the issue with an appropriate comment. If you have permission to close someone else&amp;rsquo;s issue, first &lt;code>/assign&lt;/code> the issue to yourself, then &lt;code>/close&lt;/code> it. If you do not, please leave a comment describing your findings.&lt;/p>
&lt;h3 id="help-wantedgood-first-issues">Help Wanted/Good First Issues&lt;/h3>
&lt;p>To identify issues that are specifically groomed for new contributors, we use the &lt;a href="https://github.com/kubernetes/kubernetes/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22">help wanted&lt;/a>
and &lt;a href="https://github.com/kubernetes/kubernetes/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22">good first issue&lt;/a> labels. To use these labels:&lt;/p>
&lt;ul>
&lt;li>Review our specific &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/help-wanted/">guidelines&lt;/a> for how to use them.&lt;/li>
&lt;li>If the issue satisfies these guidelines, you can add the &lt;code>help wanted&lt;/code> label with the &lt;code>/help&lt;/code> command.
and the &lt;code>good first issue&lt;/code> label with the &lt;code>/good-first-issue&lt;/code> command. Please note that adding the &lt;code>good first issue&lt;/code> label will also automatically add the &lt;code>help wanted&lt;/code> label.&lt;/li>
&lt;li>If an issue has these labels but does not satisfy the guidelines, please ask for more details to be added to the issue or remove the labels using the &lt;code>/remove-help&lt;/code> or &lt;code>/remove-good-first-issue&lt;/code> commands.&lt;/li>
&lt;/ul>
&lt;h3 id="kind-labels">Kind Labels&lt;/h3>
&lt;p>Usually the &lt;code>kind&lt;/code> label is applied by the person submitting the issue. Issues that feature the wrong &lt;code>kind&lt;/code> (for example, support requests labelled as bugs) can be corrected by someone triaging; double-checking is a good approach. Our &lt;a href="https://github.com/kubernetes/kubernetes/issues/new/choose">issue templates&lt;/a> aim to steer people to the right kind.&lt;/p>
&lt;h2 id="step-three-define-priority">Step Three: Define Priority&lt;/h2>
&lt;p>We use GitHub labels for prioritization. If an issue lacks a &lt;code>priority&lt;/code> label, this means it has not been reviewed and prioritized yet.&lt;/p>
&lt;p>We aim for consistency across the entire project. However, if you notice an issue that you believe to be incorrectly prioritized, please leave a comment offering your counter-proposal and we will evaluate it.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Priority label&lt;/th>
&lt;th>What it means&lt;/th>
&lt;th>Examples&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>priority/critical-urgent&lt;/code>&lt;/td>
&lt;td>Team leaders are responsible for making sure that these issues (in their area) are being actively worked on—i.e., drop what you&amp;rsquo;re doing. Stuff is burning. These should be fixed before the next release.&lt;/td>
&lt;td>user-visible bugs in core features &lt;br> broken builds &lt;br> tests and critical security issues&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>priority/important-soon&lt;/code>&lt;/td>
&lt;td>Must be staffed and worked on either currently or very soon—ideally in time for the next release. Important, but wouldn&amp;rsquo;t block a release.&lt;/td>
&lt;td>[&lt;strong>XXXX&lt;/strong>]&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>priority/important-longterm&lt;/code>&lt;/td>
&lt;td>Important over the long term, but may not be currently staffed and/or may require multiple releases to complete. Wouldn&amp;rsquo;t block a release.&lt;/td>
&lt;td>[&lt;strong>XXXX&lt;/strong>]&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>priority/backlog&lt;/code>&lt;/td>
&lt;td>General agreement that this is a nice-to-have, but no one&amp;rsquo;s available to work on it anytime soon. Community contributions would be most welcome in the meantime, though it might take a while to get them reviewed if reviewers are fully occupied with higher-priority issues—for example, immediately before a release.&lt;/td>
&lt;td>[&lt;strong>XXXX&lt;/strong>]&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>priority/awaiting-more-evidence&lt;/code>&lt;/td>
&lt;td>Possibly useful, but not yet enough support to actually get it done.&lt;/td>
&lt;td>Mostly placeholders for potentially good ideas, so that they don&amp;rsquo;t get completely forgotten, and can be referenced or deduped every time they come up&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="step-four-find-and-set-the-right-sigs-to-own-an-issue">Step Four: Find and Set the Right SIG(s) to Own an Issue&lt;/h2>
&lt;p>Components are divided among &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/community/community-groups/">Special Interest Groups (SIGs)&lt;/a>. &lt;a href="https://go.k8s.io/bot-commands">The bot&lt;/a> assists in finding a proper SIG to own an issue.&lt;/p>
&lt;ul>
&lt;li>For example, typing &lt;code>/sig network&lt;/code> in a comment should add the &lt;code>sig/network&lt;/code> label.&lt;/li>
&lt;li>Multiword SIGs use dashes: for example, &lt;code>/sig cluster-lifecycle&lt;/code>.&lt;/li>
&lt;li>Keep in mind that these commands must be on their own lines, and at the front of the comment.&lt;/li>
&lt;li>If you are not sure about who should own an issue, defer to the SIG label only.&lt;/li>
&lt;li>If you feel an issue should warrant a notification, ping a team with an &lt;code>@&lt;/code> mention, in this format: &lt;code>@kubernetes/sig-&amp;lt;group-name&amp;gt;-&amp;lt;group-suffix&amp;gt;&lt;/code>. Here, the &lt;code>&amp;lt;group-suffix&amp;gt;&lt;/code> can be one of:
&lt;ul>
&lt;li>&lt;code>bugs&lt;/code>&lt;/li>
&lt;li>&lt;code>feature-requests&lt;/code>&lt;/li>
&lt;li>&lt;code>pr-reviews&lt;/code>&lt;/li>
&lt;li>&lt;code>test-failures&lt;/code>&lt;/li>
&lt;li>&lt;code>proposals&lt;/code>
For example: &lt;code>@kubernetes/sig-cluster-lifecycle-bugs, can you have a look at this?&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="self-assigning">Self-Assigning&lt;/h3>
&lt;p>If you think you can fix the issue, assign it to yourself with &lt;em>just&lt;/em> the &lt;code>/assign&lt;/code> command. If you cannot self-assign for permissions-related reasons, leave a comment that you&amp;rsquo;d like to claim it and &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/github-workflow/">begin working on a PR&lt;/a>.&lt;/p>
&lt;p>When an issue already has an assignee, &lt;strong>do not&lt;/strong> assign it to yourself or create a PR without talking to the existing assignee or going through the &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/#step-five-follow-up">Follow Up&lt;/a> steps as described in this document. Creating a PR when someone else is already working on an issue is not a good practice and is discouraged.&lt;/p>
&lt;h2 id="step-five-follow-up">Step Five: Follow Up&lt;/h2>
&lt;h3 id="if-no-pr-is-created-for-an-issue-within-the-current-release-cycle">If No PR is Created for an Issue Within the Current Release Cycle&lt;/h3>
&lt;p>If an issue is owned by a developer but a PR has not been created within 30 days, a triage engineer should contact the issue owner and ask them to either create a PR or release ownership.&lt;/p>
&lt;h3 id="if-a-sig-label-is-assigned-but-no-action-is-taken-within-30-days">If a SIG Label Is Assigned, but No Action Is Taken Within 30 Days&lt;/h3>
&lt;p>If you find an issue with a SIG label assigned, but there&amp;rsquo;s no evidence of movement or discussion within 30 days, then gently poke the SIG about this pending issue. Also, consider attending one of their meetings to bring up the issue.&lt;/p>
&lt;h3 id="if-an-issue-has-no-activity-after-90-days">If an Issue Has No Activity After 90 Days&lt;/h3>
&lt;p>When an issue goes 90 days without activity, the &lt;a href="https://github.com/k8s-triage-robot">k8s-triage-robot&lt;/a> adds the &lt;code>lifecycle/stale&lt;/code> label to that issue. You can block the bot by applying the &lt;code>/lifecycle frozen&lt;/code> label preemptively, or remove the label with the &lt;code>/remove-lifecycle stale&lt;/code> command. The k8s-triage-robot adds comments in the issue that include additional details. If you take neither step, the issue will eventually be auto-closed.&lt;/p>
&lt;h2 id="further-notes">Further Notes&lt;/h2>
&lt;h3 id="support-requests-channels">Support Requests: Channels&lt;/h3>
&lt;p>These should be directed to the following:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://kubernetes.io/docs/home/">User documentation&lt;/a> and
&lt;a href="https://kubernetes.io/docs/tasks/debug/">troubleshooting guide&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://kubernetes.slack.com">Slack&lt;/a> (&lt;a href="https://slack.k8s.io">registration&lt;/a>)&lt;/li>
&lt;li>&lt;a href="https://discuss.kubernetes.io">Discussion forums&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="user-support-response-example">User Support Response: Example&lt;/h3>
&lt;p>If you see support questions on &lt;a href="mailto:dev@kubernetes.io">dev@kubernetes.io&lt;/a> or issues asking for
support, try to redirect them to Discuss. Here is an example response:&lt;/p>
&lt;blockquote>
&lt;p>Please re-post your question to our &lt;a href="https://discuss.kubernetes.io">Discussion Forums&lt;/a>.&lt;/p>
&lt;p>We are trying to consolidate the channels to which questions for help/support
are posted so that we can improve our efficiency in responding to your requests,
and to make it easier for you to find answers to frequently asked questions and
how to address common use cases.&lt;/p>
&lt;p>We regularly see messages posted in multiple forums, with the full response
thread only in one place or, worse, spread across multiple forums. Also, the
large volume of support issues on GitHub is making it difficult for us to use
issues to identify real bugs.&lt;/p>
&lt;p>Members of the Kubernetes community use Discussion Forums to field
support requests. Before posting a new question, please search these for answers
to similar questions, and also familiarize yourself with:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://kubernetes.io/docs/home/">user documentation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://kubernetes.io/docs/tasks/debug/">troubleshooting guide&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Again, thanks for using Kubernetes.&lt;/p>
&lt;p>The Kubernetes Team&lt;/p>
&lt;/blockquote></description></item><item><title>Docs: Non-code Contributions</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/non-code-contributions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/non-code-contributions/</guid><description>
&lt;p>&lt;em>This section is new and in progress. Expect this document to change often.&lt;/em>&lt;/p>
&lt;p>&lt;em>If you are interested in helping define and structure this work, &lt;a href="https://docs.google.com/document/d/1gdFWfkrapQclZ4-z4Lx2JwqKsJjXXUOVoLhBzZiZgSk/edit">check the weekly meeting notes&lt;/a> for information on how to get involved. You can also find us in the SIG Contributor Experience &lt;a href="https://kubernetes.slack.com/messages/sig-contribex">Slack channel&lt;/a>.&lt;/em>&lt;/p>
&lt;p>&lt;em>All contributors welcome, new and old!&lt;/em>&lt;/p>
&lt;h3 id="what-is-this">What is this?&lt;/h3>
&lt;p>The list below is meant to help non-code contributors find areas of the Kubernetes project where their expertise can be best utilized. The goal of this is to both provide a starting guide for anyone looking to become a contributor not necessarily writing code, and also to fill any needs that the SIGs have that might not currently be filled by code-focused contributors.&lt;/p>
&lt;p>This list is meant to be used by both new contributors looking for a good entrance into the project, and current contributors who would like to do something different.&lt;/p>
&lt;p>Are you interested in any of the roles below? Come chat with us &lt;a href="https://kubernetes.slack.com/messages/sig-contribex">on Slack&lt;/a>!&lt;/p>
&lt;h4 id="project-general-roles">Project general roles&lt;/h4>
&lt;p>These are roles that either span the project as a whole, or span several areas of the project. Most of the roles below can be considered &amp;ldquo;good-first-roles&amp;rdquo;.&lt;/p>
&lt;ul>
&lt;li>Community education
&lt;ul>
&lt;li>Answering questions on &lt;a href="https://discuss.kubernetes.io/">Discuss&lt;/a>, &lt;a href="http://slack.k8s.io/">Slack&lt;/a>, &lt;a href="https://stackoverflow.com/questions/tagged/kubernetes">StackOverflow&lt;/a>, etc
&lt;ul>
&lt;li>&lt;a href="https://kubernetes.slack.com/messages/C8WRR2BB9/">Slack&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.youtube.com/playlist?list=PL69nYSiGNLP3QpQrhZq_sLYo77BVKv09F">YouTube&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Onboarding new contributors
&lt;ul>
&lt;li>Capturing the experiences of “Fresh Eyes” in the project&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Getting more people to &lt;a href="https://github.com/kubernetes/community/tree/master/sig-docs">SIG-Docs&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://kubernetes.io/docs/contribute/">Contribute to Kubernetes docs&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Doing demos
&lt;ul>
&lt;li>&lt;a href="https://github.com/kubernetes/community/blob/master/events/community-meeting.md">Kubernetes Weekly Community Meeting&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://www.youtube.com/playlist?list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ">YouTube&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Outward facing community work (might be more CNCF-oriented)
&lt;ul>
&lt;li>Hosting meetups and general evangelism
&lt;ul>
&lt;li>&lt;a href="https://github.com/cncf/meetups">meetups are managed by the CNCF&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.meetup.com/pro/cncf">Find CNCF meetups near you&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://discuss.kubernetes.io/c/events-and-meetups">See events in Discuss&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Presentation of work to meetups&lt;/li>
&lt;li>Visual Communication
&lt;ul>
&lt;li>Diagrams and visual explanations of concepts&lt;/li>
&lt;li>Infographic design&lt;/li>
&lt;li>Icon design&lt;/li>
&lt;li>Various artistic contributions to strengthen kubernetes brand, evangelize the project, and develop community&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Non-Documentation writing
&lt;ul>
&lt;li>Blogging about early experiences&lt;/li>
&lt;li>Operational manuals
&lt;ul>
&lt;li>Walkthroughs&lt;/li>
&lt;li>How-tos about integration experiences, tools, etc&lt;/li>
&lt;li>Playbooks for Ansible, Chef, Salt, etc&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Indexing of blogs, videos, etc&lt;/li>
&lt;li>Maintaining content for the new Contributor Site&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/comms/moderation/">Management of communication tools&lt;/a> (at the discretion of project maintainers)
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/comms/moderation/">Mailing list moderation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/comms/moderation/">Slack&lt;/a> or &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/comms/moderation/">Discourse management&lt;/a>&lt;/li>
&lt;li>Calendar management&lt;/li>
&lt;li>Analysis of our comm tools/metrics&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Volunteer management
&lt;ul>
&lt;li>Finding/Funneling contributors to the right SIGs or WGs&lt;/li>
&lt;li>Recognition of those who contribute a lot&lt;/li>
&lt;li>Recognition of projects and growth efforts&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Issue Triage
&lt;ul>
&lt;li>&lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/issue-triage/">Issue triage &amp;amp; labeling&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Event management
&lt;ul>
&lt;li>Helping run Contributor Summits&lt;/li>
&lt;li>Co-organizing Meetups&lt;/li>
&lt;li>Staffing Kubernetes booths at conferences&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h4 id="sig-specific-roles">SIG-specific roles&lt;/h4>
&lt;p>These are roles that are important to each and every SIG within the Kubernetes project. If you are interested in a specific topic within the project, you can contribute in several different ways for that specific SIG.&lt;/p>
&lt;ul>
&lt;li>Documentation
&lt;ul>
&lt;li>Common documentation for the SIG expertise area&lt;/li>
&lt;li>Updates
&lt;ul>
&lt;li>Reviewing/logging technical ownership for documentation that might need updating&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Translation&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>UX/UI Design&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/sig-release/tree/master/release-team">Release team roles&lt;/a>
&lt;ul>
&lt;li>All roles have shadows for onboarding new members&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Project management
&lt;ul>
&lt;li>Confirming ownership of tasks, issues, objects, etc
&lt;ul>
&lt;li>Rectifying “owned by everyone, so owned by no-one”&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Pull requests
&lt;ul>
&lt;li>PR triage &amp;amp; labeling&lt;/li>
&lt;li>Editing PR text: release note, statement&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Events
&lt;ul>
&lt;li>Organizing/helping run Face-to-Face meetings for SIGs/WGs/subprojects&lt;/li>
&lt;li>Putting together SIG Intros &amp;amp; Deep-dives for KubeCon/CloudNativeCon&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Managing &amp;amp; Uploading Recordings to YouTube&lt;/li>
&lt;/ul>
&lt;h4 id="non-code-tasks-in-primarily-code-roles">Non-Code Tasks in Primarily-Code roles&lt;/h4>
&lt;p>These are roles that are not code-based, but require knowledge of either general coding, or specific domain knowledge of the Kubernetes code base.&lt;/p>
&lt;ul>
&lt;li>Documentation
&lt;ul>
&lt;li>Documenting new features&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Some release roles
&lt;ul>
&lt;li>Managing release notes&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Github management (Tags, repos, etc)&lt;/li>
&lt;/ul>
&lt;h4 id="post-code-roles">Post-Code Roles&lt;/h4>
&lt;p>These are roles that are not code-based, but require knowledge of either general coding, or specific domain knowledge of the Kubernetes code base.&lt;/p>
&lt;ul>
&lt;li>Technical project leadership
&lt;ul>
&lt;li>Specifically, SIG-Architecture and Steering Committee&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Some release roles
&lt;ul>
&lt;li>Release Lead, Features Lead, etc&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Mentoring new contributors&lt;/li>
&lt;/ul></description></item><item><title>Docs: Adding Release Notes</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/release-notes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/release-notes/</guid><description>
&lt;p>On the &lt;a href="https://git.k8s.io/kubernetes/">kubernetes/kubernetes repository&lt;/a>, release notes
are required for any pull request with user-visible changes, this could mean:&lt;/p>
&lt;ul>
&lt;li>User facing, critical bug-fixes&lt;/li>
&lt;li>Notable feature additions&lt;/li>
&lt;li>Output format changes&lt;/li>
&lt;li>Deprecations or removals&lt;/li>
&lt;li>Metrics changes&lt;/li>
&lt;li>Dependency changes&lt;/li>
&lt;li>API changes&lt;/li>
&lt;/ul>
&lt;p>Release notes are one of the most important reference points for users about to
install or upgrade to a particular release of Kubernetes.&lt;/p>
&lt;h2 id="does-my-pull-request-need-a-release-note">Does my pull request need a release note?&lt;/h2>
&lt;p>Any user-visible or operator-visible change qualifies for a release note. This
could be a:&lt;/p>
&lt;ul>
&lt;li>CLI change&lt;/li>
&lt;li>API change&lt;/li>
&lt;li>UI change&lt;/li>
&lt;li>configuration schema change&lt;/li>
&lt;li>behavioral change&lt;/li>
&lt;li>change in non-functional attributes such as efficiency or availability,
availability of a new platform&lt;/li>
&lt;li>a warning about a deprecation&lt;/li>
&lt;li>fix of a previous &lt;em>Known Issue&lt;/em>&lt;/li>
&lt;li>fix of a vulnerability (CVE)&lt;/li>
&lt;/ul>
&lt;p>No release notes are required for changes to the following:&lt;/p>
&lt;ul>
&lt;li>Tests&lt;/li>
&lt;li>Build infrastructure&lt;/li>
&lt;li>Fixes for unreleased bugs&lt;/li>
&lt;/ul>
&lt;h2 id="contents-of-a-release-note">Contents of a Release Note&lt;/h2>
&lt;p>A release note needs a clear, concise description of the change. This includes:&lt;/p>
&lt;ol>
&lt;li>An indicator if the pull request &lt;em>Added&lt;/em>, &lt;em>Changed&lt;/em>, &lt;em>Fixed&lt;/em>, &lt;em>Removed&lt;/em>,
&lt;em>Deprecated&lt;/em> functionality or changed enhancement/feature maturity (alpha,
beta, stable/GA)&lt;/li>
&lt;li>An indicator if there is user &lt;em>Action required&lt;/em>&lt;/li>
&lt;li>The name of the affected API or configuration fields, CLI commands/flags or
enhancement/feature&lt;/li>
&lt;li>A link to relevant user documentation about the enhancement/feature&lt;/li>
&lt;/ol>
&lt;h2 id="writing-good-release-notes">Writing Good Release Notes&lt;/h2>
&lt;p>Good release notes can make a huge difference to the end user. To make sure that
your release notes are of the highest possible quality, follow these guidelines.&lt;/p>
&lt;ul>
&lt;li>Write your release notes in the past tense. For example, use &amp;ldquo;Added&amp;rdquo; instead
of &amp;ldquo;Add&amp;rdquo;, &amp;ldquo;Fixed&amp;rdquo; instead of &amp;ldquo;Fix&amp;rdquo;, and &amp;ldquo;Updated&amp;rdquo; instead of &amp;ldquo;Update&amp;rdquo;.&lt;/li>
&lt;li>Include a call to action if there is anything the end user needs to do, along
with a link to a blog post or documentation item to provide better context.&lt;/li>
&lt;li>Keep your release notes relevant to the end user.&lt;/li>
&lt;li>Use Markdown to add links and emphasis, to make your release notes more
readable and usable.&lt;/li>
&lt;li>Use good grammar and make sure you capitalize the first word of each
sentence.&lt;/li>
&lt;/ul>
&lt;p>Here are some pull requests with examples of exemplary release notes:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/kubernetes/kubernetes/pull/97252">https://github.com/kubernetes/kubernetes/pull/97252&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kubernetes/kubernetes/pull/105517">https://github.com/kubernetes/kubernetes/pull/105517&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>For more tips on writing good release notes, check out the &lt;a href="https://github.com/kubernetes/sig-release/tree/master/release-team/role-handbooks/docs">Release Notes Handbook&lt;/a>.&lt;/p>
&lt;h2 id="applying-a-release-note">Applying a Release Note&lt;/h2>
&lt;p>On the &lt;code>kubernetes/kubernetes&lt;/code> repository, release notes are required for any pull
request with user-visible changes.&lt;/p>
&lt;p>To meet this requirement, do one of the following:&lt;/p>
&lt;ul>
&lt;li>Add notes in the release notes block, or&lt;/li>
&lt;li>Update the release note label&lt;/li>
&lt;/ul>
&lt;p>If you don&amp;rsquo;t add release notes in the pull request template, the
&lt;code>do-not-merge/release-note-label-needed&lt;/code> label is added to your pull request
automatically after you create it. There are a few ways to update it.&lt;/p>
&lt;p>To add a release-note section to the pull request description, add your release
note beneath the question &lt;em>Does this PR introduce a user-facing change?&lt;/em>&lt;/p>
&lt;p>For pull requests that require additional action from users switching to the new
release, include the string &amp;ldquo;action required&amp;rdquo; (case insensitive) in the release
note.&lt;/p>
&lt;p>For an example, see &lt;a href="https://github.com/kubernetes/kubernetes/pull/107207">this pull request&lt;/a>.&lt;/p>
&lt;p>For pull requests that don&amp;rsquo;t need to be mentioned at release time, use the
&lt;code>/release-note-none&lt;/code> Prow command to add the &lt;code>release-note-none&lt;/code> label to the
PR. You can also write the string &amp;ldquo;NONE&amp;rdquo; as a release note in your PR
description.&lt;/p>
&lt;p>For an example of a pull request without release notes,
&lt;a href="https://github.com/kubernetes/kubernetes/pull/107910">take a look at this pull request&lt;/a>.&lt;/p>
&lt;p>Your release note should be written in clear and straightforward sentences. Most
often, users aren&amp;rsquo;t familiar with the technical details of your PR, so consider
what they &lt;em>need to know&lt;/em> when you write your release note.&lt;/p>
&lt;p>Some brief examples of release notes:&lt;/p>
&lt;pre tabindex="0">&lt;code>The deprecated flag --conntrack-max has been removed from kube-proxy. Users of this flag should switch to --conntrack-min and --conntrack-max-per-core instead. (#78399, @rikatz)
The --export flag for the kubectl get command, deprecated since v1.14, will be removed in v1.18.
Fixed a bug that prevents dry-run from being honored for the pod/eviction sub-resource. (#76969, @apelisse)
&lt;/code>&lt;/pre>&lt;p>Pull Request titles and body comments can be modified at any time prior to the
release to make them friendly for release notes.&lt;/p>
&lt;p>The release notes team maintains a
&lt;a href="https://github.com/kubernetes/sig-release/blob/master/release-team/role-handbooks/docs/relnotes-template.md">template&lt;/a>
for Kubernetes Release notes that may help clarify whether or not your PR
requires a release note. The most recent
&lt;a href="https://kubernetes.io/docs/setup/release/notes/">Kubernetes Release notes&lt;/a> can
also provide insight into the writing style for release notes.&lt;/p>
&lt;p>Release notes apply to pull requests on the master branch. For patch release
branches the automated cherry-pick pull requests process (see the
&lt;a href="https://github.com/kubernetes/community/blob/main/contributors/devel/sig-release/cherry-picks.md">cherry-pick instructions&lt;/a>)
should be followed. That automation will pull release notes from the master
branch PR from which the cherry-pick originated. On a rare occasion a pull
request on a patch release branch is not a cherry-pick, but rather is targeted
directly to the non-master branch and in this case, a &lt;code>release-note-*&lt;/code> label is
required for that non-master pull request.&lt;/p>
&lt;h2 id="reviewing-release-notes">Reviewing Release Notes&lt;/h2>
&lt;p>Reviewing the release notes of a pull request should be a dedicated step in the
overall review process. It is necessary to rely on the same metrics as other
reviewers to be able to distinguish release notes which might need to be
rephrased.&lt;/p>
&lt;p>As a guideline, a release notes entry needs to be rephrased if one of the
following cases apply:&lt;/p>
&lt;ul>
&lt;li>The release note does not communicate the full purpose of the change.&lt;/li>
&lt;li>The release note has no impact on any user.&lt;/li>
&lt;li>The release note is grammatically incorrect.&lt;/li>
&lt;/ul>
&lt;p>In any other case the release note should be fine.&lt;/p>
&lt;h2 id="related">Related&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://www.youtube.com/watch?v=n62oPohOyYs">Behind The Scenes: Kubernetes Release Notes Tips &amp;amp; Tricks - Mike Arpaia, Kolide (KubeCon 2018 Lightning Talk)&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Docs: OWNERS Files</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/owners/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/owners/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>OWNERS files are used to designate responsibility over different parts of the Kubernetes codebase.
Today, we use them to assign the &lt;strong>&lt;a href="https://git.k8s.io/community/community-membership.md#reviewer">reviewer&lt;/a>&lt;/strong> and &lt;strong>&lt;a href="https://git.k8s.io/community/community-membership.md#approver">approver&lt;/a>&lt;/strong>
roles (defined in our &lt;a href="https://git.k8s.io/community/community-membership.md">community membership doc&lt;/a>) that are used in our two-phase code review
process. Our OWNERS files were inspired by &lt;a href="https://chromium.googlesource.com/chromium/src/+/master/docs/code_reviews.md">Chromium OWNERS files&lt;/a> which in turn
inspired &lt;a href="https://help.github.com/articles/about-codeowners/">GitHub&amp;rsquo;s CODEOWNERS files&lt;/a>&lt;/p>
&lt;p>The velocity of a project that uses code review is limited by the number of people capable of
reviewing code. The quality of a person&amp;rsquo;s code review is limited by their familiarity with the code
under review. Our goal is to address both of these concerns through the prudent use and maintenance
of OWNERS files.&lt;/p>
&lt;h2 id="owners-spec">OWNERS spec&lt;/h2>
&lt;p>The &lt;a href="https://sigs.k8s.io/prow/pkg/repoowners/repoowners.go">k8s.io/test-infra/prow/repoowners package&lt;/a>
is the main consumer of OWNERS files. If this page is out of date, look there.&lt;/p>
&lt;h3 id="owners">OWNERS&lt;/h3>
&lt;p>Each directory that contains a unit of independent code or content may also contain an OWNERS file.
This file applies to everything within the directory, including the OWNERS file itself, sibling
files, and child directories.&lt;/p>
&lt;p>OWNERS files are in YAML format and support the following keys:&lt;/p>
&lt;ul>
&lt;li>&lt;code>approvers&lt;/code>: a list of GitHub usernames or aliases that can &lt;code>/approve&lt;/code> a PR&lt;/li>
&lt;li>&lt;code>labels&lt;/code>: a list of GitHub labels to automatically apply to a PR&lt;/li>
&lt;li>&lt;code>options&lt;/code>: a map of options for how to interpret this OWNERS file, currently only one:
&lt;ul>
&lt;li>&lt;code>no_parent_owners&lt;/code>: defaults to &lt;code>false&lt;/code> if not present; if &lt;code>true&lt;/code>, exclude parent OWNERS files.
Allows the use case where &lt;code>a/deep/nested/OWNERS&lt;/code> file prevents &lt;code>a/OWNERS&lt;/code> file from having any
effect on &lt;code>a/deep/nested/bit/of/code&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>reviewers&lt;/code>: a list of GitHub usernames or aliases that are good candidates to &lt;code>/lgtm&lt;/code> a PR&lt;/li>
&lt;li>&lt;code>emeritus_approvers&lt;/code> a list of GitHub usernames of folks who were previously in the &lt;code>approvers&lt;/code> section,
but are no longer actively approving code. please see &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/owners/#emeritus">below&lt;/a> for more details.&lt;/li>
&lt;/ul>
&lt;p>The above keys constitute a &lt;em>simple OWNERS configuration&lt;/em>.&lt;/p>
&lt;p>All users are expected to be assignable. In GitHub terms, this means they must be
members of the organization to which the repo belongs.&lt;/p>
&lt;p>A typical OWNERS file looks like:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#008000;font-weight:bold">approvers&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- alice&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- bob &lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#080;font-style:italic"># this is a comment&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#008000;font-weight:bold">reviewers&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- carol&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- david &lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#080;font-style:italic"># this is another comment&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- sig-foo&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#080;font-style:italic"># this is an alias&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="filters">Filters&lt;/h4>
&lt;p>An OWNERS file may also include a &lt;code>filters&lt;/code> key.
The &lt;code>filters&lt;/code> key is a map whose keys are &lt;a href="https://golang.org/pkg/regexp/#pkg-overview">Go regular expressions&lt;/a> and whose values are &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/owners/#owners">simple OWNERS configurations&lt;/a>.
The regular expression keys are matched against paths relative to the OWNERS file in which the keys are declared.
For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#008000;font-weight:bold">filters&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#b44">&amp;#34;.*&amp;#34;&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#008000;font-weight:bold">labels&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- re/all&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#b44">&amp;#34;\\.go$&amp;#34;&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#008000;font-weight:bold">labels&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- re/go&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you set &lt;code>filters&lt;/code> you must not set a &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/owners/#owners">simple OWNERS configuration&lt;/a> outside of &lt;code>filters&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Note:&lt;/strong> The &lt;code>options&lt;/code> key (e.g., &lt;code>no_parent_owners&lt;/code>) is an exception and may be set at the top level even when using &lt;code>filters&lt;/code>. All other owner-related keys such as &lt;code>approvers&lt;/code>, &lt;code>reviewers&lt;/code>, &lt;code>labels&lt;/code>, and &lt;code>emeritus_approvers&lt;/code> must be defined inside &lt;code>filters&lt;/code>.&lt;/p>
&lt;p>For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#080;font-style:italic"># WARNING: This use of &amp;#39;labels&amp;#39; and &amp;#39;filters&amp;#39; as siblings is invalid.&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#008000;font-weight:bold">labels&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>- re/all&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#008000;font-weight:bold">filters&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#b44">&amp;#34;\\.go$&amp;#34;&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#008000;font-weight:bold">labels&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- re/go&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Instead, set a &lt;code>.*&lt;/code> key inside &lt;code>filters&lt;/code> (as shown in the previous example).&lt;/p>
&lt;h4 id="emeritus">Emeritus&lt;/h4>
&lt;p>It is inevitable, but there are times when someone may shift focuses, change jobs or step away from
a specific area in the project for a time. These people may be domain experts over certain areas
of the codebase, but can no longer dedicate the time needed to handle the responsibilities of
reviewing and approving changes. They are encouraged to add themselves as an &lt;em>&amp;ldquo;emeritus&amp;rdquo;&lt;/em> approver
under the &lt;code>emeritus_approvers&lt;/code> key.&lt;/p>
&lt;p>GitHub usernames listed under the &lt;code>emeritus_approvers&lt;/code> key can no longer approve code (use the
&lt;code>/approve&lt;/code> command) and will be ignored by prow for assignment. However, it can still be referenced
by a person looking at the OWNERS file for a possible second or more informed opinion.&lt;/p>
&lt;p>When a contributor returns to being more active in that area, they may be promoted back to a
regular approver at the discretion of the current approvers.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#008000;font-weight:bold">emeritus_approvers&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>- david &lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#080;font-style:italic"># 2018-05-02&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>- emily &lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#080;font-style:italic"># 2019-01-05&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="cleanup">Cleanup&lt;/h4>
&lt;p>In addition to the Emeritus process above, from time to time, it is necessary
to prune inactive folks from OWNERS files. A core principle in maintaining a
healthy community is encouraging active participation. Those listed in OWNERS files
have a higher activity requirement, as they directly impact the ability of others
to contribute. If anyone listed in OWNERS files should become inactive, here is
what we will do:&lt;/p>
&lt;ul>
&lt;li>if the person is in reviewers section, their GitHub id will be removed from the section&lt;/li>
&lt;li>if the person is in approvers section, their GitHub id will be moved the &lt;code>emeritus_approvers&lt;/code> section.&lt;/li>
&lt;/ul>
&lt;p>An inactive person (listed in an OWNERS file) is defined as someone with less than
10 Devstats recorded contributions within the past year, as shown by this &lt;a href="https://k8s.devstats.cncf.io/d/13/developer-activity-counts-by-repository-group?orgId=1&amp;var-period_name=Last%20year&amp;var-metric=contributions&amp;var-repogroup_name=All&amp;var-repo_name=kubernetes%2Fkubernetes&amp;var-country_name=All">dashboard&lt;/a>.
This is a conservative metric but should ensure only the removal of the most inactive
folks from a OWNERS file.&lt;/p>
&lt;ul>
&lt;li>PR comments are less than 10 and Devstats count is less than 10 for a year&lt;/li>
&lt;/ul>
&lt;h3 id="owners_aliases">OWNERS_ALIASES&lt;/h3>
&lt;p>Each repo may contain at its root an OWNERS_ALIASES file.&lt;/p>
&lt;p>OWNERS_ALIASES files are in YAML format and support the following keys:&lt;/p>
&lt;ul>
&lt;li>&lt;code>aliases&lt;/code>: a mapping of alias name to a list of GitHub usernames&lt;/li>
&lt;/ul>
&lt;p>We use aliases for groups instead of GitHub Teams, because changes to GitHub Teams are not
publicly auditable.&lt;/p>
&lt;p>A sample OWNERS_ALIASES file looks like:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#008000;font-weight:bold">aliases&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#008000;font-weight:bold">sig-foo&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- david&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- erin&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#008000;font-weight:bold">sig-bar&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- bob&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- frank&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>GitHub usernames and aliases listed in OWNERS files are case-insensitive.&lt;/p>
&lt;h2 id="code-review-using-owners-files">Code Review using OWNERS files&lt;/h2>
&lt;p>This is a simplified description of our &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/#the-testing-and-merge-workflow">full PR testing and merge workflow&lt;/a>
that conveniently forgets about the existence of tests, to focus solely on the roles driven by
OWNERS files. Please see &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/owners/#automation-using-owners-files">below&lt;/a> for details on how specific
aspects of this process may be configured on a per-repo basis.&lt;/p>
&lt;h3 id="the-code-review-process">The Code Review Process&lt;/h3>
&lt;ul>
&lt;li>The &lt;strong>author&lt;/strong> submits a PR&lt;/li>
&lt;li>Phase 0: Automation suggests &lt;strong>&lt;a href="https://git.k8s.io/community/community-membership.md#reviewer">reviewers&lt;/a>&lt;/strong> and &lt;strong>&lt;a href="https://git.k8s.io/community/community-membership.md#approver">approvers&lt;/a>&lt;/strong> for the PR
&lt;ul>
&lt;li>Determine the set of OWNERS files nearest to the code being changed&lt;/li>
&lt;li>Choose at least two suggested &lt;strong>reviewers&lt;/strong>, trying to find a unique reviewer for every leaf
OWNERS file, and request their reviews on the PR&lt;/li>
&lt;li>Choose suggested &lt;strong>approvers&lt;/strong>, one from each OWNERS file, and list them in a comment on the PR&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Phase 1: Humans review the PR
&lt;ul>
&lt;li>&lt;strong>Reviewers&lt;/strong> look for general code quality, correctness, sane software engineering, style, etc.&lt;/li>
&lt;li>Anyone in the organization can act as a &lt;strong>reviewer&lt;/strong> with the exception of the individual who
opened the PR&lt;/li>
&lt;li>If the code changes look good to them, a &lt;strong>reviewer&lt;/strong> types &lt;code>/lgtm&lt;/code> in a PR comment or review;
if they change their mind, they &lt;code>/lgtm cancel&lt;/code>&lt;/li>
&lt;li>Once a &lt;strong>reviewer&lt;/strong> has &lt;code>/lgtm&lt;/code>&amp;lsquo;ed, &lt;a href="https://prow.k8s.io">prow&lt;/a>
(&lt;a href="https://github.com/k8s-ci-robot/">@k8s-ci-robot&lt;/a>) applies an &lt;code>lgtm&lt;/code> label to the PR&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Phase 2: Humans approve the PR
&lt;ul>
&lt;li>The PR &lt;strong>author&lt;/strong> &lt;code>/assign&lt;/code>&amp;rsquo;s all suggested &lt;strong>approvers&lt;/strong> to the PR, and optionally notifies
them (eg: &amp;ldquo;pinging @foo for approval&amp;rdquo;)&lt;/li>
&lt;li>Only people listed in the relevant OWNERS files, either directly or through an alias, as &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/owners/#owners_aliases">described
above&lt;/a>, can act as &lt;strong>approvers&lt;/strong>, including the individual who opened the PR.&lt;/li>
&lt;li>&lt;strong>Approvers&lt;/strong> look for holistic acceptance criteria, including dependencies with other features,
forwards/backwards compatibility, API and flag definitions, etc&lt;/li>
&lt;li>If the code changes look good to them, an &lt;strong>approver&lt;/strong> types &lt;code>/approve&lt;/code> in a PR comment or
review; if they change their mind, they &lt;code>/approve cancel&lt;/code>&lt;/li>
&lt;li>&lt;a href="https://prow.k8s.io">prow&lt;/a> (&lt;a href="https://github.com/k8s-ci-robot/">@k8s-ci-robot&lt;/a>) updates its
comment in the PR to indicate which &lt;strong>approvers&lt;/strong> still need to approve&lt;/li>
&lt;li>Once all &lt;strong>approvers&lt;/strong> (one from each of the previously identified OWNERS files) have approved,
&lt;a href="https://prow.k8s.io">prow&lt;/a> (&lt;a href="https://github.com/k8s-ci-robot/">@k8s-ci-robot&lt;/a>) applies an
&lt;code>approved&lt;/code> label&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Phase 3: Automation merges the PR:
&lt;ul>
&lt;li>If all of the following are true:
&lt;ul>
&lt;li>All required labels are present (eg: &lt;code>lgtm&lt;/code>, &lt;code>approved&lt;/code>)&lt;/li>
&lt;li>Any blocking labels are missing (eg: there is no &lt;code>do-not-merge/hold&lt;/code>, &lt;code>needs-rebase&lt;/code>)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>And if any of the following are true:
&lt;ul>
&lt;li>there are no presubmit prow jobs configured for this repo&lt;/li>
&lt;li>there are presubmit prow jobs configured for this repo, and they all pass after automatically
being re-run one last time&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Then the PR will automatically be merged&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="quirks-of-the-process">Quirks of the Process&lt;/h3>
&lt;p>There are a number of behaviors we&amp;rsquo;ve observed that while &lt;em>possible&lt;/em> are discouraged, as they go
against the intent of this review process. Some of these could be prevented in the future, but this
is the state of today.&lt;/p>
&lt;ul>
&lt;li>An &lt;strong>approver&lt;/strong>&amp;rsquo;s &lt;code>/lgtm&lt;/code> is simultaneously interpreted as an &lt;code>/approve&lt;/code>
&lt;ul>
&lt;li>While a convenient shortcut for some, it can be surprising that the same command is interpreted
in one of two ways depending on who the commenter is&lt;/li>
&lt;li>Instead, explicitly write out &lt;code>/lgtm&lt;/code> and &lt;code>/approve&lt;/code> to help observers, or save the &lt;code>/lgtm&lt;/code> for
a &lt;strong>reviewer&lt;/strong>&lt;/li>
&lt;li>This goes against the idea of having at least two sets of eyes on a PR, and may be a sign that
there are too few &lt;strong>reviewers&lt;/strong> (who aren&amp;rsquo;t also &lt;strong>approver&lt;/strong>)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Technically, anyone who is a member of the kubernetes GitHub organization can drive-by &lt;code>/lgtm&lt;/code> a
PR
&lt;ul>
&lt;li>Drive-by reviews from non-members are encouraged as a way of demonstrating experience and
intent to become a member or reviewer.&lt;/li>
&lt;li>Drive-by &lt;code>/lgtm&lt;/code>&amp;rsquo;s from members may be a sign that our OWNERS files are too small, or that the
existing &lt;strong>reviewers&lt;/strong> are too unresponsive&lt;/li>
&lt;li>This goes against the idea of specifying &lt;strong>reviewers&lt;/strong> in the first place, to ensure that
&lt;strong>author&lt;/strong> is getting actionable feedback from people knowledgeable with the code&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Reviewers&lt;/strong>, and &lt;strong>approvers&lt;/strong> are unresponsive
&lt;ul>
&lt;li>This causes a lot of frustration for &lt;strong>authors&lt;/strong> who often have little visibility into why their
PR is being ignored&lt;/li>
&lt;li>Many &lt;strong>reviewers&lt;/strong> and &lt;strong>approvers&lt;/strong> are so overloaded by GitHub notifications that @mention&amp;rsquo;ing
is unlikely to get a quick response&lt;/li>
&lt;li>An &lt;strong>author&lt;/strong> can work around this by manually reading the relevant OWNERS files,
&lt;code>/unassign&lt;/code>&amp;lsquo;ing unresponsive individuals, and &lt;code>/assign&lt;/code>&amp;lsquo;ing others&lt;/li>
&lt;li>This is a sign that our OWNERS files are stale; pruning the &lt;strong>reviewers&lt;/strong> and &lt;strong>approvers&lt;/strong> lists
would help with this&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Authors&lt;/strong> are unresponsive
&lt;ul>
&lt;li>This costs a tremendous amount of attention as context for an individual PR is lost over time&lt;/li>
&lt;li>This hurts the project in general as its general noise level increases over time&lt;/li>
&lt;li>Instead, close PR&amp;rsquo;s that are untouched after too long (we currently have a bot do this after 90
days)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="automation-using-owners-files">Automation using OWNERS files&lt;/h2>
&lt;p>Kubernetes uses the Prow Blunderbuss plugin and Tide.
Tide uses GitHub queries to select PRs into “tide pools”, runs as many in a
batch as it can (“tide comes in”), and merges them (“tide goes out”).&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://sigs.k8s.io/prow/pkg/plugins/blunderbuss">Blunderbuss plugin&lt;/a>:
&lt;ul>
&lt;li>responsible for determining &lt;strong>reviewers&lt;/strong>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://sigs.k8s.io/prow/cmd/tide">Tide&lt;/a>:
&lt;ul>
&lt;li>responsible for automatically running batch tests and merging multiple PRs together whenever possible.&lt;/li>
&lt;li>responsible for retriggering stale PR tests.&lt;/li>
&lt;li>responsible for updating a GitHub status check explaining why a PR can&amp;rsquo;t be merged (eg: a
missing &lt;code>lgtm&lt;/code> or &lt;code>approved&lt;/code> label)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="prowhttpssigsk8sioprowpkg">&lt;a href="https://sigs.k8s.io/prow/pkg">&lt;code>prow&lt;/code>&lt;/a>&lt;/h3>
&lt;p>Prow receives events from GitHub, and reacts to them. It is effectively stateless. The following
pieces of prow are used to implement the code review process above.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://sigs.k8s.io/prow/cmd/tide">cmd: tide&lt;/a>
&lt;ul>
&lt;li>per-repo configuration:
&lt;ul>
&lt;li>&lt;code>labels&lt;/code>: list of labels required to be present for merge (eg: &lt;code>lgtm&lt;/code>)&lt;/li>
&lt;li>&lt;code>missingLabels&lt;/code>: list of labels required to be missing for merge (eg: &lt;code>do-not-merge/hold&lt;/code>)&lt;/li>
&lt;li>&lt;code>reviewApprovedRequired&lt;/code>: defaults to &lt;code>false&lt;/code>; when true, require that there must be at least
one &lt;a href="https://help.github.com/articles/about-pull-request-reviews/">approved pull request review&lt;/a>
present for merge&lt;/li>
&lt;li>&lt;code>merge_method&lt;/code>: defaults to &lt;code>merge&lt;/code>; when &lt;code>squash&lt;/code> or &lt;code>rebase&lt;/code>, use that merge method instead
when clicking a PR&amp;rsquo;s merge button&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>merges PR&amp;rsquo;s once they meet the appropriate criteria as configured above&lt;/li>
&lt;li>if there are any presubmit prow jobs for the repo the PR is against, they will be re-run one
final time just prior to merge&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://sigs.k8s.io/prow/pkg/plugins/assign">plugin: assign&lt;/a>
&lt;ul>
&lt;li>assigns GitHub users in response to &lt;code>/assign&lt;/code> comments on a PR&lt;/li>
&lt;li>unassigns GitHub users in response to &lt;code>/unassign&lt;/code> comments on a PR&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://sigs.k8s.io/prow/pkg/plugins/approve">plugin: approve&lt;/a>
&lt;ul>
&lt;li>per-repo configuration:
&lt;ul>
&lt;li>&lt;code>issue_required&lt;/code>: defaults to &lt;code>false&lt;/code>; when &lt;code>true&lt;/code>, require that the PR description link to
an issue, or that at least one &lt;strong>approver&lt;/strong> issues a &lt;code>/approve no-issue&lt;/code>&lt;/li>
&lt;li>&lt;code>implicit_self_approve&lt;/code>: defaults to &lt;code>false&lt;/code>; when &lt;code>true&lt;/code>, if the PR author is in relevant
OWNERS files, act as if they have implicitly &lt;code>/approve&lt;/code>&amp;rsquo;d&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>adds the &lt;code>approved&lt;/code> label once an &lt;strong>approver&lt;/strong> for each of the required
OWNERS files has &lt;code>/approve&lt;/code>&amp;rsquo;d&lt;/li>
&lt;li>comments as required OWNERS files are satisfied&lt;/li>
&lt;li>removes outdated approval status comments&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://sigs.k8s.io/prow/pkg/plugins/blunderbuss">plugin: blunderbuss&lt;/a>
&lt;ul>
&lt;li>determines &lt;strong>reviewers&lt;/strong> and requests their reviews on PR&amp;rsquo;s&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://sigs.k8s.io/prow/pkg/plugins/lgtm">plugin: lgtm&lt;/a>
&lt;ul>
&lt;li>adds the &lt;code>lgtm&lt;/code> label when a &lt;strong>reviewer&lt;/strong> comments &lt;code>/lgtm&lt;/code> on a PR&lt;/li>
&lt;li>the &lt;strong>PR author&lt;/strong> may not &lt;code>/lgtm&lt;/code> their own PR&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://sigs.k8s.io/prow/pkg/repoowners/repoowners.go">pkg: k8s.io/test-infra/prow/repoowners&lt;/a>
&lt;ul>
&lt;li>parses OWNERS and OWNERS_ALIAS files&lt;/li>
&lt;li>if the &lt;code>no_parent_owners&lt;/code> option is encountered, parent owners are excluded from having
any influence over files adjacent to or underneath of the current OWNERS file&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="maintaining-owners-files">Maintaining OWNERS files&lt;/h2>
&lt;p>OWNERS files should be regularly maintained.&lt;/p>
&lt;p>We encourage people to self-nominate, self-remove or switch to &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/owners/#emeritus">emeritus&lt;/a> from OWNERS
files via PR&amp;rsquo;s. Ideally in the future we could use metrics-driven automation to assist in this
process.&lt;/p>
&lt;p>We should strive to:&lt;/p>
&lt;ul>
&lt;li>grow the number of OWNERS files&lt;/li>
&lt;li>add new people to OWNERS files&lt;/li>
&lt;li>ensure OWNERS files only contain organization members&lt;/li>
&lt;li>ensure OWNERS files only contain people are actively contributing to or reviewing the code they own&lt;/li>
&lt;li>remove inactive people from OWNERS files&lt;/li>
&lt;/ul>
&lt;p>Bad examples of OWNERS usage:&lt;/p>
&lt;ul>
&lt;li>directories that lack OWNERS files, resulting in too many hitting root OWNERS&lt;/li>
&lt;li>OWNERS files that have a single person as both approver and reviewer&lt;/li>
&lt;li>OWNERS files that haven&amp;rsquo;t been touched in over 6 months&lt;/li>
&lt;li>OWNERS files that have non organization members present&lt;/li>
&lt;/ul>
&lt;p>Good examples of OWNERS usage:&lt;/p>
&lt;ul>
&lt;li>team aliases are used that correspond to sigs&lt;/li>
&lt;li>there are more &lt;code>reviewers&lt;/code> than &lt;code>approvers&lt;/code>&lt;/li>
&lt;li>the &lt;code>approvers&lt;/code> are not in the &lt;code>reviewers&lt;/code> section&lt;/li>
&lt;li>OWNERS files that are regularly updated (at least once per release)&lt;/li>
&lt;/ul></description></item><item><title>Docs: Community Expectations</title><link>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/expectations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/expectations/</guid><description>
&lt;p>Kubernetes is a community project.
Consequently, it is wholly dependent on its community to provide a productive, friendly and collaborative environment.&lt;/p>
&lt;p>The first and foremost goal of the Kubernetes community is to develop orchestration
technology that radically simplifies the process of creating reliable
distributed systems.
However a second, equally important goal is the creation
of a community that fosters easy, agile development of such orchestration
systems.&lt;/p>
&lt;p>We therefore describe the expectations for members of the Kubernetes community.
This document is intended to be a living one that evolves as the community evolves via the same PR and code review process that shapes the rest of the project.
It currently covers the expectations of conduct that govern all members of the community as well as the expectations around code review that govern all active contributors to Kubernetes.&lt;/p>
&lt;h2 id="code-review">Code review&lt;/h2>
&lt;p>As a community we believe in the value of code review for all contributions.
Code review increases both the quality and readability of our codebase, which
in turn produces high quality software.&lt;/p>
&lt;p>See the &lt;a href="https://deploy-preview-689--kubernetes-contributor.netlify.app/docs/guide/pull-requests/">pull request documentation&lt;/a> for more information on code review.&lt;/p>
&lt;p>Consequently, as a community we expect that all active participants in the
community will also be active reviewers.
The &lt;a href="https://github.com/kubernetes/community/blob/main/community-membership.md">community membership&lt;/a> outlines the responsibilities
of the different contributor roles.&lt;/p>
&lt;p>Expect reviewers to request that you avoid &lt;a href="https://github.com/golang/go/wiki/CodeReviewComments">common go style
mistakes&lt;/a> in your PRs.&lt;/p>
&lt;h2 id="expectations-of-reviewers-review-comments">Expectations of reviewers: Review comments&lt;/h2>
&lt;p>Because reviewers are often the first points of contact between new members of
the community and can significantly impact the first impression of the
Kubernetes community, reviewers are especially important in shaping the
Kubernetes community.&lt;br>
Reviewers are highly encouraged to not only abide by the &lt;a href="https://github.com/kubernetes/community/blob/main/governance.md#code-of-conduct">code of conduct&lt;/a> but are strongly encouraged to go above and beyond the code of conduct to promote a collaborative, respectful Kubernetes community.&lt;/p>
&lt;h2 id="expectations-of-reviewers-review-latency">Expectations of reviewers: Review latency&lt;/h2>
&lt;p>Reviewers are expected to respond in a timely fashion to PRs that are assigned
to them.
Reviewers are expected to respond to an &lt;em>active&lt;/em> PRs with reasonable latency, and if reviewers fail to respond, those PRs may be assigned to other reviewers.&lt;/p>
&lt;p>If reviewers are unavailable to review for some time, they are expected to set their &lt;a href="https://help.github.com/en/articles/personalizing-your-profile#setting-a-status">user status&lt;/a> to &amp;ldquo;busy&amp;rdquo; so that the bot will not request reviews from them on new PRs automatically.
If they are unavailable for a longer period of time, they are expected to remove themselves from the OWNERS file and potentially nominate someone else.&lt;/p>
&lt;p>&lt;em>Active&lt;/em> PRs are considered those which have a proper CLA (&lt;code>cla:yes&lt;/code>) label
and do not need rebase to be merged.
PRs that do not have a proper CLA, or require a rebase are not considered active PRs.&lt;/p>
&lt;h2 id="thanks">Thanks&lt;/h2>
&lt;p>Many thanks in advance to everyone who contributes their time and effort to
making Kubernetes both a successful system as well as a successful community.
The strength of our software shines in the strengths of each individual
community member.&lt;br>
Thanks!&lt;/p></description></item></channel></rss>