Local CI, for mortals.
Project description
CI for mortals
Note: EasyCI only works with git repositories.
Never worry about checking in broken code again. No need to maintain a CI server. No need to shell out ridiculous amount of money for your personal project. EasyCI puts your mind at ease, like a good CI service, but without all the extra costs.
EasyCI operates via git pre-commit
and pre-push
hooks to ensure that your code passes tests before letting you commit/push.
$ git commit
Running test: flake8
Passed
[master b2e6fa1] test commit
1 file changed, 2 insertions(+), 2 deletions(-)
EasyCI also makes sure not to run tests redundantly. If you ran tests before using eci test
, and no files have changed, then it does not try to run tests again.
$ eci test
Running test: flake8
Passed
$ git commit
OK Files not changed
[master b2e6fa1] test commit
1 file changed, 2 insertions(+), 2 deletions(-)
This means that if you run tests regularly as part of your workflow, there is effectively no efficiency cost in using EasyCI, yet you can rest easy knowing that if you forgot to run tests, you will not be allowed to commit/push.
Installation/Setup
First, install EasyCI using pip
.
pip install easyci
Next, setup EasyCI for your project.
cd /path/to/project
eci init
This will install the necessary git hooks and put a trivial config file eci.yaml
. You should modify the config file to actually run your tests.
Running Tests
Tests are run automatically by git’s pre-commit
and pre-push
hooks. To trigger tests manually:
# from anywhere in your project
eci test
Collecting Test Results
EasyCI preserves the state of your project by making a copy of your project using rsync
to a temporary directory. In some cases, you do want the files generated by your tests. For example, if your tests generate code coverage data, or other tests data, you will want the options to copy those files from the temporary directory back to your project directory. This can be done by the config collect_results
.
As an example, the following config will copy everything under the subdirectory htmlcov
, which in this case contains the code coverage report.
tests:
- coverage run -m py.test && coverage html
collect_results:
- htmlcov/***
For more information on the pattern format for collect_results
, see the man page for rsync
, which is used internally to copy the test results.
Config
The config lives in a file at the root of the repository, eci.yaml
.
key |
type |
Description |
---|---|---|
|
|
This is a list of commands to run tests. |
|
|
The number of passing test runs to remember. |
|
|
Copy files matching these patterns back to the project. The patterns must be in an |
Commands
eci init
This command is to be run inside the target repository. This installs the necessary hooks (pre-push + pre-commit) to check if tests have been run for the current commit.
eci test
This command creates a copy of your project and remove any ignored files before running tests. If tests pass, then it stores a hash representing the current state of your project in .git/eci/passed
.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.