Push coverage report out of an Gitlab CI Runner
For our Plone/Python projects we often generate coverage reports as HTML sites, this posts show how you can push this report out of the Gitlab CI Runner.
Save FTP Password & Login as secret variables in Gitlab > Settings > Variables. They can be accessed in the .gitlab-ci.yml as $FTPLOGIN & $FTPPASSWORD.
Here is our .coveragerc file, which sets the output directory:
[report]
include =
src/plone.site/*
omit =
*/test*
*/upgrades/*
*/browser/dummy.py
[html]
directory = parts/test/htmlreport
title = Plone Project
And our .gitlab-ci.yml:
before_script:
- /usr/bin/virtualenv .
- ./bootstrap_ci.sh
job1:
script:
- export DISPLAY=:99
- ./bin/code-analysis
- ./bin/coverage erase
- ./bin/coverage run -p --source=src bin/test || exit 1
- ./bin/coverage combine
- ./bin/coverage html
- ./bin/coverage report
# Stage robot
- ./bin/test --all -t 'robot' || exit 1
- cd parts/test/htmlreport/ && find . -type f -exec curl --ftp-create-dirs -T {} -u $FTPLOGIN:$FTPPASSWORD ftp://45.54.45.54/uhlmann/$CI_BUILD_ID/{} \;
artifacts:
expire_in: 1 week
paths:
- parts/test/
The interesting part is the curl one, it uploads all coverage files to a FTP server.
If your static webserver is public accessible use basic auth with a .htaccess file:
htpasswd -c .htpasswd starzel
.htaccess file:
AuthUserFile /var/www/htdocs/.htpasswd
AuthGroupFile /dev/null
AuthName "Please Enter Password"
AuthType Basic
Require valid-user
Better integration into Gitlab coming soon as Gitlab Pages see this Pull Request.
Todo:
- Cron to delete old directories.
- Upload files if robot / code-analysis failed.