Merge pull request #2 from iamFIREcracker/windows-work
Add support for Windows
This commit is contained in:
commit
6e9fb38681
4 changed files with 265 additions and 26 deletions
53
.github/workflows/tests.yml
vendored
Normal file
53
.github/workflows/tests.yml
vendored
Normal file
|
@ -0,0 +1,53 @@
|
|||
name: tests
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "0 0 * * SUN"
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
# We want to run on external PRs, but not on our own internal PRs as
|
||||
# they'll be run by the push to the branch.
|
||||
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository
|
||||
strategy:
|
||||
fail-fast: false # Let the workflow continue as much as possible
|
||||
matrix:
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
lisp: sbcl-bin
|
||||
- os: macos-latest
|
||||
lisp: sbcl-bin
|
||||
- os: windows-latest
|
||||
lisp: sbcl-bin
|
||||
defaults:
|
||||
run:
|
||||
shell: lispsh {0}
|
||||
env:
|
||||
LISP: ${{ matrix.lisp }}
|
||||
name: test with ${{ matrix.lisp }} on ${{ matrix.os }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
# The repo already contains the qlot and qlot.lock files, and since
|
||||
# we don't want those to interfere with the current test run, we
|
||||
# clone the repository somewhere else (i.e. something different from
|
||||
# the default './')
|
||||
path: setup-lisp/
|
||||
- name: Call setup-lisp with default arguments
|
||||
if: github.event_name != 'schedule'
|
||||
uses: ./setup-lisp/
|
||||
- name: Call setup-lisp and install latest
|
||||
if: github.event_name == 'schedule'
|
||||
uses: ./setup-lisp/
|
||||
with:
|
||||
roswell-version: latest
|
||||
# XXX remove this override (i.e. put "latest" back in) after the
|
||||
# following roswell issue has been solved:
|
||||
# https://github.com/roswell/roswell/issues/497
|
||||
asdf-version: 3.3.5.3
|
||||
qlot-version: latest
|
||||
- run: ros config
|
||||
- run: qlot exec ros install 40ants/gh-pages
|
188
action.yml
188
action.yml
|
@ -1,12 +1,21 @@
|
|||
name: 'Setup Common Lisp'
|
||||
|
||||
inputs:
|
||||
roswell-version:
|
||||
description: 'Roswell version to install. If not specified, the latest working version will be used; if "latest", the latest version is used'
|
||||
required: false
|
||||
default: v21.10.14.111
|
||||
asdf-system:
|
||||
description: 'ASDF system to install'
|
||||
required: false
|
||||
asdf-version:
|
||||
description: 'ASDF version to install. If not specified, then latest version will be used'
|
||||
description: 'ASDF version to install. If not specified, the latest working version will be used; if "latest", the latest version is used'
|
||||
required: false
|
||||
default: 3.3.5.3
|
||||
qlot-version:
|
||||
description: 'Qlot version to install. If not specified, the latest working version will be used; if "latest", the latest version is used'
|
||||
required: false
|
||||
default: 0.11.5
|
||||
qlfile-template:
|
||||
description: "Djula template for qlfile. All environment variables are available in it's context"
|
||||
required: false
|
||||
|
@ -14,6 +23,128 @@ inputs:
|
|||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
# Switch back to setup-msys2/setup-msys2@v2 if / when the following PR is
|
||||
# merged: https://github.com/msys2/setup-msys2/pull/172
|
||||
- uses: iamFIREcracker/setup-msys2@dont-fail-if-not-windows-with-assets
|
||||
with:
|
||||
# Roswell was added to msys2 just _recently_, so the following makes
|
||||
# sure packages metadata is up to date. Otherwise...
|
||||
#
|
||||
# $ pacman -S mingw-w64-x86_64-roswell
|
||||
# error: target not found: mingw-w64-x86_64-roswell
|
||||
# Error: Process completed with exit code 1
|
||||
update: true
|
||||
# Msys2 has its own PATH, and the following setting enables standard
|
||||
# PATH manipulation expressions like the one shown below, to succeed:
|
||||
#
|
||||
# $ echo /usr/local/bin >> $GITHUB_PATH
|
||||
path-type: inherit
|
||||
platform-check-severity: warn
|
||||
- name: Create lispsh
|
||||
shell: bash
|
||||
run: |
|
||||
# All the steps below, should work without problems on Linux, Mac OS,
|
||||
# and Windows, provided that they are run with the "right" shell
|
||||
# parameter, i.e. bash for Linux and Mac OS, and msys2 for Windows.
|
||||
#
|
||||
# Unfortunately, composite actions do not support getting the shell
|
||||
# parameter injected from the parent workflow (read more about this
|
||||
# here: https://github.com/actions/runner/issues/835), so the
|
||||
# workaround I came up with is:
|
||||
#
|
||||
# 1. Symlink bash/msys2 to a known location, i.e. lispsh
|
||||
# 2. Use lispsh as shell parameter
|
||||
#
|
||||
# It's not ideal, but the alternative is to duplicate most of the steps
|
||||
# below, and have some of them with `shell: bash`, and others with
|
||||
# `shell: msys2 {0}`.
|
||||
if [[ "$RUNNER_OS" == "Windows" ]]; then
|
||||
powershell New-Item -ItemType SymbolicLink \
|
||||
-Path "D:/a/_temp/setup-msys2/lispsh.cmd" \
|
||||
-Target "D:/a/_temp/setup-msys2/msys2.cmd"
|
||||
else
|
||||
sudo ln -sf $(which bash) /usr/local/bin/lispsh
|
||||
fi
|
||||
- name: Set up Environment
|
||||
shell: bash
|
||||
run: |
|
||||
echo ::group::Set up Environment
|
||||
if [[ "$RUNNER_OS" == "Windows" ]]; then
|
||||
# ROSWELL_INSTALL_DIR defaults to /usr/local/bin which
|
||||
# unfortunately is not part of PATH on Windows; one could be
|
||||
# tempted to patch things up like this:
|
||||
#
|
||||
# echo /usr/local/bin >> $GITHUB_PATH
|
||||
#
|
||||
# However, if the absolute Windows path that /usr/local/bin
|
||||
# actually refers to, contains any white space in it, you will
|
||||
# inevitably bump into the following error:
|
||||
#
|
||||
# 'C:\Program' is not recognized as an internal or external command,
|
||||
# operable program or batch file.
|
||||
# Install Script for sbcl-bin...
|
||||
# 'C:\Program' is not recognized as an internal or external command,
|
||||
# operable program or batch file.
|
||||
# Unhandled UIOP/RUN-PROGRAM:SUBPROCESS-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
|
||||
# {10057000A3}>:
|
||||
# Subprocess #<UIOP/LAUNCH-PROGRAM::PROCESS-INFO {100506B0E3}>
|
||||
# with command "C:\\Program Files\\Git\\usr\\local\\bin\\ros.exe config set setup.time 3843610170"
|
||||
# exited with error code 1
|
||||
#
|
||||
# Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {10057000A3}>
|
||||
#
|
||||
# The work-around? Install Roswell in a different location, whose
|
||||
# absolute path we are 100% positive won't contain any white
|
||||
# spaces!
|
||||
mkdir -p /d/a/_temp/roswell
|
||||
echo ROSWELL_INSTALL_DIR=/d/a/_temp/roswell >> $GITHUB_ENV
|
||||
echo /d/a/_temp/roswell >> $GITHUB_PATH
|
||||
|
||||
# Roswell internally checks for the MSYSCON env varible to be
|
||||
# defined, and when not there, it would go and install msys2 (i.e.
|
||||
# `ros install msys2+`) and rely on the `bash` bonary that comes
|
||||
# with that installation.
|
||||
#
|
||||
# All good except that something is not quite working as it should,
|
||||
# given that every time Roswell tries to run a `bash` command, it
|
||||
# would spit out the following:
|
||||
#
|
||||
# Unhandled SIMPLE-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
|
||||
# {1005700003}>:
|
||||
# Couldn't execute "C:\\Users\\runneradmin\\.roswell\\impls\\x86-64\\windows\\msys2\\NIL\\usr\\bin\\bash": The system cannot find the file specified.
|
||||
#
|
||||
# Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1005700003}>
|
||||
# 0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<SIMPLE-ERROR "Couldn't execute ~S: ~A" {1004EEA623}> #<unused argument> :QUIT T)
|
||||
# 1: (SB-DEBUG::RUN-HOOK SB-EXT:*INVOKE-DEBUGGER-HOOK* #<SIMPLE-ERROR "Couldn't execute ~S: ~A" {1004EEA623}>)
|
||||
# 2: (INVOKE-DEBUGGER #<SIMPLE-ERROR "Couldn't execute ~S: ~A" {1004EEA623}>)
|
||||
# 3: (ERROR "Couldn't execute ~S: ~A" "C:\\Users\\runneradmin\\.roswell\\impls\\x86-64\\windows\\msys2\\NIL\\usr\\bin\\bash" "The system cannot find the file specified.")
|
||||
# 4: (SB-EXT:RUN-PROGRAM "C:\\Users\\runneradmin\\.roswell\\impls\\x86-64\\windows\\msys2\\NIL\\usr\\bin\\bash" ("-lc" "cd \"C:\\\\Users\\\\runneradmin\\\\.roswell\\\\src\\\\asdf-3.3.5.3\\\\\";pwd") :ENV NIL :ENVIRONMENT NIL :WAIT NIL :SEARCH T :INPUT NIL :IF-INPUT-DOES-NOT-EXIST :ERROR :OUTPUT :STREAM :IF-OUTPUT-EXISTS :APPEND :ERROR NIL :IF-ERROR-EXISTS :APPEND :STATUS-HOOK NIL :EXTERNAL-FORMAT :UTF-8 :DIRECTORY NIL :PRESERVE-FDS NIL :ESCAPE-ARGUMENTS T :WINDOW NIL)
|
||||
# 5: (UIOP/LAUNCH-PROGRAM:LAUNCH-PROGRAM ("C:\\Users\\runneradmin\\.roswell\\impls\\x86-64\\windows\\msys2\\NIL\\usr\\bin\\bash" "-lc" "cd \"C:\\\\Users\\\\runneradmin\\\\.roswell\\\\src\\\\asdf-3.3.5.3\\\\\";pwd") :INPUT NIL :OUTPUT :STREAM :ERROR-OUTPUT NIL :OUTPUT :STRING)
|
||||
# 6: ((LAMBDA (UIOP/RUN-PROGRAM::REDUCED-INPUT UIOP/RUN-PROGRAM::INPUT-ACTIVITY) :IN UIOP/RUN-PROGRAM::%USE-LAUNCH-PROGRAM) NIL NIL)
|
||||
# 7: (UIOP/RUN-PROGRAM::%USE-LAUNCH-PROGRAM ("C:\\Users\\runneradmin\\.roswell\\impls\\x86-64\\windows\\msys2\\NIL\\usr\\bin\\bash" "-lc" "cd \"C:\\\\Users\\\\runneradmin\\\\.roswell\\\\src\\\\asdf-3.3.5.3\\\\\";pwd") :OUTPUT :STRING)
|
||||
# 8: (MINGW-NAMESTRING #P"C:/Users/runneradmin/.roswell/src/asdf-3.3.5.3/")
|
||||
# 9: (ROSWELL.INSTALL.ASDF::ASDF-INSTALL (:TARGET "asdf" :VERSION "3.3.5.3" :VERSION-NOT-SPECIFIED 0 :ARGV NIL))
|
||||
#
|
||||
# The NIL over there, seems to be the result of evaluating the
|
||||
# following form:
|
||||
#
|
||||
# (config "msys2.version")
|
||||
#
|
||||
# Now, I am not sure what's going on with that, but since
|
||||
# we got msys2 installed already, I figured it would be easier to
|
||||
# tell Roswell about it and ignore all the other installation
|
||||
# steps.
|
||||
echo MSYSCON=Stop-Roswell-From-Installing-Msys2 >> $GITHUB_ENV
|
||||
|
||||
# Also, for whatever reason Roswell seems to be installing
|
||||
# ASDF-system-specific scripts inside .roswell/lisp/quicklisp/bin
|
||||
# and not .roswell/bin, so if we want to enable users of this
|
||||
# action to directly invoke these scripts, we need to add
|
||||
# .roswell/lisp/quicklisp/bin to PATH.
|
||||
echo $HOME/.roswell/lisp/quicklisp/bin >> $GITHUB_PATH
|
||||
fi
|
||||
echo $HOME/.roswell/bin >> $GITHUB_PATH
|
||||
echo ::endgroup::
|
||||
- name: Current Env
|
||||
shell: bash
|
||||
run: |
|
||||
|
@ -25,9 +156,9 @@ runs:
|
|||
env | sort -u
|
||||
echo ::endgroup::
|
||||
- name: Install Roswell
|
||||
shell: bash
|
||||
shell: lispsh {0}
|
||||
run: |
|
||||
echo ::group::Install Roswell
|
||||
echo ::group::Installing Roswell dependencies
|
||||
if [[ "$RUNNER_OS" == "Linux" ]]; then
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install git build-essential automake libcurl4-openssl-dev
|
||||
|
@ -35,15 +166,33 @@ runs:
|
|||
if [[ "$RUNNER_OS" == "macOS" ]]; then
|
||||
brew install automake autoconf curl
|
||||
fi
|
||||
|
||||
curl -L https://raw.githubusercontent.com/svetlyak40wt/roswell/patches/scripts/install-for-ci.sh | sh
|
||||
|
||||
echo $HOME/.roswell/bin >> $GITHUB_PATH
|
||||
if [[ "$RUNNER_OS" == "Windows" ]]; then
|
||||
# Installing ASDF requires `make`, so let's make sure it's
|
||||
# available
|
||||
msys2.cmd -c "pacman --noconfirm -S --needed --overwrite '*' make"
|
||||
fi
|
||||
echo ::endgroup::
|
||||
- name: Upgrade ASDF to the Latest Version
|
||||
shell: bash
|
||||
|
||||
if [[ "${{ inputs.roswell-version }}" != "latest" ]]; then
|
||||
echo ::group::Installing Roswell ${{ inputs.roswell-version }}
|
||||
curl -L https://raw.githubusercontent.com/roswell/roswell/${{ inputs.roswell-version }}/scripts/install-for-ci.sh | sh -x
|
||||
else
|
||||
echo ::group::Installing latest Roswell
|
||||
curl -L https://raw.githubusercontent.com/roswell/roswell/master/scripts/install-for-ci.sh | sh -x
|
||||
fi
|
||||
|
||||
echo ::endgroup::
|
||||
- name: Upgrade Quicklisp dists
|
||||
shell: lispsh {0}
|
||||
run: |
|
||||
if [[ -n "${{ inputs.asdf-version }}" ]]; then
|
||||
# The parent workflow might have caching enabled for Roswell and all
|
||||
# the other Lisp files in general, so it's better to tell Quicklisp
|
||||
# to update all its dists.
|
||||
ros -e "(ql:update-all-dists :prompt nil)"
|
||||
- name: Upgrade ASDF to the Latest Version
|
||||
shell: lispsh {0}
|
||||
run: |
|
||||
if [[ "${{ inputs.asdf-version }}" != "latest" ]]; then
|
||||
echo ::group::Installing ASDF ${{ inputs.asdf-version }}
|
||||
ros install asdf/${{ inputs.asdf-version }}
|
||||
else
|
||||
|
@ -52,18 +201,19 @@ runs:
|
|||
fi
|
||||
echo ::endgroup::
|
||||
- name: Install Qlot
|
||||
shell: bash
|
||||
# Version 0.11.1 is fixed while issue
|
||||
# https://github.com/fukamachi/qlot/issues/118
|
||||
# will not be resolved.
|
||||
shell: lispsh {0}
|
||||
run: |
|
||||
echo ::group::Install Qlot
|
||||
ros install fukamachi/qlot/0.11.5
|
||||
if [[ "${{ inputs.qlot-version }}" != "latest" ]]; then
|
||||
echo ::group::Installing Qlot ${{ inputs.qlot-version }}
|
||||
ros install fukamachi/qlot/${{ inputs.qlot-version }}
|
||||
else
|
||||
echo ::group::Installing latest Qlot
|
||||
ros install fukamachi/qlot
|
||||
fi
|
||||
echo .qlot/bin >> $GITHUB_PATH
|
||||
echo ::endgroup::
|
||||
|
||||
- name: Create Qlot Environment
|
||||
shell: bash
|
||||
shell: lispsh {0}
|
||||
run: |
|
||||
echo ::group::Create Qlot Environment
|
||||
|
||||
|
@ -92,7 +242,7 @@ runs:
|
|||
# all possible roswell scripts, if the system
|
||||
# has them in the roswell/ subdirectory:
|
||||
- name: Install ASDF System
|
||||
shell: bash
|
||||
shell: lispsh {0}
|
||||
run: |
|
||||
echo ::group::Install ASDF System
|
||||
if [[ -n "${{ inputs.asdf-system }}" ]]; then
|
||||
|
|
|
@ -6,6 +6,10 @@
|
|||
|
||||
|
||||
(defchangelog (:ignore-words ("ASDF"))
|
||||
(unreleased
|
||||
"- Improves Windows support
|
||||
- Installs Roswell v21.10.14.111
|
||||
- Installs ASDF 3.3.5.3")
|
||||
(1.1.2 2021-09-19
|
||||
"Move from Qlot 0.11.1 to 0.11.5.")
|
||||
(1.1.1 2021-09-12
|
||||
|
|
42
docs.lisp
42
docs.lisp
|
@ -41,7 +41,9 @@ and [Qlot](https://github.com/fukamachi/qlot) inside the Github CI.
|
|||
"
|
||||
(@features section)
|
||||
(@typical-usage section)
|
||||
(@roswell-version section)
|
||||
(@asdf-version section)
|
||||
(@qlot-version section)
|
||||
(@ql-file section)
|
||||
(@caching section)
|
||||
(@roadmap section)
|
||||
|
@ -54,7 +56,7 @@ and [Qlot](https://github.com/fukamachi/qlot) inside the Github CI.
|
|||
(defsection @features (:title "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.
|
||||
the operating system. It should work on Ubuntu, OSX and Windows.
|
||||
* Upgrade ASDF to the latest version.
|
||||
* Installs Qlot.
|
||||
* Adds to `PATH` these directories: `~/.roswell/bin` and `.qlot/bin`
|
||||
|
@ -127,15 +129,44 @@ system. It is documented [here](https://40ants.com/run-tests).
|
|||
")
|
||||
|
||||
|
||||
(defsection @asdf-version (:title "Overriding qlfile")
|
||||
(defsection @roswell-version (:title "Overriding Roswell version")
|
||||
"
|
||||
By default, action will install the latest ASDF version. But sometimes you might
|
||||
want to fix an ASDF version. In such case, use `asdf-version` argument:
|
||||
By default this action will install the latest version of Roswell known to be
|
||||
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@v1
|
||||
with:
|
||||
asdf-version: 3.3.4.18
|
||||
roswell-version: v21.10.14.111
|
||||
```
|
||||
")
|
||||
|
||||
|
||||
(defsection @asdf-version (:title "Overriding ASDF version")
|
||||
"
|
||||
By default this action will install the latest version of ASDF known to be
|
||||
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@v1
|
||||
with:
|
||||
asdf-version: 3.3.5.3
|
||||
```
|
||||
")
|
||||
|
||||
|
||||
(defsection @qlot-version (:title "Overriding Qlot version")
|
||||
"
|
||||
By default this action will install the latest version of Qlot known to be
|
||||
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@v1
|
||||
with:
|
||||
qlot-version: 0.11.5
|
||||
```
|
||||
")
|
||||
|
||||
|
@ -150,6 +181,7 @@ matrix:
|
|||
os:
|
||||
- ubuntu-latest
|
||||
- macos-latest
|
||||
- windows-latest
|
||||
quicklisp-dist:
|
||||
- quicklisp
|
||||
- ultralisp
|
||||
|
|
Loading…
Reference in a new issue