diff --git a/ChangeLog.md b/ChangeLog.md index e71ddb1..52de7af 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -2,6 +2,17 @@ # ChangeLog + + +## 4.0.0 (2024-02-24) + + + +### Changed + +* Internal cache mechanism was added. Now action caches Roswell and Qlot files to speed up reruns. For example, without cache action could be executed about 4 minutes, and with cache it runs only 20 seconds on Ubuntu or 1 minute on Windows. +* A new input variable `cache` was added to control caching beheviour. It is `true` by default, but you can switch it to `false` to turn caching off. + ## 3.2.0 (2023-01-30) diff --git a/README.md b/README.md index e8203e6..755f662 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,8 @@ and [Qlot][e3ea] inside the Github `CI`. `qlfile`, see "Overriding qlfile" section. * And finally, it can install a specified `ASDF` system and all it's dependencies. But this step is optional. +* Installed Roswell, `.qlot` and `~/.cache/common-lisp/` files are cached to speed up + repeated builds. @@ -40,7 +42,7 @@ when trying to call `ros` or `qlot` scripts: | **Implementation** | **Supported** | | --- | --- | | abcl-bin | ✅ | -| allegro | ✅ | +| allegro | ✅ (sometimes fails because of "expired-license") | | ccl-bin | ✅ | | clasp | [❌][ecc6] | | clasp-bin | ✅ | @@ -83,8 +85,8 @@ jobs: LISP: ${{ matrix.lisp }} steps: - - uses: actions/checkout@v2 - - uses: 40ants/setup-lisp@v2 + - uses: actions/checkout@v4 + - uses: 40ants/setup-lisp@v4 with: asdf-system: cl-info - uses: 40ants/run-tests@v2 @@ -94,7 +96,7 @@ jobs: The part, corresponding to an action call is: ```yaml -- uses: 40ants/setup-lisp@v2 +- uses: 40ants/setup-lisp@v4 with: asdf-system: cl-info ``` @@ -121,7 +123,7 @@ working with this action. However, should you need to use a different version instead, you can specify that via the `roswell-version` argument: ``` -- uses: 40ants/setup-lisp@v2 +- uses: 40ants/setup-lisp@v4 with: roswell-version: v21.10.14.111 ``` @@ -134,7 +136,7 @@ working with this action. However, should you need to use a different version instead, you can specify that via the `asdf-version` argument: ``` -- uses: 40ants/setup-lisp@v2 +- uses: 40ants/setup-lisp@v4 with: asdf-version: 3.3.5.3 ``` @@ -147,7 +149,7 @@ working with this action. However, should you need to use a different version instead, you can specify that via the `qlot-version` argument: ``` -- uses: 40ants/setup-lisp@v2 +- uses: 40ants/setup-lisp@v4 with: qlot-version: 0.11.5 ``` @@ -182,8 +184,8 @@ env: QUICKLISP_DIST: ${{ matrix.quicklisp-dist }} steps: - - uses: actions/checkout@v2 - - uses: 40ants/setup-lisp@v2 + - uses: actions/checkout@v4 + - uses: 40ants/setup-lisp@v4 with: asdf-system: cl-info qlfile-template: | @@ -212,57 +214,17 @@ Usually installing Roswell, a lisp implementation and dependencies take from 2 to 10 minutes. Multiply this to the number of matrix combinations and you'll get signifficant time. -To speed up build, you can use caching using a standad GitHub action `actions/cache@v2`. +Starting from version `4.0.0`, this action cares about caching itself +and you don't need to wrap it with `actions/cache`. This behaviour +of enabled by default. Without cache action could be executed about +4 minutes, and with cache it runs only 20 seconds on Ubuntu or 1 minute on Windows. -To make caching work, add such sections into your workflow file: +A new input variable `cache` was added to control caching beheviour. +It is `true` by default, but you can switch it to `false` to turn caching off. -```yaml -- name: Grant All Perms to Make Cache Restoring Possible - run: | - sudo mkdir -p /usr/local/etc/roswell - sudo chown "${USER}" /usr/local/etc/roswell - # Here the ros binary will be restored: - sudo chown "${USER}" /usr/local/bin -- name: Get Current Month - id: current-month - run: | - echo "::set-output name=value::$(date -u "+%Y-%m")" -- name: Cache Roswell Setup - id: cache - uses: actions/cache@v2 - env: - cache-name: cache-roswell - with: - path: | - /usr/local/bin/ros - ~/.cache/common-lisp/ - ~/.roswell - /usr/local/etc/roswell - .qlot - key: "${{ steps.current-month.outputs.value }}-${{ env.cache-name }}-${{ runner.os }}-${{ hashFiles('qlfile.lock') }}" -- name: Restore Path To Cached Files - run: | - echo $HOME/.roswell/bin >> $GITHUB_PATH - echo .qlot/bin >> $GITHUB_PATH - if: steps.cache.outputs.cache-hit == 'true' -- uses: 40ants/setup-lisp@v2 - if: steps.cache.outputs.cache-hit != 'true' -``` -There are two important lines here. - -* The last line `if: steps.cache.outputs.cache-hit != 'true'` skips - running lisp installation, it it was take from the cache. -* The `key` value: - -` - key: "${{ steps.current-month.outputs.value }}-${{ env.cache-name }}-${{ runner.os }}-${{ hashFiles('qlfile.lock') }}" -` - -It controls when your cache will be matched. If you are using `matrix`, put all it's components - into the key. - -I also added a current month there, to make sure cache will be renewed at least monthly. - This way a new Roswell, Qlot and `ASDF` will be used in a build. +The current month is used as part of the cache key, to refresh caches every month. +This way a new Roswell, Qlot and `ASDF` will be used in a build. Also, you can set +`env.cache-name` variable to some value, to force rebuild with a fresh cache.