constellation/dev-docs/conventions.md
Adrian Stobbe 7dcd8c3dab
dev-docs: refactor and add information for newbies (#1912)
* refactor dev-docs structure and add information

* improve doc

* Update dev-docs/workflows/create-debug-cluster.md

Co-authored-by: Daniel Weiße <66256922+daniel-weisse@users.noreply.github.com>

* Update dev-docs/workflows/create-debug-cluster.md

Co-authored-by: Daniel Weiße <66256922+daniel-weisse@users.noreply.github.com>

* pr feedback daniel

* Update dev-docs/README.md

Co-authored-by: Daniel Weiße <66256922+daniel-weisse@users.noreply.github.com>

* move to howto again

* split up dev-setup and pull-request into sep files

* fix backticks

* add writing style convention + testing repo

* remove OSS cluster + reduce plugins vs code

* update bazel pre-pr doc

* ghcr img private hint

* add fetch measurement + provider sub-directory hint

* add label doc + pr title check in template

* add OSS build comment

* Update CONTRIBUTING.md

Co-authored-by: Thomas Tendyck <51411342+thomasten@users.noreply.github.com>

* Update CONTRIBUTING.md

Co-authored-by: Thomas Tendyck <51411342+thomasten@users.noreply.github.com>

* Update dev-docs/README.md

Co-authored-by: Thomas Tendyck <51411342+thomasten@users.noreply.github.com>

* Update dev-docs/workflows/dev-setup.md

Co-authored-by: Thomas Tendyck <51411342+thomasten@users.noreply.github.com>

* thomas feedback

* add go proverb mention

---------

Co-authored-by: Daniel Weiße <66256922+daniel-weisse@users.noreply.github.com>
Co-authored-by: Thomas Tendyck <51411342+thomasten@users.noreply.github.com>
2023-06-19 17:39:43 +02:00

5.9 KiB
Raw Permalink Blame History

Writing to customers: style policy

Whenever you write text facing the customer (e.g, docs, warnings, errors), follow the Microsoft Style Guide. For quick reference, check Top 10 tips for Microsoft style and voice.

Go code conventions

General

Adhere to the style and best practices described in Effective Go. Read Common Review Comments for further information.

This project also aims to follow the Go Proverbs.

Linting

This projects uses golangci-lint for linting. You can install golangci-lint locally, but there is also a CI action to ensure compliance.

It is also recommended to use golangci-lint (and gofumpt as formatter) in your IDE, by adding the recommended VS Code Settings or by configuring it yourself

Logging

We use a custom subset of zap to provide logging for Constellations services and components. Usage instructions can be found in the package documentation.

Certain components may further specify a subset of the logger for their use. For example, the CLI has a debug-only logger, restricting the use of the logger to only Debugf().

Further we try to adhere to the following guidelines:

  • Do not log potentially sensitive information, e.g. variables that contain keys, secrets or otherwise protected information.

  • Start log messages in uppercase and end without a punctuation mark. Exclamation, question marks, or ellipsis may be used where appropriate.

    Example:

    log.Infof("This is a log message")
    log.Infof("Waiting to do something...")
    log.Error("A critical error occurred!")
    
  • Use the With() method to add structured context to your log messages. The context tags should be easily searchable to allow for easy log filtering. Try to keep consistent tag naming!

    Example:

    log.With(zap.Error(someError), zap.String("ip", "192.0.2.1")).Errorf("Connecting to IP failed")
    
  • Log messages may use format strings to produce human readable messages. However, the information should also be present as structured context fields if it might be valuable for debugging purposes.

    Example:

    log.Infof("Starting server on %s:%s", addr, port)
    
  • Usage of the Fatalf() method should be constrained to the main package of an application only!

  • Use log levels to configure how detailed the logs of you application should be.

    • Debugf() for log low level and detailed information. This may include variable dumps, but should not disclose sensitive information, e.g. keys or secret tokens.
    • Infof() for general information.
    • Warnf() for information that may indicate unwanted behavior, but is not an application error. Commonly used by retry loops.
    • Errorf() to log information about any errors that occurred.
    • Fatalf() to log information about any errors that occurred and then exit the program. Should only be used in the main package of an application.
  • Loggers passed to subpackages of an application may use the Named() method for better understanding of where a message originated.

    Example:

    grpcServer, err := server.New(log.Named("server"))
    

Nested Go modules

As this project contains nested Go modules, we use a Go work file to ease integration with IDEs. You can find an introduction in the Go workspace tutorial.

Code documentation

Documentation of the latest release are available on pkg.go.dev.

Alternatively use pkgsite to host your own documentation server and view documentation for the local version of your code.

View installation instructions
CONSTELLATION_DIR=</path/to/your/local/report>
git clone https://github.com/golang/pkgsite && cd pkgsite
go install ./cmd/pkgsite
cd "${CONSTELLATION_DIR}
pkgsite

You can now view the documentation on http://localhost:8080/github.com/edgelesssys/constellation/v2

CLI reference

The command reference within the CLI should follow the following conventions:

  • Short description: Starts with a capital letter, beginnings of sentences, names and acronyms are capitalized, ends without a period. It should be a single sentence.
  • Long description: Starts with a capital letter, beginnings of sentences, names and acronyms are capitalized, ends with a period.
    • If the long description contains multiple sentences, the first sentence is formatted as a long description, followed by 2 newlines and the rest of the sentences. The rest of the sentences start with a capital letter, beginnings of sentences, names and acronyms are capitalized and each sentence ends with a period.
  • Flag: Starts with a lowercase letter, beginnings of sentences, names and acronyms are capitalized, ends without a period.
    • If a flag contains multiple sentences, the first sentence is formatted as a normal flag, followed by a newline and the rest of the sentences. The rest of the sentences start with a capital letter, beginnings of sentences, names and acronyms are capitalized and each sentence ends with a period.

Naming convention

Network

IP addresses:

  • ip: numeric IP address
  • host: either IP address or hostname
  • endpoint: host+port

Keys

  • key: symmetric key
  • pubKey: public key
  • privKey: private key

Shell script code conventions

We use shellcheck to ensure code quality. You might want to install an IDE extension.