This document describes our official layout standards. It serves as a guide for contributors to help them in organizing code and placing packages into the correct locations. Signed-off-by: Andrew Rynhard <andrew@andrewrynhard.com>
1.8 KiB
Project Layout Standards
In this document we will cover our official layout standards. You will find that the project is a monolithic repository that contains everything required to build and run Talos.
$ tree .
.
├── api
├── cmd
├── docs
├── hack
├── internal
│ ├── app
│ │ ├── app1
│ │ │ ├── internal
│ │ │ ├── pkg
│ │ │ └── proto
│ │ └── app2
│ │ ├── internal
│ │ ├── pkg
│ │ └── proto
│ └── pkg
└── pkg
Internal Applications
Talos is comprised of applications designed to handle the various domains of
an operating system.
The following requirements must be adhered to by an app
:
- anything ran as a service, that is maintained by us, should live under
internal/app
- each
app
is allowed at most 1 level of aninternal
package
Internal Packages
There are a number of packages we will need to maintain that are strongly
coupled with Talos business logic.
These package should be housed within the internal/pkg
directory.
The criteria for deciding if a package should be housed here are as follows:
- code that is a high level abstraction specific to the internals of Talos
- code that should not be exposed publicly
Public Packages
In building higher level abstractions, we should strive to create generic, general use packages that can be used independent of Talos. The following rules apply to public packages:
- a
pkg
should never containinternal
code
Graduation Criteria
In deciding if a package should be moved to an external repository, the following should be taken into consideration:
- are there requests for exposing the package?
- are there people willing to maintain the package?