From 8946cf8e3de8fd8400bde2433a4a11e7e80cdb2f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 16 Feb 2021 14:51:23 +0000 Subject: [PATCH] Update docs --- README.md | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 168 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d00491f..f356ca4 100644 --- a/README.md +++ b/README.md @@ -1 +1,168 @@ -1 + + +# GitHub Action to Setup Common Lisp for CI + +## Table of Contents + +- [1 What this action does for you?][f73c] +- [2 A typical usage][ff56] +- [3 Overriding qlfile][d1d0] +- [4 Roadmap][278a] + +###### \[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](https://github.com/roswell/roswell) +and [Qlot](https://github.com/fukamachi/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 running `qlot install`. How to override content of the + `qlfile`, 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: + +```yaml +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 actionn call is: + +```yaml +- uses: 40ants/setup-lisp@v1 + with: + asdf-system: cl-info +``` + +If you remove `with` part, then action will skip the `ASDF` system +installation. + +The last step in this workflow runs tests for the specified `ASDF` +system. It is documented [here](https://40ants/run-tests). + + + +## 3 Overriding qlfile + +Sometimes you might want to generate content of qlfile +depending on matrix parameters. For example with matrix like this one: + +```yaml +matrix: + os: + - ubuntu-latest + - macos-latest + quicklisp-dist: + - quicklisp + - ultralisp + lisp: + - sbcl-bin + - ccl-bin + - ecl +``` + +you might want to add an [ultralisp](https://ultralisp.org) source +to the qlfile. Here is how this can be archived: + +```yaml +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. + +1. We put into the env var the type of the quicklisp distribution we want to + our library to test against. + +2. We pass a multiline argument `qlfile-template` to the action. + +3. Template refers to `quicklisp_dist` to conditionally include a line + into `qlfile` when `quicklisp_dist == "ultralisp"`. + +You can refer any environment variable inside the `qlfile` templater. +Also note, it is using [Djula](https://github.com/mmontone/djula) +markup, similar to [Django](https://docs.djangoproject.com/en/3.1/topics/templates/) +and [Jinja2](https://jinja.palletsprojects.com/). + + + +## 4 Roadmap + +- Make action use caching to speedup dependencies installation. + +- Support [CLPM](https://gitlab.common-lisp.net/clpm/clpm). + +- Vendor all dependencies, to make action more reliable and secure. + + + [278a]: #x-28DOCS-3A-40ROADMAP-20MGL-PAX-MINIMAL-3ASECTION-29 "Roadmap" + [d1d0]: #x-28DOCS-3A-40QL-FILE-20MGL-PAX-MINIMAL-3ASECTION-29 "Overriding qlfile" + [f73c]: #x-28DOCS-3A-40FEATURES-20MGL-PAX-MINIMAL-3ASECTION-29 "What this action does for you?" + [ff56]: #x-28DOCS-3A-40TYPICAL-USAGE-20MGL-PAX-MINIMAL-3ASECTION-29 "A typical usage" + +* * * +###### \[generated by [MGL-PAX](https://github.com/melisgl/mgl-pax)\]