Frank CI
========
Frank CI aims to be a minimal (but smart) continuous integration system.
To get started you simply deploy from with a WSGI server (e.g NGNIX) and configure
your git repository (github and others) to post a load after each push.
If your repository includes a top level file called `.frank.yaml` your
frank instance will react uppon the commands found in the file.
Frank commands
--------------
Frank understands the following file format::
.. text: yaml
commands:
- do_this
- do_that
- run_function_python
- deploy_there
do_this:
- shell: echo "this"
do_that:
shell:
- cd foo
- touch bar.txt
run_function_python:
python:
- foo.bar:callable_object
The `commands` is a mandatory list of commnads to excute after each push.
The order of the commands is how the will be executed.
Following the key `commands` are definitions of each command. Command can
by eith `shell` commands or some callable python object when specified as `python`
and given with full import path `foo.bar` and following callable object after
the collon.
Example 1:
----------
The following example will run the tests, build sphinx documentation and
publish static HTML files via rsync to another server::
.. text: yaml
commads:
- test
- build_sphinx
- publish
test:
shell:
- pip install -e .
- python setup.py test
build_sphinx:
shell:
cwd: docs
cmd: make html
publish:
shell:
- rsync -avz docs/build/html/ docserver.company.com:/var/www/docs/
This example demonstrates running multiple commands after the keyword `shell`.
You can also specify any keyword that the function `subprocess.Popen` accepts.
For example you can specify envirnment variables or the working directroy, as
in the example with the keyword `cwd`.
Example 2:
----------
TODO: demonstrate running of python code