GitHub Action to Run Tests for a Common Lisp Library
Table of Contents
- 1 What this action does for you?
- 2 A typical usage
- 3 Custom test runner
- 4 Publishing reports to Coveralls
- 5 Roadmap
[in package DOCS with nicknames DOCS/DOCS]
This is a Github Action can be used to run tests for any Common Lisp supporting (asdf:test-system :my-system)
.
It should be used after the setup-lisp action.
1 What this action does for you?
It runs (asdf:test-system :the-system-name) by default.
But you can provide your own lisp code.
It automatically searches a test system name if it is present.
2 A typical usage
Here is how a minimal GitHub Workflow might look like:
name: 'CI'
on:
push:
branches:
- 'main'
- 'master'
pull_request:
jobs:
tests:
runs-on: ubuntu-latest
strategy:
matrix:
lisp:
- sbcl-bin
- ccl-bin
env:
LISP: ${{ matrix.lisp }}
steps:
- uses: actions/checkout@v1
- uses: 40ants/setup-lisp@v1
with:
asdf-system: cl-info
- uses: 40ants/run-tests@v1
with:
asdf-system: cl-info
The part, corresponding to an action call is:
- uses: 40ants/run-tests@v1
with:
asdf-system: cl-info
Here we provided a system name cl-info
, but
action is smart enough to detect that really
there is a separate cl-info-test
ASDF
system.
To guess a system name to run tests against, action
will check ${asdf-system}-test
, ${asdf-system}-tests
,
${asdf-system}/test
and ${asdf-system}/tests
. And if none
of them found - fall back to ${asdf-system}
.
Please, note, that (asdf:test-system :your-system-name)
should signal error in case if some tests were failed. Only
in this case action will exit with error code.
3 Custom test runner
Sometimes you might want to use something special instead of
(asdf:test-system :your-system-name)
. You can pass any lisp
code to the action:
- uses: 40ants/run-tests@v1
with:
asdf-system: cl-info
run-tests: |
(ql:quickload :cl-info-test)
(unless (rove:run :cl-info-test)
(error "Tests failed"))
4 Publishing reports to Coveralls
This action automates coverage collection and reporting. To publish report
to the Coveralls, pass your github token as
a coveralls-token
argument:
- uses: 40ants/run-tests@v2
with:
asdf-system: cl-info
coveralls-token: ${{ secrets.github_token }}
If you are using "matrix", then it is good idea to collect coverage report only on one matrix combination. To do this, use a logical expression which will check some variables and returns a token only if all of them are true:
- uses: 40ants/run-tests@v2
with:
asdf-system: cl-info
coveralls-token: |
${{ matrix.lisp == 'sbcl-bin' &&
matrix.os == 'ubuntu-latest' &&
matrix.quicklisp-dist == 'ultralisp' &&
secrets.github_token }}
Here is an example how your report on Coveralls can look like:
https://coveralls.io/github/40ants/cl-info
Note, that coverage reporting currently works only on SBCL and CCL 1.4. You can contribute support for other implementations to cl-coveralls.
5 Roadmap
Support uploading code coverage reports to CodeCov.
Vendor all dependencies, to make action more reliable and secure.