From 8cdfa224c553f8bff70a65b5a7e30370dffcd98b Mon Sep 17 00:00:00 2001 From: "Eric J. Holmes" Date: Tue, 8 Aug 2017 21:26:45 -0700 Subject: [PATCH] Document package structure --- CONTRIBUTING.md | 13 +++++++++++++ docs/deps.png | Bin 0 -> 32629 bytes 2 files changed, 13 insertions(+) create mode 100644 docs/deps.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b307cb52d..0c6c127f9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,6 +25,19 @@ When submitting a pull request, here are some things to keep in mind: * Did you add appropriate test coverage? Submissions that add features or change core functionality will not be accepted without sufficient tests. We favor stability over anything else. * Did you update the CHANGELOG? +## Code Structure + +Empire is a fairly large codebase, separated into packages that depend on each other. In a nutshell, the most important packages are: + +* **[github.com/remind101/empire](./)**: This is the "core" internal API of Empire, which "control" layers (like the REST API) consume. +* **[github.com/remind101/empire/server](./server)**: This contains an [http.Handler](https://golang.org/pkg/net/http/#Handler) implementation for serving the Empire API, which is what the `emp` CLI communicates with. +* **[github.com/remind101/empire/scheduler](./scheduler)**: This is the layer that the core of Empire interacts with for submitting releases to be scheduled on a cluster of machines. The canonical implementation uses CloudFormation + ECS to run applications. +* **[github.com/remind101/empire/cmd](./cmd)**: Holds both the [empire](./cmd/empire) (daemon) command and [emp](./cmd/emp) (client) command. + +The dependency graph for the packages above, and how they interact with each other looks like this: + +![](./docs/deps.png) + ## Tests Unit tests live alongside each go file as `_test.go`. diff --git a/docs/deps.png b/docs/deps.png new file mode 100644 index 0000000000000000000000000000000000000000..3725566a11fd8210704be79cea1a943b42060cf4 GIT binary patch literal 32629 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