Set-up continuous integration #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: 21.0.0-v8-canary | |
- 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 |