100da2a5da
Caching dependencies. |
||
---|---|---|
.github/workflows | ||
.gitignore | ||
action.yml | ||
ChangeLog.rst | ||
docs.asd | ||
docs.lisp | ||
qlfile | ||
qlfile.lock | ||
README.md | ||
templater.ros |
GitHub Action to Setup Common Lisp for CI
Table of Contents
[in package DOCS with nicknames DOCS/DOCS]
This is a Github Action to setup Common Lisp, Roswell and Qlot.
It is useful to call it before running tests or building docs for your Common Lisp libraries. Action encapsulates all steps necessary to make available Roswell and Qlot inside the Github CI.
1 What this action does for you?
-
It installs Roswell and all it's dependencies, doing right thing depending on the operating system. It should work on Ubuntu, OSX and maybe Windows.
-
Upgrade
ASDF
to the latest version. -
Installs Qlot.
-
Adds to
PATH
these directories:~/.roswell/bin
and.qlot/bin
-
Creates
.qlot
by runningqlot install
. How to override content of theqlfile
, see "Overriding qlfile" section. -
And finally, it can install a specified
ASDF
system and all it's dependencies. But this step is optional.
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@v2-beta
with:
asdf-system: cl-info
The part, corresponding to an action call is:
- uses: 40ants/setup-lisp@v1
with:
asdf-system: cl-info
If you remove with
part, then action will skip the ASDF
system
installation.
Also, pay attention to the env
section of the workflow. If you don't
set up a LISP
env variable, action will set default lisp implementation
to sbcl
:
env:
LISP: ${{ matrix.lisp }}
The last step in this workflow runs tests for the specified ASDF
system. It is documented here.
3 Overriding qlfile
Sometimes you might want to generate content of qlfile depending on matrix parameters. For example with matrix like this one:
matrix:
os:
- ubuntu-latest
- macos-latest
quicklisp-dist:
- quicklisp
- ultralisp
lisp:
- sbcl-bin
- ccl-bin
- ecl
you might want to add an ultralisp source to the qlfile. Here is how this can be archived:
env:
LISP: ${{ matrix.lisp }}
OS: ${{ matrix.os }}
QUICKLISP_DIST: ${{ matrix.quicklisp-dist }}
steps:
- uses: actions/checkout@v1
- uses: 40ants/setup-lisp@v1
with:
asdf-system: cl-info
qlfile-template: |
{% ifequal quicklisp_dist "ultralisp" %}
dist ultralisp http://dist.ultralisp.org
{% endifequal %}
github mgl-pax svetlyak40wt/mgl-pax :branch mgl-pax-minimal
Here we see a few important things.
-
We put into the env var the type of the quicklisp distribution we want to our library to test against.
-
We pass a multiline argument
qlfile-template
to the action. -
Template refers to
quicklisp_dist
to conditionally include a line intoqlfile
whenquicklisp_dist == "ultralisp"
.
You can refer any environment variable inside the qlfile
templater.
Also note, it is using Djula
markup, similar to Django
and Jinja2.
4 Roadmap
-
Make action use caching to speedup dependencies installation.
-
Support CLPM.
-
Vendor all dependencies, to make action more reliable and secure.