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