161 lines
5.5 KiB
Markdown
161 lines
5.5 KiB
Markdown
<!-- BEGIN MUNGE: UNVERSIONED_WARNING -->
|
|
|
|
<!-- BEGIN STRIP_FOR_RELEASE -->
|
|
|
|
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
|
|
width="25" height="25">
|
|
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
|
|
width="25" height="25">
|
|
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
|
|
width="25" height="25">
|
|
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
|
|
width="25" height="25">
|
|
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
|
|
width="25" height="25">
|
|
|
|
<h2>PLEASE NOTE: This document applies to the HEAD of the source tree</h2>
|
|
|
|
If you are using a released version of Kubernetes, you should
|
|
refer to the docs that go with that version.
|
|
|
|
<!-- TAG RELEASE_LINK, added by the munger automatically -->
|
|
<strong>
|
|
The latest release of this document can be found
|
|
[here](http://releases.k8s.io/release-1.2/docs/devel/automation.md).
|
|
|
|
Documentation for other releases can be found at
|
|
[releases.k8s.io](http://releases.k8s.io).
|
|
</strong>
|
|
--
|
|
|
|
<!-- END STRIP_FOR_RELEASE -->
|
|
|
|
<!-- END MUNGE: UNVERSIONED_WARNING -->
|
|
|
|
# Kubernetes Development Automation
|
|
|
|
## Overview
|
|
|
|
Kubernetes uses a variety of automated tools in an attempt to relieve developers
|
|
of repetitive, low brain power work. This document attempts to describe these
|
|
processes.
|
|
|
|
|
|
## Submit Queue
|
|
|
|
In an effort to
|
|
* reduce load on core developers
|
|
* maintain e2e stability
|
|
* load test githubs label feature
|
|
|
|
We have added an automated [submit-queue]
|
|
(https://github.com/kubernetes/contrib/blob/master/mungegithub/mungers/submit-queue.go)
|
|
to the
|
|
[github "munger"](https://github.com/kubernetes/contrib/tree/master/mungegithub)
|
|
for kubernetes.
|
|
|
|
The submit-queue does the following:
|
|
|
|
```go
|
|
for _, pr := range readyToMergePRs() {
|
|
if testsAreStable() {
|
|
mergePR(pr)
|
|
}
|
|
}
|
|
```
|
|
|
|
The status of the submit-queue is [online.](http://submit-queue.k8s.io/)
|
|
|
|
### Ready to merge status
|
|
|
|
A PR is considered "ready for merging" if it matches the following:
|
|
* it has the `lgtm` label, and that `lgtm` is newer than the latest commit
|
|
* it has passed the cla pre-submit and has the `cla:yes` label
|
|
* it has passed the travis pre-submit tests
|
|
* one (or all) of
|
|
* its author is in kubernetes/contrib/submit-queue/whitelist.txt
|
|
* its author is in contributors.txt via the github API.
|
|
* the PR has the `ok-to-merge` label
|
|
* One (or both of)
|
|
* it has passed the Jenkins e2e test
|
|
* it has the `e2e-not-required` label
|
|
|
|
Note that the combined whitelist/committer list is available at
|
|
[submit-queue.k8s.io](http://submit-queue.k8s.io)
|
|
|
|
### Merge process
|
|
|
|
Merges _only_ occur when the `critical builds` (Jenkins e2e for gce, gke,
|
|
scalability, upgrade) are passing. We're open to including more builds here, let
|
|
us know...
|
|
|
|
Merges are serialized, so only a single PR is merged at a time, to ensure
|
|
against races.
|
|
|
|
If the PR has the `e2e-not-required` label, it is simply merged. If the PR does
|
|
not have this label, e2e tests are re-run, if these new tests pass, the PR is
|
|
merged.
|
|
|
|
If e2e flakes or is currently buggy, the PR will not be merged, but it will be
|
|
re-run on the following pass.
|
|
|
|
## Github Munger
|
|
|
|
We also run a [github "munger."]
|
|
(https://github.com/kubernetes/contrib/tree/master/mungegithub)
|
|
|
|
This runs repeatedly over github pulls and issues and runs modular "mungers"
|
|
similar to "mungedocs."
|
|
|
|
Currently this runs:
|
|
* blunderbuss - Tries to automatically find an owner for a PR without an
|
|
owner, uses mapping file here:
|
|
https://github.com/kubernetes/contrib/blob/master/mungegithub/blunderbuss.yml
|
|
* needs-rebase - Adds `needs-rebase` to PRs that aren't currently mergeable,
|
|
and removes it from those that are.
|
|
* size - Adds `size/xs` - `size/xxl` labels to PRs
|
|
* ok-to-test - Adds the `ok-to-test` message to PRs that have an `lgtm` but
|
|
the e2e-builder would otherwise not test due to whitelist
|
|
* ping-ci - Attempts to ping the ci systems (Travis) if they are missing from
|
|
a PR.
|
|
* lgtm-after-commit - Removes the `lgtm` label from PRs where there are
|
|
commits that are newer than the `lgtm` label
|
|
|
|
In the works:
|
|
* issue-detector - machine learning for determining if an issue that has been
|
|
filed is a `support` issue, `bug` or `feature`
|
|
|
|
Please feel free to unleash your creativity on this tool, send us new mungers
|
|
that you think will help support the Kubernetes development process.
|
|
|
|
## PR builder
|
|
|
|
We also run a robotic PR builder that attempts to run e2e tests for each PR.
|
|
|
|
Before a PR from an unknown user is run, the PR builder bot (`k8s-bot`) asks to
|
|
a message from a contributor that a PR is "ok to test", the contributor replies
|
|
with that message. Contributors can also add users to the whitelist by replying
|
|
with the message "add to whitelist" ("please" is optional, but remember to treat
|
|
your robots with kindness...)
|
|
|
|
If a PR is approved for testing, and tests either haven't run, or need to be
|
|
re-run, you can ask the PR builder to re-run the tests. To do this, reply to the
|
|
PR with a message that begins with `@k8s-bot test this`, this should trigger a
|
|
re-build/re-test.
|
|
|
|
|
|
## FAQ:
|
|
|
|
#### How can I ask my PR to be tested again for Jenkins failures?
|
|
|
|
Right now you have to ask a contributor (this may be you!) to re-run the test
|
|
with "@k8s-bot test this"
|
|
|
|
### How can I kick Travis to re-test on a failure?
|
|
|
|
Right now the easiest way is to close and then immediately re-open the PR.
|
|
|
|
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
|
|
[]()
|
|
<!-- END MUNGE: GENERATED_ANALYTICS -->
|