mirror of
https://github.com/anoma/juvix.git
synced 2024-12-17 03:45:00 +03:00
1b30c75657
This PR replaces fetching a precompiled binary of smoke with a build/cache for macOS smoke tests on CI. smoke dynamically links to icu4c, so a cached binary of smoke will break when brew bumps the icu4c version. In this PR we use the icu4c version in the cache key of the smoke build to avoid this issue. NB: The smoke build cannot be done as a separate job because the smoke binary must be built using exactly the same version of the macos-12 runner image as the smoke testing step to make sure that the icu4c versions match. Motivation for doing this is this failure: https://github.com/anoma/juvix/actions/runs/5325094406/jobs/9645334642 which uses this release of the runner image https://github.com/actions/runner-images/releases/tag/macOS-12%2F20230618.1 which contains the updated brew version of icu4c. 20230618.1 is currently a prerelease, but will start to run on more jobs shortly. ``` 2023-06-20T17:10:13.2222310Z Copied executables to /Users/runner/.local/bin: 2023-06-20T17:10:13.2223440Z - juvix 2023-06-20T17:10:13.5312790Z dyld[90256]: Library not loaded: '/usr/local/opt/icu4c/lib/libicuuc.72.dylib' 2023-06-20T17:10:13.5331930Z Referenced from: '/Users/runner/hostedtoolcache/jonaprieto/smoke/latest/darwin-x64/smoke' 2023-06-20T17:10:13.5333610Z Reason: tried: '/usr/local/opt/icu4c/lib/libicuuc.72.dylib' (no such file), '/usr/local/lib/libicuuc.72.dylib' (no such file), '/usr/lib/libicuuc.72.dylib' (no such file), '/usr/local/Cellar/icu4c/73.2/lib/libicuuc.72.dylib' (no such file), '/usr/local/lib/libicuuc.72.dylib' (no such file), '/usr/lib/libicuuc.72.dylib' (no such file) 2023-06-20T17:10:13.5334690Z make[1]: *** [smoke-only] Abort trap: 6 2023-06-20T17:10:13.5335310Z make: *** [smoke] Error 2 2023-06-20T17:10:13.5363170Z ##[error]Process completed with exit code 2. ```
288 lines
7.6 KiB
YAML
288 lines
7.6 KiB
YAML
name: Juvix Compiler CI
|
|
"on":
|
|
workflow_dispatch:
|
|
inputs:
|
|
ref:
|
|
description: the repository ref to build
|
|
required: true
|
|
default: main
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
types:
|
|
- opened
|
|
- reopened
|
|
- synchronize
|
|
- ready_for_review
|
|
|
|
concurrency:
|
|
group: "${{ github.workflow }}-${{ github.head_ref || github.run_id }}"
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
SKIP: ormolu,format-juvix-files,typecheck-juvix-examples
|
|
VAMPIRREPO: anoma/vamp-ir
|
|
VAMPIRVERSION: v0.1.3
|
|
|
|
jobs:
|
|
pre-commit:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "3.11"
|
|
- uses: pre-commit/action@v3.0.0
|
|
|
|
ormolu:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: mrkkrp/ormolu-action@v11
|
|
with:
|
|
version: 0.5.2.0
|
|
extra-args: >-
|
|
--ghc-opt -XDerivingStrategies --ghc-opt -XImportQualifiedPost
|
|
--ghc-opt -XMultiParamTypeClasses --ghc-opt -XStandaloneDeriving
|
|
--ghc-opt -XTemplateHaskell --ghc-opt -XUnicodeSyntax
|
|
|
|
build-and-test-linux:
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- name: Checkout our repository
|
|
uses: actions/checkout@v3
|
|
with:
|
|
path: main
|
|
submodules: true
|
|
|
|
- name: Cache LLVM and Clang
|
|
id: cache-llvm
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
C:/Program Files/LLVM
|
|
./llvm
|
|
key: "${{ runner.os }}-llvm-13"
|
|
|
|
- name: Install LLVM and Clang
|
|
uses: KyleMayes/install-llvm-action@v1
|
|
with:
|
|
version: "13.0"
|
|
cached: "${{ steps.cache-llvm.outputs.cache-hit }}"
|
|
|
|
- name: Download and extract wasi-sysroot
|
|
run: >
|
|
curl
|
|
https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-15/wasi-sysroot-15.0.tar.gz
|
|
-OL
|
|
|
|
tar xfv wasi-sysroot-15.0.tar.gz
|
|
|
|
- name: Set WASI_SYSROOT_PATH
|
|
run: |
|
|
echo "WASI_SYSROOT_PATH=$GITHUB_WORKSPACE/wasi-sysroot" >> $GITHUB_ENV
|
|
|
|
- name: Add ~/.local/bin to PATH
|
|
run: |
|
|
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
|
|
|
- name: Setup Wasmer
|
|
uses: wasmerio/setup-wasmer@v2
|
|
|
|
- name: Install libs
|
|
run: sudo apt install -y libncurses5
|
|
|
|
- name: Install VampIR for testing
|
|
uses: jaxxstorm/action-install-gh-release@v1.10.0
|
|
with:
|
|
repo: ${{ env.VAMPIRREPO }}
|
|
platform: linux
|
|
tag: ${{ env.VAMPIRVERSION }}
|
|
chmod: 0755
|
|
rename-to: vamp-ir
|
|
|
|
- name: Test VampIR
|
|
shell: bash
|
|
run: |
|
|
vamp-ir --version
|
|
|
|
- name: Make runtime
|
|
run: |
|
|
cd main
|
|
make runtime
|
|
|
|
- name: Stack setup
|
|
id: stack
|
|
uses: freckle/stack-action@v4
|
|
with:
|
|
working-directory: main
|
|
test: false
|
|
|
|
- name: Install and test Juvix
|
|
id: test
|
|
if: ${{ success() }}
|
|
run: |
|
|
cd main
|
|
make install
|
|
make test
|
|
|
|
- name: Typecheck and format Juvix examples
|
|
if: ${{ success() }}
|
|
shell: bash
|
|
run: |
|
|
cd main
|
|
make check-format-juvix-files && make typecheck-juvix-examples
|
|
|
|
- name: Install Smoke for testing
|
|
uses: jaxxstorm/action-install-gh-release@v1.10.0
|
|
with:
|
|
repo: jonaprieto/smoke
|
|
platform: linux
|
|
tag: v2.3.2
|
|
chmod: 0755
|
|
rename-to: smoke
|
|
extension-matching: disable
|
|
cache: enable
|
|
|
|
- name: Smoke testing
|
|
id: smoke-linux
|
|
if: ${{ success() }}
|
|
run: |
|
|
cd main
|
|
make smoke-only
|
|
|
|
build-and-test-macos:
|
|
runs-on: macos-12
|
|
steps:
|
|
- name: Checkout our repository
|
|
uses: actions/checkout@v3
|
|
with:
|
|
path: main
|
|
submodules: true
|
|
|
|
- name: Install Sed
|
|
run: |
|
|
brew install gnu-sed
|
|
echo "$(brew --prefix)/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH
|
|
|
|
- name: Test Sed
|
|
run: |
|
|
sed --version
|
|
|
|
- name: Download and extract wasi-sysroot
|
|
run: >
|
|
curl
|
|
https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-15/wasi-sysroot-15.0.tar.gz
|
|
-OL
|
|
|
|
tar xfv wasi-sysroot-15.0.tar.gz
|
|
|
|
- name: Set WASI_SYSROOT_PATH
|
|
run: |
|
|
echo "WASI_SYSROOT_PATH=$GITHUB_WORKSPACE/wasi-sysroot" >> $GITHUB_ENV
|
|
|
|
- name: Setup Wasmer
|
|
uses: wasmerio/setup-wasmer@v3
|
|
|
|
# smoke dynamically links to icu4c, so a cached binary of smoke will break
|
|
# when brew bumps the icu4c version. In the following steps we use the
|
|
# icu4c version in the cache key of the smoke build to avoid this issue.
|
|
#
|
|
# NB: The smoke build cannot be done as a separate job because the smoke
|
|
# binary must be built using exactly the same version of the macos-12
|
|
# runner image as the smoke testing step to make sure that the icu4c
|
|
# versions match.
|
|
- name: Checkout smoke repo
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: jonaprieto/smoke
|
|
ref: regex-icu
|
|
path: smoke-repo
|
|
|
|
- name: Install ICU4C
|
|
run: |
|
|
brew install icu4c
|
|
brew link icu4c --force
|
|
|
|
- name: Get ICU4C version
|
|
id: icuversion
|
|
run: |
|
|
ICUVERSION=$(echo -n $(brew list --versions icu4c | head -n 1 | sed -E 's/ /-/g'))
|
|
echo "version=$ICUVERSION" >> $GITHUB_OUTPUT
|
|
|
|
- name: Build smoke
|
|
env:
|
|
LDFLAGS: -L/usr/local/opt/icu4c/lib
|
|
CPPFLAGS: -I/usr/local/opt/icu4c/include
|
|
PKG_CONFIG_PATH: /usr/local/opt/icu4c/lib/pkgconfig
|
|
uses: freckle/stack-action@v4
|
|
with:
|
|
test: false
|
|
stack-arguments: --copy-bins
|
|
working-directory: smoke-repo
|
|
cache-prefix: ${{ steps.icuversion.outputs.version }}
|
|
pedantic: false
|
|
|
|
- name: Set homebrew LLVM CC and LIBTOOL vars (macOS)
|
|
run: |
|
|
echo "CC=$(brew --prefix llvm@15)/bin/clang" >> $GITHUB_ENV
|
|
echo "LIBTOOL=$(brew --prefix llvm@15)/bin/llvm-ar" >> $GITHUB_ENV
|
|
|
|
- name: Make runtime
|
|
run: |
|
|
cd main
|
|
make CC=$CC LIBTOOL=$LIBTOOL runtime
|
|
|
|
- name: Stack setup
|
|
id: stack
|
|
uses: freckle/stack-action@v4
|
|
with:
|
|
working-directory: main
|
|
test: false
|
|
|
|
- name: Add homebrew clang to the PATH (macOS)
|
|
run: |
|
|
echo "$(brew --prefix llvm@15)/bin" >> $GITHUB_PATH
|
|
|
|
- name: Install VampIR for testing
|
|
uses: jaxxstorm/action-install-gh-release@v1.10.0
|
|
with:
|
|
repo: ${{ env.VAMPIRREPO }}
|
|
platform: darwin
|
|
tag: ${{ env.VAMPIRVERSION }}
|
|
chmod: 0755
|
|
rename-to: vamp-ir
|
|
|
|
- name: Test VampIR
|
|
shell: bash
|
|
run: |
|
|
vamp-ir --version
|
|
|
|
- name: Install and test Juvix
|
|
if: ${{ success() }}
|
|
run: |
|
|
cd main
|
|
make CC=$CC LIBTOOL=$LIBTOOL install
|
|
make CC=$CC LIBTOOL=$LIBTOOL test
|
|
|
|
- name: Add ~/.local/bin to PATH
|
|
run: |
|
|
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
|
|
|
- name: Typecheck and format Juvix examples
|
|
if: ${{ success() }}
|
|
shell: bash
|
|
run: |
|
|
cd main
|
|
make check-format-juvix-files && make typecheck-juvix-examples
|
|
|
|
- name: Smoke testing (macOS)
|
|
id: smoke-macos
|
|
if: ${{ success() }}
|
|
run: |
|
|
cd main
|
|
make CC=$CC LIBTOOL=$LIBTOOL smoke
|