{"id":25038021,"url":"https://github.com/40ants/setup-lisp","last_synced_at":"2026-01-16T20:21:54.187Z","repository":{"id":40947629,"uuid":"336796792","full_name":"40ants/setup-lisp","owner":"40ants","description":"GitHub Action to Setup Common Lisp tools","archived":false,"fork":false,"pushed_at":"2024-12-14T22:18:53.000Z","size":8079,"stargazers_count":28,"open_issues_count":15,"forks_count":3,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-01-08T14:16:10.613Z","etag":null,"topics":["common-lisp","github-action"],"latest_commit_sha":null,"homepage":"https://40ants.com/setup-lisp/","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/40ants.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-07T13:43:55.000Z","updated_at":"2024-12-14T22:08:34.000Z","dependencies_parsed_at":"2022-07-12T18:14:58.288Z","dependency_job_id":"cfc8c7c1-5fd2-4629-9862-e7a3aa18486b","html_url":"https://github.com/40ants/setup-lisp","commit_stats":{"total_commits":286,"total_committers":4,"mean_commits":71.5,"dds":"0.11188811188811187","last_synced_commit":"74b15495bb7a3b4d125439fa609f7500310aa73e"},"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/40ants%2Fsetup-lisp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/40ants%2Fsetup-lisp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/40ants%2Fsetup-lisp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/40ants%2Fsetup-lisp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/40ants","download_url":"https://codeload.github.com/40ants/setup-lisp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237403368,"owners_count":19304417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["common-lisp","github-action"],"created_at":"2025-02-06T02:01:30.289Z","updated_at":"2025-10-20T22:30:50.618Z","avatar_url":"https://github.com/40ants.png","language":"Common Lisp","readme":"\u003ca id=\"x-28PROJECT-DOCS-3A-40README-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n# GitHub Action to Setup Common Lisp for CI\n\nThis is a Github Action to setup Common Lisp, Roswell and Qlot.\n\nIt is useful to call it before running tests or building docs\nfor your Common Lisp libraries. Action encapsulates all steps\nnecessary to make available [Roswell][795a]\nand [Qlot][e3ea] inside the Github `CI`.\n\n\u003ca id=\"x-28PROJECT-DOCS-3A-3A-40FEATURES-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## What this action does for you?\n\n* It installs Roswell and all it's dependencies, doing right thing depending on\n  the operating system. It should work on Ubuntu, `OSX` and Windows.\n* Upgrade `ASDF` to the latest version.\n* Installs Qlot.\n* Adds to `PATH` these directories: `~/.roswell/bin` and `.qlot/bin`\n* Creates `.qlot` by running `qlot install`. How to override content of the\n  `qlfile`, see \"Overriding qlfile\" section.\n* And finally, it can install a specified `ASDF` system and all it's dependencies.\n  But this step is optional.\n* Installed Roswell, `.qlot` and `~/.cache/common-lisp/` files are cached to speed up\n  repeated builds.\n\n\u003ca id=\"x-28PROJECT-DOCS-3A-3A-40IMPLEMENTATION-SUPPORT-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## Implementation support\n\nMost implementations are tested on Linux, but for some of them Windows and `OSX` are also should work.\n\nNote, that for correct execution, your workflow should use `lispsh -eo pipefail` instead of default `bash`.\nThis way a workflow will work Linux, `OSX` and Windows. You you will ignore this advice, you'll see such error\nwhen trying to call `ros` or `qlot` scripts:\n\n```\n/c/Users/runneradmin/.roswell/lisp/quicklisp/bin/qlot: line 4: exec: ros: not found\n  Error: Process completed with exit code 127.\n```\n| **Implementation** | **Linux** | **OSX** | **Windows** |\n| --- | --- | --- | --- |\n| abcl-bin | ✅ | ✅ | [❌][d780] |\n| allegro | [❌][d984] |  |  |\n| ccl-bin | ✅ | ✅ | [❌][d780] |\n| clasp | [❌][ecc6] |  | [❌][d780] |\n| clasp-bin | ✅ | [❌][bf3c] |\n| clisp | [❌][78c5] |  | [❌][d780] |\n| clisp-head | ✅ | [❌][5334] |\n| cmu-bin | ✅ | [❌][2599] | [❌][d780] |\n| ecl | ✅ | ✅ | [❌][d780] |\n| mkcl | [❌][2801] |  |  |\n| npt | [❌][7189] |  |  |\n| sbcl | ✅ |  |  |\n| sbcl-bin | ✅ | ✅ | ✅ |\n\n\u003ca id=\"x-28PROJECT-DOCS-3A-3A-40TYPICAL-USAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## A typical usage\n\nHere is how a minimal GitHub Workflow might look like:\n\n```yaml\nname: 'CI'\n\non:\n  push:\n    branches:\n      - 'main'\n      - 'master'\n  pull_request:\n\njobs:\n  tests:\n    runs-on: ubuntu-latest\n    \n    strategy:\n      matrix:\n        lisp:\n          - sbcl-bin\n          - ccl-bin\n          \n    env:\n      LISP: ${{ matrix.lisp }}\n\n    steps:\n      - uses: actions/checkout@v4\n      - uses: 40ants/setup-lisp@v4\n        with:\n          asdf-system: cl-info\n      - uses: 40ants/run-tests@v2\n        with:\n          asdf-system: cl-info\n```\nThe part, corresponding to an action call is:\n\n```yaml\n- uses: 40ants/setup-lisp@v4\n  with:\n    asdf-system: cl-info\n```\nIf you remove `with` part, then action will skip the `ASDF` system\ninstallation.\n\nAlso, pay attention to the `env` section of the workflow. If you don't\nset up a `LISP` env variable, action will set default lisp implementation\nto `sbcl`:\n\n```yaml\nenv:\n  LISP: ${{ matrix.lisp }}\n```\nThe last step in this workflow runs tests for the specified `ASDF`\nsystem. It is documented [here][8469].\n\n\u003ca id=\"x-28PROJECT-DOCS-3A-3A-40ROSWELL-VERSION-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## Overriding Roswell version\n\nBy default this action will install the latest version of Roswell known to be\nworking with this action. However, should you need to use a different version\ninstead, you can specify that via the `roswell-version` argument:\n\n```\n- uses: 40ants/setup-lisp@v4\n  with:\n    roswell-version: v21.10.14.111\n```\n\u003ca id=\"x-28PROJECT-DOCS-3A-3A-40ASDF-VERSION-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## Overriding ASDF version\n\nBy default this action will install the latest version of `ASDF` known to be\nworking with this action.  However, should you need to use a different version\ninstead, you can specify that via the `asdf-version` argument:\n\n```\n- uses: 40ants/setup-lisp@v4\n  with:\n    asdf-version: 3.3.5.3\n```\n\u003ca id=\"x-28PROJECT-DOCS-3A-3A-40QLOT-VERSION-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## Overriding Qlot version\n\nBy default this action will install the latest version of Qlot known to be\nworking with this action.  However, should you need to use a different version\ninstead, you can specify that via the `qlot-version` argument:\n\n```\n- uses: 40ants/setup-lisp@v4\n  with:\n    qlot-version: 0.11.5\n```\n\u003ca id=\"x-28PROJECT-DOCS-3A-3A-40QL-FILE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## Overriding qlfile\n\nSometimes you might want to generate content of qlfile\ndepending on matrix parameters. For example with matrix like this one:\n\n```yaml\nmatrix:\n  os:\n    - ubuntu-latest\n    - macos-latest\n    - windows-latest\n  quicklisp-dist:\n    - quicklisp\n    - ultralisp\n  lisp:\n    - sbcl-bin\n    - ccl-bin\n    - ecl\n```\nyou might want to add an [ultralisp][2a0d] source\nto the qlfile. Here is how this can be archived:\n\n```yaml\nenv:\n  LISP: ${{ matrix.lisp }}\n  OS: ${{ matrix.os }}\n  QUICKLISP_DIST: ${{ matrix.quicklisp-dist }}\n\nsteps:\n  - uses: actions/checkout@v4\n  - uses: 40ants/setup-lisp@v4\n    with:\n      asdf-system: cl-info\n      qlfile-template: |\n        {% ifequal quicklisp_dist \"ultralisp\" %}\n        dist ultralisp http://dist.ultralisp.org\n        {% endifequal %}\n```\nHere we see a few important things.\n\n1. We put into the env var the type of the quicklisp distribution we want to\n   our library to test against.\n2. We pass a multiline argument `qlfile-template` to the action.\n3. Template refers to `quicklisp_dist` to conditionally include a line\n   into `qlfile` when `quicklisp_dist == \"ultralisp\"`.\n\nYou can refer any environment variable inside the `qlfile` templater.\nAlso note, it is using [Djula][3dbd]\nmarkup, similar to [Django][04b3]\nand [Jinja2][dd23].\n\n\u003ca id=\"x-28PROJECT-DOCS-3A-3A-40CACHING-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## Caching\n\nUsually installing Roswell, a lisp implementation and dependencies\ntake from 2 to 10 minutes. Multiply this to the number of\nmatrix combinations and you'll get signifficant time.\n\nStarting from version `4.0.0`, this action cares about caching itself\nand you don't need to wrap it with `actions/cache`. This behaviour\nof enabled by default. Without cache action could be executed about\n4 minutes, and with cache it runs only 20 seconds on Ubuntu or 1 minute on Windows.\n\nA new input variable `cache` was added to control caching beheviour.\nIt is `true` by default, but you can switch it to `false` to turn caching off.\n\nThe current month is used as part of the cache key, to refresh caches every month.\nThis way a new Roswell, Qlot and `ASDF` will be used in a build. Also, you can set\n`env.cache-name` variable to some value, to force rebuild with a fresh cache.\n\n\u003ca id=\"x-28PROJECT-DOCS-3A-3A-40ROADMAP-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## Roadmap\n\n* Support [CLPM][2c45].\n* Vendor all dependencies, to make action more reliable and secure.\n\n\u003ca id=\"x-28PROJECT-DOCS-3A-3A-40CONTRIBUTION-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## Contribution\n\nIf you want to contribute to this system, join development at GitHub:\n\n[https://github.com/40ants/setup-lisp][cbff]\n\n\n[8469]: https://40ants.com/run-tests\n[04b3]: https://docs.djangoproject.com/en/3.1/topics/templates/\n[cbff]: https://github.com/40ants/setup-lisp\n[78c5]: https://github.com/40ants/setup-lisp/issues/15\n[ecc6]: https://github.com/40ants/setup-lisp/issues/16\n[2801]: https://github.com/40ants/setup-lisp/issues/17\n[7189]: https://github.com/40ants/setup-lisp/issues/18\n[d984]: https://github.com/40ants/setup-lisp/issues/22\n[d780]: https://github.com/40ants/setup-lisp/issues/27\n[5334]: https://github.com/40ants/setup-lisp/issues/28\n[bf3c]: https://github.com/40ants/setup-lisp/issues/29\n[2599]: https://github.com/40ants/setup-lisp/issues/30\n[e3ea]: https://github.com/fukamachi/qlot\n[3dbd]: https://github.com/mmontone/djula\n[795a]: https://github.com/roswell/roswell\n[2c45]: https://gitlab.common-lisp.net/clpm/clpm\n[dd23]: https://jinja.palletsprojects.com/\n[2a0d]: https://ultralisp.org\n\n* * *\n###### [generated by [40ANTS-DOC](https://40ants.com/doc/)]\n","funding_links":[],"categories":["Recently Updated","Expert Systems"],"sub_categories":["[Feb 04, 2025](/content/2025/02/04/README.md)"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F40ants%2Fsetup-lisp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F40ants%2Fsetup-lisp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F40ants%2Fsetup-lisp/lists"}