rtyler / otto

Otto is your friendly continuous delivery companion.
GNU Affero General Public License v3.0
80 stars 5 forks source link
ci ci-cd continuous-delivery rust

:toc: macro

= Otto

link:https://webchat.freenode.net/?channels=#otto[Chat on IRC]

Meet Otto, your friendly continuous delivery companion.

Otto is a robust distributed system for scalable continuous integration and delivery. To accomplish this Otto is multi-process oriented and distributed by default; all system interactions must occur over process boundaries even if executing in the same logical host. This document outlines the high level architecture but omits specific inter-process communication formats, protocols, and dependencies.

Otto does not aim to be the center of the entire continuous delivery process, but rather seeks to interoperate seamlessly with all the various components which make CD work for you.

toc::[]

= Status

Otto is currently not usable.

There are link:rfc[design documents] in the rfc/ directory which can help describe the state of development for Otto.

The components are in different states of development. Please consult the README document in the subfolders for their current purpose and status.

= Development

Much of Otto is built in link:https://www.rust-lang.org/[Rust]. The project is a "cargo workspace" which means that there are multiple binaries and libraries defined in the source tree, which can all be built together via the root Cargo.toml. Much can be accomplished with cargo build and cargo test, which is easily scoped to a single project via the -p flag, for example cargo test -p otto-parser. There is also a Makefile which drives some higher-level build system behavior.

Otto is composed of many different services, which communicate via JSON over HTTP.

== Make targets

Running make in the root directory will list some brief help output, but some useful make targets to be aware of are documented below:

=== release

Build and strip release binaries to prepare for packaging. Most developers won't need to execute this target.

=== run

Launch the services defined in the Procfile. This requires a cargo build ahead of time, and is really only useful for manual integration testing.

=== steps

This target will build and package all the steps defined in stdlib/

=== test

Runs all the acceptance tests, typically implemented with link:https://github.com/kward/shunit2/[shunit2]. This target will not run cargo build or cargo test. From a fresh clone, running the acceptance tests will require an initial build, for example cargo build && make test.

== Subdirectories

Each subdirectory should have its own README with a little more information, but at a glance:

=== cli/

This directory contains all the command-line interfaces for Otto.

=== crates/

This directory contains the various pieces of shared code

=== rfcs/

RFCs (Request for Comment) are design documents for different patterns or subcomponents within Otto.

=== services/

Projects in this directory are Otto's mesh of services, which speak HTTP to provide different aspects of functionality for the Otto project.

=== stdlib/

The Otto step "Standard Library." In essence, these are all the step libraries that are assumed to be installed by default with Otto.

== Problems to Solve

Below is an incomplete listing of the problems Otto aims to solve for:

== Modeling Continuous Delivery

Some characteristics of a continuous delivery process model which Otto must ensure: