Tell the project team how you are using cert-manager Take this short anonymous survey

Coding Conventions

cert-manager, like most Go projects, delegates almost all stylistic choices to gofmt, with goimports on top for organizing imports. Broadly speaking, if you set your editor to run goimports when you save a file, your code will be stylistically correct.

cert-manager generally also follows the Kubernetes coding conventions and the Google Go code review comments.

Organizing Imports

Imports should be organized into 3 blocks, with each block separated by two newlines:

import (
"stdlib"
"external"
"internal"
)

An example might be the following, taken from pkg/acme/accounts/client.go:

import (
"crypto/rsa"
"crypto/tls"
"net"
"net/http"
"time"
acmeapi "golang.org/x/crypto/acme"
acmecl "github.com/cert-manager/cert-manager/pkg/acme/client"
acmeutil "github.com/cert-manager/cert-manager/pkg/acme/util"
cmacme "github.com/cert-manager/cert-manager/pkg/apis/acme/v1"
"github.com/cert-manager/cert-manager/pkg/metrics"
"github.com/cert-manager/cert-manager/pkg/util"
)

Once this manual split of standard library, external and internal imports has been made, it will be enforced automatically by goimports when executed in the future.

UK vs. US spelling

For the sake of consistency, cert-manager uses en-US spelling for the documentation in https://cert-manager.io as well as within the cert-manager codebase. A comprehensive list of en-GB → en-US word substitution is available on Ubuntu's WordSubstitution page.