Skip to content

Set-up continuous integration #2

Set-up continuous integration

Set-up continuous integration #2

Workflow file for this run

name: build
on:
pull_request:
push:
jobs:
build:
env:
OPAMJOBS: 2
OPAMYES: true
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
ocaml-compiler:
- 4.14.x
- 5.00.x
runs-on: ${{ matrix.os }}
steps:
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
git config --global core.ignorecase false
- name: Install stable version of node
uses: actions/setup-node@v3
with:
node-version: 20
- name: Checkout zarith_stubs_js
if: ${{ matrix.ocaml-compiler < '5.' }}
uses: actions/checkout@v4
with:
repository: ocaml-wasm/zarith_stubs_js
path: zarith
ref: wasm
- name: Checkout bonsai
if: ${{ matrix.ocaml-compiler < '5.' }}
uses: actions/checkout@v4
with:
repository: ocaml-wasm/bonsai
path: bonsai
ref: wasm
- name: Install bonsai dependencies
if: ${{ matrix.ocaml-compiler < '5.' }}
working-directory: ./bonsai
run: |
sudo apt-get install libgraph-easy-perl
npm install deasync
- name: Restore node
id: cache-node
uses: actions/cache/restore@v3
with:
path: node-v21.0.0-v8-canary20230927fa59f85d60-linux-x64
key: ${{ runner.os }}-node-20230927
- name: Download node
if: steps.cache-node.outputs.cache-hit != 'true'
run: |
curl https://nodejs.org/download/v8-canary/v21.0.0-v8-canary20230927fa59f85d60/node-v21.0.0-v8-canary20230927fa59f85d60-linux-x64.tar.xz | tar Jx
- name: Cache node
if: steps.cache-node.outputs.cache-hit != 'true'
uses: actions/cache/save@v3
with:
path: node-v21.0.0-v8-canary20230927fa59f85d60-linux-x64
key: ${{ runner.os }}-node-20230927
- name: Restore cached binaryen
id: cache-binaryen
uses: actions/cache/restore@v3
with:
path: binaryen
key: ${{ runner.os }}-binaryen-version_116
- name: Checkout binaryen
if: steps.cache-binaryen.outputs.cache-hit != 'true'
uses: actions/checkout@v4
with:
repository: WebAssembly/binaryen
path: binaryen
submodules: true
ref: version_116
- name: Install ninja
if: steps.cache-binaryen.outputs.cache-hit != 'true'
run: sudo apt-get install ninja-build
- name: Build binaryen
if: steps.cache-binaryen.outputs.cache-hit != 'true'
working-directory: ./binaryen
run: |
cmake -G Ninja .
ninja
- name: Cache binaryen
if: steps.cache-binaryen.outputs.cache-hit != 'true'
uses: actions/cache/save@v3
with:
path: binaryen
key: ${{ runner.os }}-binaryen-version_116
- name: Set paths
run: |
echo "$GITHUB_WORKSPACE/node-v21.0.0-v8-canary20230927fa59f85d60-linux-x64/bin" >> $GITHUB_PATH
echo "$GITHUB_WORKSPACE/binaryen/bin" >> $GITHUB_PATH
- name: Restore cached OCaml
id: cache-ocaml
uses: actions/cache/restore@v3
with:
path: |
~/.opam
_opam
/opt/hostedtoolcache/opam/2.1.5/x86_64/opam
key: ${{ runner.os }}-ocaml-${{ matrix.ocaml-compiler }}
- name: Install OCaml ${{ matrix.ocaml-compiler }}
if: steps.cache-ocaml.outputs.cache-hit != 'true'
uses: ocaml/setup-ocaml@v2
with:
ocaml-compiler: ${{ matrix.ocaml-compiler }}
dune-cache: true
opam-depext: true
opam-depext-flags: --with-test
- name: Install packages
if: steps.cache-ocaml.outputs.cache-hit
run: sudo apt-get install bubblewrap
- name: Set opam path
if: steps.cache-ocaml.outputs.cache-hit
run: |
echo /opt/hostedtoolcache/opam/2.1.5/x86_64 >> $GITHUB_PATH
- name: Cache OCaml
if: steps.cache-ocaml.outputs.cache-hit != 'true'
uses: actions/cache/save@v3
with:
path: |
~/.opam
_opam
/opt/hostedtoolcache/opam/2.1.5/x86_64/opam
key: ${{ runner.os }}-ocaml-${{ matrix.ocaml-compiler }}
- name: Pin dune
run: |
opam pin add -n dune.3.11 https://github.com/ocaml-wasm/dune.git#wasm
- name: Pin packages
run: |
opam pin add -n alcotest https://github.com/ocaml-wasm/alcotest.git#wasm
opam pin add -n async_js https://github.com/ocaml-wasm/async_js.git#wasm
opam pin add -n base https://github.com/ocaml-wasm/base.git#wasm
opam pin add -n base_bigstring https://github.com/ocaml-wasm/base_bigstring.git#wasm
opam pin add -n bigstringaf https://github.com/ocaml-wasm/bigstringaf.git#wasm
opam pin add -n bin_prot https://github.com/ocaml-wasm/bin_prot.git#wasm
opam pin add -n bonsai https://github.com/ocaml-wasm/bonsai.git#wasm
opam pin add -n brr https://github.com/ocaml-wasm/brr.git#wasm
opam pin add -n core https://github.com/ocaml-wasm/core.git#wasm
opam pin add -n core_kernel https://github.com/ocaml-wasm/core_kernel.git#wasm
opam pin add -n cstruct https://github.com/ocaml-wasm/ocaml-cstruct.git#wasm
opam pin add -n gen_js_api https://github.com/ocaml-wasm/gen_js_api.git#wasm
opam pin add -n incr_dom https://github.com/ocaml-wasm/incr_dom.git#wasm
opam pin add -n js_of_ocaml_patches https://github.com/ocaml-wasm/js_of_ocaml_patches.git#wasm
opam pin add -n ppx_css https://github.com/ocaml-wasm/ppx_css.git#wasm
opam pin add -n ppx_expect https://github.com/ocaml-wasm/ppx_expect.git#wasm
opam pin add -n ppx_inline_test https://github.com/ocaml-wasm/ppx_inline_test.git#wasm
opam pin add -n string_dict https://github.com/ocaml-wasm/string_dict.git#wasm
opam pin add -n time_now https://github.com/ocaml-wasm/time_now.git#wasm
opam pin add -n virtual_dom https://github.com/ocaml-wasm/virtual_dom.git#wasm
opam pin add -n zarith_stubs_js https://github.com/ocaml-wasm/zarith_stubs_js.git#wasm
- name: Update dune and test dependencies
run: opam install dune num cohttp-lwt-unix graphics ppx_expect zarith.1.12
- name: Checkout code
uses: actions/checkout@v4
with:
path: wasm_of_ocaml
- name: Build wasm_of_ocaml
working-directory: ./wasm_of_ocaml
run: |
for i in *.opam; do opam pin add -n `basename $i .opam`.`< VERSION` .; done
opam install `basename -s .opam *.opam`
- name: Run tests
working-directory: ./wasm_of_ocaml
run: opam exec -- dune build @all @runtest --profile wasm
- name: Run tests with CPS effects
if: ${{ matrix.ocaml-compiler >= '5.' }}
working-directory: ./wasm_of_ocaml
run: opam exec -- dune build @all @runtest --profile wasm-effects
- name: Install bonsai and zarith_stubs_js
if: ${{ matrix.ocaml-compiler < '5.' }}
run: opam install dune bonsai zarith_stubs_js
- name: Run zarith_stubs_js tests
if: ${{ matrix.ocaml-compiler < '5.' }}
working-directory: ./zarith
run: |
opam exec -- dune build @runtest --profile wasm
- name: Run bonsai tests
if: ${{ matrix.ocaml-compiler < '5.' }}
working-directory: ./bonsai
run: |
opam exec -- dune build @runtest --profile wasm