Test a test script for remote CI services locally
Posted: ,
Modified:
Summary
You usually employ remote CI services such as Travis CI
to automatically test your projects hosted in GitHub.
Your tests should be passed in such CI services always because you have made sure
your codebase passes the tests before pushing.
However, .travis.yml
, the configuration file of Travis, sometimes has bugs and
your dependency list sometime loses any libraries.
If your codebase fails tests in remote CI services, you need to fix bugs and re-push, and your commit history gets messy. If you’re working with colleague’s repository, you should care about it more.
To evaluate those tests locally, I made Loci, which runs tests in a sandbox based on Docker. Loci currently supports Python and Go projects.
Installation
Loci uses Docker. If you don’t have it, install it first.
You can install Loci in several ways. If you’re familiar with Go, run
$ go get github.com/jkawamoto/loci
or if you’re a Homebrew user, run
$ brew tap jkawamoto/loci
$ brew install loci
Otherwise, you can get a compiled binary from GitHub.
Usage
If your current directory has .travis.yml
, just run loci
command.
If you want to test another file, give the path after loci
command like loci <path>
.
First time, Loci build container images which install dependent packages listed in .travis.yml
, and it may take long time,
but those images can be reusable.
If you have cache servers of APT repository and PyPI repository,
give their addresses via --apt-proxy
and --pypi-proxy
flags.
Those cache servers may reduce network traffic and building time.
Here is the whole command line options of Loci:
loci [global options] [script file]
If script file isn't given, .travis.yml will be used.
GLOBAL OPTIONS:
--name NAME, -n NAME creating a container named NAME to run tests,
and that container will not be deleted.
--tag TAG, -t TAG creating an image named TAG.
--base TAG, -b TAG use image TAG as the base image.
(default: "ubuntu:latest")
--verbose verbose mode, which prints Dockerfile and
entrypoint.sh.
--apt-proxy URL URL for a proxy server of apt repository.
[$APT_PROXY]
--pypi-proxy URL URL for a proxy server of pypi repository.
[$PYPI_PROXY]
--http-proxy URL URL for a http proxy server. [$HTTP_PROXY]
--https-proxy URL URL for a https proxy server. [$HTTPS_PROXY]
--no-proxy LIST Comma separated URL LIST for which proxies won't
be used. [$NO_PROXY]
--help, -h show help
--version, -v print the version
Future work
Loci currently supports Python and Go projects. I’ll supports other languages and welcome any pull requests.