diff --git a/README.md b/README.md index 551a3e6..2b181d3 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,48 @@ # current-web-pipelines -` current-web-pipelines` is a wrapper on top of `ocurrent` pipelines that provide tools -to build complex interfaces, for example representing multi-stage pipelines. +` current-web-pipelines` is a wrapper on top of `ocurrent` pipelines that +provide tools to build complex interfaces, for example representing multi-stage +pipelines. +# Usage + +There are three modules: + +## `Task` + +`('value, 'state) Task.t` is the equivalent of `'value Current.t` with extra +metadata of type `'state`. While the value might not be available (for example +because it is not computed yet), the state can be obtained at all time. `Task` +provides combinators and specialized constructors to construct a reactive state +structure that can be extracted and displayed in various ways. + +## `State` + +`('output, 'node_metadata, 'stage_metadata, 'pipeline_metadata) State.pipeline` +is one example of state that can be bound to a task. This type represents the +state of a pipeline run, using the following structure: +- pipeline metadata +- stage list: + - stage metadata + - node tree list: + - node metadata + - output or status + +This tree structure is displayed using the `Web` module. + +## `Web` + +Use `Web.Make` to create an instance of the website. The API requires to use: +- `make` to initialize +- `update_state` to track the state of a pipeline run. In particular each + pipeline run is bound to a _source_ (the reason why it runs) and is part of a + group. +- `set_active_sources` to track which sources are still active +- `routes` to provide `current_web` with additional routes for the + generated website + +# Examples + +See the `example/` folder for an end-to-end usage of `current-web-pipelines`. +It's also deployed in `mirage-ci` (https://github.com/ocurrent/mirage-ci) and +was used in `tezos-ci` (https://github.com/tarides/tezos-ci).