diff options
| author | Tim Pepper <tpepper@vmware.com> | 2018-01-24 15:59:31 -0800 |
|---|---|---|
| committer | Tim Pepper <tpepper@vmware.com> | 2018-01-25 17:29:22 -0800 |
| commit | b75e54d47e2dc07f5f7f3db606327853ceb575f8 (patch) | |
| tree | 823b9b9e93ed45d65e3978a7739b57e1afad17af | |
| parent | 35d430cc0e0a41654ac932a304449eb1df01b88c (diff) | |
move coding-conventions.md to guide
The coding-conventions document covers useful introductory guidance for
all. This commit moves it out of the devel/ detail directory and into the
contributor/guide, fixing up links from other doc's in this repo and
leaving a cookie crumb of a document pointing at the new location.
Signed-off-by: Tim Pepper <tpepper@vmware.com>
| -rw-r--r-- | contributors/devel/README.md | 2 | ||||
| -rw-r--r-- | contributors/devel/coding-conventions.md | 132 | ||||
| -rw-r--r-- | contributors/devel/e2e-tests.md | 2 | ||||
| -rw-r--r-- | contributors/devel/pull-requests.md | 2 | ||||
| -rw-r--r-- | contributors/devel/testing.md | 2 | ||||
| -rw-r--r-- | contributors/guide/README.md | 3 | ||||
| -rw-r--r-- | contributors/guide/coding-conventions.md | 131 |
7 files changed, 139 insertions, 135 deletions
diff --git a/contributors/devel/README.md b/contributors/devel/README.md index 2c416296..7e93e6df 100644 --- a/contributors/devel/README.md +++ b/contributors/devel/README.md @@ -37,7 +37,7 @@ Guide](http://kubernetes.io/docs/admin/). ([instrumentation.md](instrumentation.md)): How to add a new metrics to the Kubernetes code base. -* **Coding Conventions** ([coding-conventions.md](coding-conventions.md)): +* **Coding Conventions** ([coding-conventions.md](../guide/coding-conventions.md)): Coding style advice for contributors. * **Document Conventions** ([how-to-doc.md](how-to-doc.md)) diff --git a/contributors/devel/coding-conventions.md b/contributors/devel/coding-conventions.md index 644228b1..23775c55 100644 --- a/contributors/devel/coding-conventions.md +++ b/contributors/devel/coding-conventions.md @@ -1,131 +1,3 @@ -# Coding Conventions +This document has been moved to https://git.k8s.io/community/contributors/guide/coding-conventions.md -Updated: 1/24/2018 - -**Table of Contents** - -- [Coding Conventions](#coding-conventions) - - [Code conventions](#code-conventions) - - [Testing conventions](#testing-conventions) - - [Directory and file conventions](#directory-and-file-conventions) - -## Code conventions - - - Bash - - - https://google.github.io/styleguide/shell.xml - - - Ensure that build, release, test, and cluster-management scripts run on -OS X - - - Go - - - [Go Code Review -Comments](https://github.com/golang/go/wiki/CodeReviewComments) - - - [Effective Go](https://golang.org/doc/effective_go.html) - - - Know and avoid [Go landmines](https://gist.github.com/lavalamp/4bd23295a9f32706a48f) - - - Comment your code. - - [Go's commenting -conventions](http://blog.golang.org/godoc-documenting-go-code) - - If reviewers ask questions about why the code is the way it is, that's a -sign that comments might be helpful. - - - Command-line flags should use dashes, not underscores - - - Naming - - Please consider package name when selecting an interface name, and avoid -redundancy. - - - e.g.: `storage.Interface` is better than `storage.StorageInterface`. - - - Do not use uppercase characters, underscores, or dashes in package -names. - - Please consider parent directory name when choosing a package name. - - - so pkg/controllers/autoscaler/foo.go should say `package autoscaler` -not `package autoscalercontroller`. - - Unless there's a good reason, the `package foo` line should match -the name of the directory in which the .go file exists. - - Importers can use a different name if they need to disambiguate. - - - Locks should be called `lock` and should never be embedded (always `lock -sync.Mutex`). When multiple locks are present, give each lock a distinct name -following Go conventions - `stateLock`, `mapLock` etc. - - - [API changes](api_changes.md) - - - [API conventions](api-conventions.md) - - - [Kubectl conventions](kubectl-conventions.md) - - - [Logging conventions](logging.md) - -## Testing conventions - - - All new packages and most new significant functionality must come with unit -tests - - - Table-driven tests are preferred for testing multiple scenarios/inputs; for -example, see [TestNamespaceAuthorization](https://git.k8s.io/kubernetes/test/integration/auth/auth_test.go) - - - Significant features should come with integration (test/integration) and/or -[end-to-end (test/e2e) tests](e2e-tests.md) - - Including new kubectl commands and major features of existing commands - - - Unit tests must pass on OS X 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). - - - Avoid relying on Docker hub (e.g. pull from Docker hub). Use gcr.io instead. - - - Avoid waiting for a short amount of time (or without waiting) and expect an -asynchronous thing to happen (e.g. wait for 1 seconds and expect a Pod to be -running). Wait and retry instead. - - - See the [testing guide](testing.md) for additional testing advice. - -## Directory and file conventions - - - Avoid package sprawl. Find an appropriate subdirectory for new packages. -(See [#4851](http://issues.k8s.io/4851) for discussion.) - - Libraries with no more appropriate home belong in new package -subdirectories of pkg/util - - - Avoid general utility packages. Packages called "util" are suspect. Instead, -derive a name that describes your desired function. For example, the utility -functions dealing with waiting for operations are in the "wait" package and -include functionality like Poll. So the full name is wait.Poll - - - All filenames should be lowercase - - - Go source files and directories use underscores, not dashes - - Package directories should generally avoid using separators as much as -possible (when packages are multiple words, they usually should be in nested -subdirectories). - - - Document directories and filenames should use dashes rather than underscores - - - Contrived examples that illustrate system features belong in -/docs/user-guide or /docs/admin, depending on whether it is a feature primarily -intended for users that deploy applications or cluster administrators, -respectively. Actual application examples belong in /examples. - - Examples should also illustrate [best practices for configuration and -using the system](https://kubernetes.io/docs/user-guide/config-best-practices/) - - - Third-party code - - - Go code for normal third-party dependencies is managed using -[Godeps](https://github.com/tools/godep) and is described in the kubernetes -[godep guide](godep.md) - - - Other third-party code belongs in `/third_party` - - forked third party Go code goes in `/third_party/forked` - - forked _golang stdlib_ code goes in `/third_party/forked/golang` - - - Third-party code must include licenses - - - This includes modified third-party code and excerpts, as well +This file is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. diff --git a/contributors/devel/e2e-tests.md b/contributors/devel/e2e-tests.md index 93c88adb..544b546a 100644 --- a/contributors/devel/e2e-tests.md +++ b/contributors/devel/e2e-tests.md @@ -798,6 +798,6 @@ metrics that kubernetes provides. ## One More Thing -You should also know the [testing conventions](coding-conventions.md#testing-conventions). +You should also know the [testing conventions](../guide/coding-conventions.md#testing-conventions). **HAPPY TESTING!** diff --git a/contributors/devel/pull-requests.md b/contributors/devel/pull-requests.md index 50e457a2..1fb42141 100644 --- a/contributors/devel/pull-requests.md +++ b/contributors/devel/pull-requests.md @@ -210,7 +210,7 @@ Let's talk about best practices so your PR gets reviewed quickly. ## 0. Familiarize yourself with project conventions * [Development guide](development.md) -* [Coding conventions](coding-conventions.md) +* [Coding conventions](../guide/coding-conventions.md) * [API conventions](api-conventions.md) * [Kubectl conventions](kubectl-conventions.md) diff --git a/contributors/devel/testing.md b/contributors/devel/testing.md index 340132d8..cd7dd124 100644 --- a/contributors/devel/testing.md +++ b/contributors/devel/testing.md @@ -41,7 +41,7 @@ passing, so it is often a good idea to make sure the e2e tests work as well. - Tests using linux-specific features must be skipped or compiled out. - Skipped is better, compiled out is required when it won't compile. * Concurrent unit test runs must pass. -* See [coding conventions](coding-conventions.md). +* See [coding conventions](../guide/coding-conventions.md). ### Run all unit tests diff --git a/contributors/guide/README.md b/contributors/guide/README.md index 279c38bd..897bef63 100644 --- a/contributors/guide/README.md +++ b/contributors/guide/README.md @@ -156,6 +156,7 @@ For a brief description of the importance of code review, please read [On Code R To make it easier for your PR to receive reviews, consider the reviewers will need you to: +* follow the project [coding conventions](coding-conventions.md) * write [good commit messages](https://chris.beams.io/posts/git-commit/) * break large changes into a logical series of smaller patches which individually make easily understandable changes, and in aggregate solve a broader issue * label PRs with appropriate SIGs and reviewers: to do this read the messages the bot sends you to guide you through the PR process @@ -213,4 +214,4 @@ Kubernetes is the main focus of CloudNativeCon/KubeCon, held twice per year in E ## Mentorship -* Please help write this section.
\ No newline at end of file +* Please help write this section. diff --git a/contributors/guide/coding-conventions.md b/contributors/guide/coding-conventions.md new file mode 100644 index 00000000..644228b1 --- /dev/null +++ b/contributors/guide/coding-conventions.md @@ -0,0 +1,131 @@ +# Coding Conventions + +Updated: 1/24/2018 + +**Table of Contents** + +- [Coding Conventions](#coding-conventions) + - [Code conventions](#code-conventions) + - [Testing conventions](#testing-conventions) + - [Directory and file conventions](#directory-and-file-conventions) + +## Code conventions + + - Bash + + - https://google.github.io/styleguide/shell.xml + + - Ensure that build, release, test, and cluster-management scripts run on +OS X + + - Go + + - [Go Code Review +Comments](https://github.com/golang/go/wiki/CodeReviewComments) + + - [Effective Go](https://golang.org/doc/effective_go.html) + + - Know and avoid [Go landmines](https://gist.github.com/lavalamp/4bd23295a9f32706a48f) + + - Comment your code. + - [Go's commenting +conventions](http://blog.golang.org/godoc-documenting-go-code) + - If reviewers ask questions about why the code is the way it is, that's a +sign that comments might be helpful. + + - Command-line flags should use dashes, not underscores + + - Naming + - Please consider package name when selecting an interface name, and avoid +redundancy. + + - e.g.: `storage.Interface` is better than `storage.StorageInterface`. + + - Do not use uppercase characters, underscores, or dashes in package +names. + - Please consider parent directory name when choosing a package name. + + - so pkg/controllers/autoscaler/foo.go should say `package autoscaler` +not `package autoscalercontroller`. + - Unless there's a good reason, the `package foo` line should match +the name of the directory in which the .go file exists. + - Importers can use a different name if they need to disambiguate. + + - Locks should be called `lock` and should never be embedded (always `lock +sync.Mutex`). When multiple locks are present, give each lock a distinct name +following Go conventions - `stateLock`, `mapLock` etc. + + - [API changes](api_changes.md) + + - [API conventions](api-conventions.md) + + - [Kubectl conventions](kubectl-conventions.md) + + - [Logging conventions](logging.md) + +## Testing conventions + + - All new packages and most new significant functionality must come with unit +tests + + - Table-driven tests are preferred for testing multiple scenarios/inputs; for +example, see [TestNamespaceAuthorization](https://git.k8s.io/kubernetes/test/integration/auth/auth_test.go) + + - Significant features should come with integration (test/integration) and/or +[end-to-end (test/e2e) tests](e2e-tests.md) + - Including new kubectl commands and major features of existing commands + + - Unit tests must pass on OS X 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). + + - Avoid relying on Docker hub (e.g. pull from Docker hub). Use gcr.io instead. + + - Avoid waiting for a short amount of time (or without waiting) and expect an +asynchronous thing to happen (e.g. wait for 1 seconds and expect a Pod to be +running). Wait and retry instead. + + - See the [testing guide](testing.md) for additional testing advice. + +## Directory and file conventions + + - Avoid package sprawl. Find an appropriate subdirectory for new packages. +(See [#4851](http://issues.k8s.io/4851) for discussion.) + - Libraries with no more appropriate home belong in new package +subdirectories of pkg/util + + - Avoid general utility packages. Packages called "util" are suspect. Instead, +derive a name that describes your desired function. For example, the utility +functions dealing with waiting for operations are in the "wait" package and +include functionality like Poll. So the full name is wait.Poll + + - All filenames should be lowercase + + - Go source files and directories use underscores, not dashes + - Package directories should generally avoid using separators as much as +possible (when packages are multiple words, they usually should be in nested +subdirectories). + + - Document directories and filenames should use dashes rather than underscores + + - Contrived examples that illustrate system features belong in +/docs/user-guide or /docs/admin, depending on whether it is a feature primarily +intended for users that deploy applications or cluster administrators, +respectively. Actual application examples belong in /examples. + - Examples should also illustrate [best practices for configuration and +using the system](https://kubernetes.io/docs/user-guide/config-best-practices/) + + - Third-party code + + - Go code for normal third-party dependencies is managed using +[Godeps](https://github.com/tools/godep) and is described in the kubernetes +[godep guide](godep.md) + + - Other third-party code belongs in `/third_party` + - forked third party Go code goes in `/third_party/forked` + - forked _golang stdlib_ code goes in `/third_party/forked/golang` + + - Third-party code must include licenses + + - This includes modified third-party code and excerpts, as well |
