Travis on the train, part 2
After announcing travis-cargo a few days ago in Helping Travis catch the rustc train, I got some great hints/contributions from Jan Segre and had a fun little time automating code coverage collection via coveralls.io. Unfortunately, this is a breaking change for existing users of travis-cargo, but the migration is easy.
(If you’re wondering what travis-cargo is, see the linked post.)
Version 0.1 of travis-cargo is now available on PyPI0 and should be installed via that medium. This works on Travis:
1 pip install 'travis-cargo<0.2' --user && export PATH=$HOME/.local/bin:$PATH
<0.2 requirement will reduce the risk of builds
breaking due to upstream changes in future, as I will make every
effort to follow semantic versioning and bump versions for any further
Part of migrating to PyPI requires renaming the
travis_cargo.py and making it no longer a
directly-executable script. This means that a direct
git clone and
alias as I suggested previously will not work.
From now, the only supported way to install travis-cargo is via
as demonstrated above, and the recommended format to use with
the PyPI package, with a version requirement. The example installation
listed above will install a
travis-cargo binary to
and then ensure that that it is available to the shell by name.
However, that’s not the only breaking change: the
has been removed since the default binary is now much longer, and
looks more like the real
cargo program. Cargo subcommands passed to
travis-cargo directly work as one would expect. Migration:
1 2 3 4 # before ./tc cargo build # after travis-cargo build
doc-upload subcommand and the
-q arguments have
not been changed.
I’ve opened pull requests on all users of travis-cargo that I found via Github’s search. I apologise if I missed you, fortunately the migration is straight-forward.
Covering your coverage needs
The new and improved travis-cargo includes
which will use the awesome kcov along with Rust’s debuginfo
support to record the test coverage of your libraries, and then upload
them to coveralls.io.
kcov combines with Coveralls to make supporting this ridiculously
easy: simply register/activate coveralls.io and add
sudo: required &
travis-cargo coveralls to your
requirement is necessary to install kcov; it unfortunately makes
Travis much slower to start builds.)
travis-cargo coveralls should successfully handle both in-crate and
external tests, so the Coveralls dashboard will display the total
coverage across all real tests (doc-tests are figments of our
imaginations). At the moment, Cargo doesn’t provide reliable
programmatic access to everything it knows, so
coveralls first searches the output of
cargo test for the binaries
it runs, and then executes those binaries under kcov. For this to work
test profile must have
debug = true (which is
Travis-cargo by example: the sequel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 language: rust sudo: required rust: - nightly - beta before_script: - pip install 'travis-cargo<0.2' --user && export PATH=$HOME/.local/bin:$PATH script: - | travis-cargo build && travis-cargo test && travis-cargo bench && travis-cargo doc after_success: - travis-cargo --only beta doc-upload - travis-cargo coveralls # ...
travis-cargo’s README contains more information.
(Thanks to Simon Kågström for assistance with getting kcov working properly, lifthrasiir and jscheivink for their tutorials on collecting coverage, and Jan Segre for the assistance with packaging and feedback.)
Incidentally, I found publishing Python packages on PyPI much more difficult than publishing Rust packages on crates.io. Great job on getting cargo and crates.io so streamlined, Alex Crichton, Yehuda Katz and everyone who has contributed! ↩