Docker build local
Simple sequential pipeline
This monitors a local Git repository (
repo), from which it gets the current
head commit. It copies it to a temporary clone and builds it with
docker build /path/to/clone, then executes the example with
--help to check that it runs.
$ git clone https://github.com/talex5/ocurrent.git $ cd ocurrent/ $ dune exec -- ./examples/docker_build_local.exe . [...] current [INFO] Evaluation complete: Result: Pending Watching: [/home/user/ocurrent/#refs/heads/master; HEAD(/home/user/ocurrent/)] [...] current.docker [INFO] Build of docker image "build-of-d75e33fd875d80cd8e0cddf83904dd6d7aea12d3" succeeded [...] current [INFO] Evaluation complete: Result: Ok () Watching: [/home/user/ocurrent/#refs/heads/master; HEAD(/home/user/ocurrent/)]
If you make a new commit or change branch (e.g.
git checkout -b test HEAD~1) then OCurrent will
notice and build it again.
The example code above works mostly with values of type
Docker.build takes a source current and returns a Docker image current.
If you have a function that works on concrete values then you can use
let+ syntax) to make it work on currents instead.
You can also use
Current.bind (or the
let* syntax) if you can only decide
what the next part of the pipeline should be by looking at a concrete input.
bind limits OCurrent’s ability to analyse the pipeline,
because it must wait for the input to be ready before knowing what happens
OCurrent has a small core language (in
lib_term), but most
functionality is added by external libraries. See the plugins directory for
The example also runs a minimal web UI on port 8080 (use
--port=... to change it),
showing the state of the system. You will need to have graphviz installed in order
to see the diagrams.
A green box indicates a pipeline stage that succeeded, orange means in-progress, grey means cannot be started yet (inputs not ready), yellow means queued or waiting for permission to start, and red means failed.
Clicking on a box shows the log for that operation (though not all operations
head commit doesn’t, for example).