Implementation of effects based on the Stack Switching proposal #505
This file contains hidden or 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: wasm_of_ocaml | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - master | |
| schedule: | |
| # Prime the caches every Monday | |
| - cron: 0 1 * * MON | |
| jobs: | |
| build: | |
| env: | |
| WASM_OF_OCAML: true | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| os-name: | |
| - Ubuntu | |
| ocaml-compiler: | |
| - "4.14" | |
| - "5.0" | |
| - "5.1" | |
| - "5.2" | |
| - "5.4" | |
| separate_compilation: | |
| - true | |
| jane_street_tests: | |
| - false | |
| all_jane_street_tests: | |
| - false | |
| wasi: | |
| - false | |
| include: | |
| - os: macos-latest | |
| os-name: MacOS | |
| ocaml-compiler: "5.3" | |
| separate_compilation: true | |
| jane_street_tests: false | |
| all_jane_street_tests: false | |
| wasi: false | |
| - os: windows-latest | |
| os-name: Windows | |
| ocaml-compiler: "5.3" | |
| separate_compilation: true | |
| # Jane Street tests disabled for now (basement only works on Linux) | |
| jane_street_tests: false | |
| all_jane_street_tests: false | |
| - os: ubuntu-latest | |
| os-name: Ubuntu | |
| ocaml-compiler: "5.3" | |
| separate_compilation: true | |
| jane_street_tests: true | |
| all_jane_street_tests: true | |
| wasi: false | |
| - os: ubuntu-latest | |
| os-name: Ubuntu | |
| ocaml-compiler: "5.3" | |
| separate_compilation: false | |
| jane_street_tests: true | |
| all_jane_street_tests: false | |
| wasi: false | |
| - os: ubuntu-latest | |
| os-name: Ubuntu | |
| ocaml-compiler: "5.3" | |
| separate_compilation: true | |
| jane_street_tests: false | |
| all_jane_street_tests: false | |
| wasi: true | |
| runs-on: ${{ matrix.os }} | |
| name: | |
| ${{ matrix.wasi && 'WASI / ' || '' }}${{ (! matrix.separate_compilation) && 'Whole program / ' || ''}}${{ matrix.ocaml-compiler }} / ${{ matrix.os-name }}${{ matrix.all_jane_street_tests && ' / Jane Street tests' || ''}} | |
| steps: | |
| - name: Update apt cache | |
| if: ${{ matrix.os == 'ubuntu-latest' }} | |
| run: sudo apt-get update | |
| - name: Checkout tree | |
| uses: actions/checkout@v5 | |
| with: | |
| path: wasm_of_ocaml | |
| - name: Checkout Jane Street opam repository | |
| if: matrix.jane_street_tests | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: janestreet/opam-repository | |
| ref: 2819773f29b6f6c14b918eae3cb40c8ff6b22d0e | |
| path: janestreet/opam-repository | |
| - name: Set-up Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: latest | |
| - name: Set-up Rust toolchain | |
| if: matrix.wasi | |
| uses: actions-rust-lang/setup-rust-toolchain@v1 | |
| - name: Checkout Wasmtime | |
| if: matrix.wasi | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: bytecodealliance/wasmtime | |
| path: wasmtime | |
| submodules: true | |
| - name: Build Wasmtime | |
| if: matrix.wasi | |
| working-directory: ./wasmtime | |
| run: | | |
| cargo build | |
| echo `pwd`/target/debug >> "$GITHUB_PATH" | |
| - name: Checkout Virgil | |
| if: matrix.wasi | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: titzer/virgil | |
| path: virgil | |
| - name: Build Virgil | |
| if: matrix.wasi | |
| working-directory: ./virgil | |
| run: | | |
| export PATH=$PATH:`pwd`/bin | |
| echo `pwd`/bin >> "$GITHUB_PATH" | |
| make | |
| - name: Checkout Wizard engine | |
| if: matrix.wasi | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: titzer/wizard-engine | |
| path: wizard-engine | |
| - name: Build Wizard engine | |
| if: matrix.wasi | |
| working-directory: ./wizard-engine | |
| run: | | |
| make -j 4 | |
| echo `pwd`/bin >> "$GITHUB_PATH" | |
| - name: Set-up OCaml ${{ matrix.ocaml-compiler }} | |
| uses: ocaml/setup-ocaml@v3 | |
| with: | |
| ocaml-compiler: ${{ matrix.ocaml-compiler }} | |
| - name: Install Binaryen | |
| uses: ./wasm_of_ocaml/.github/actions/install-binaryen | |
| with: | |
| build: true | |
| - name: Install faked binaryen-bin package | |
| # It's faster to use a cached version | |
| run: opam install --fake binaryen-bin | |
| # Work-around a race between reinstalling mingw-w64-shims | |
| # (because of conf-pkg-config optional dep) and installing other | |
| # packages that implicitly depend on mingw-w64-shims. | |
| - run: opam install conf-pkg-config conf-mingw-w64-gcc-i686 conf-mingw-w64-g++-x86_64 | |
| if: runner.os == 'Windows' | |
| - name: Pin wasm_of_ocaml | |
| working-directory: ./wasm_of_ocaml | |
| run: opam pin . -n --with-version dev | |
| - name: Checkout Jane Street packages | |
| if: matrix.jane_street_tests | |
| run: | | |
| opam repo add js janestreet/opam-repository | |
| opam install opam-format | |
| opam exec -- dune exec --root wasm_of_ocaml tools/ci_setup.exe | |
| - name: Pin Jane Street packages (v0.16) | |
| if: contains(fromJson('["4.14","5.0","5.1","5.2"]'), matrix.ocaml-compiler) | |
| run: | | |
| opam pin add -n base.v0.16.1 https://github.com/ocaml-wasm/base.git#wasm | |
| opam pin add -n time_now.v0.16.1 https://github.com/ocaml-wasm/time_now.git#wasm | |
| opam pin add -n ppx_inline_test.v0.16.1 https://github.com/ocaml-wasm/ppx_inline_test.git#wasm | |
| opam pin add -n ppx_expect.v0.16.1 https://github.com/ocaml-wasm/ppx_expect.git#wasm | |
| - name: Pin Jane Street packages (v0.17) | |
| if: ${{ ! (matrix.jane_street_tests || contains(fromJson('["4.14","5.0","5.1","5.2"]'), matrix.ocaml-compiler)) }} | |
| run: | | |
| opam pin add -n base.v0.17.3 https://github.com/ocaml-wasm/base.git#wasm-v0.17 | |
| opam pin add -n time_now.v0.17.0 https://github.com/ocaml-wasm/time_now.git#wasm-v0.17 | |
| opam pin add -n ppx_inline_test.v0.17.1 https://github.com/ocaml-wasm/ppx_inline_test.git#wasm-v0.17 | |
| opam pin add -n ppx_expect.v0.17.3 https://github.com/ocaml-wasm/ppx_expect.git#wasm-v0.17 | |
| - name: Install wasm_of_ocaml and its test dependencies | |
| working-directory: ./wasm_of_ocaml | |
| run: | | |
| opam install . -t | |
| - name: Run tests | |
| if: ${{ matrix.separate_compilation && ! matrix.wasi }} | |
| working-directory: ./wasm_of_ocaml | |
| run: opam exec -- dune build @runtest-wasm | |
| # we continue-on-error on windows because we seem to often hit | |
| # an internal assert inside libuv. | |
| # See https://github.com/libuv/libuv/issues/3622 | |
| - name: Run tests with CPS effects | |
| if: ${{ matrix.ocaml-compiler >= '5.' && matrix.separate_compilation && ! matrix.wasi }} | |
| continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
| working-directory: ./wasm_of_ocaml | |
| run: opam exec -- dune build @runtest-wasm --profile with-effects | |
| - name: Run tests (WASI runtime - node) | |
| if: ${{ false }} | |
| working-directory: ./wasm_of_ocaml | |
| run: opam exec -- dune build @runtest-wasm --profile wasi | |
| - name: Run tests (WASI runtime - Wizard engine) | |
| if: ${{ matrix.wasi }} | |
| working-directory: ./wasm_of_ocaml | |
| env: | |
| WASM_ENGINE: wizard-fast | |
| run: opam exec -- dune build @runtest-wasm --profile wasi | |
| - name: Run tests (WASI runtime - wasmtime) | |
| if: ${{ false }} | |
| working-directory: ./wasm_of_ocaml | |
| env: | |
| WASM_ENGINE: wasmtime | |
| WASI_FLAGS: --enable exnref | |
| run: opam exec -- dune build @runtest-wasm --profile wasi | |
| - name: Run tests (WASI runtime - Wizard engine - SPC) | |
| if: ${{ matrix.wasi }} | |
| working-directory: ./wasm_of_ocaml | |
| env: | |
| WASM_ENGINE: wizard-spc | |
| WASI_FLAGS: --enable exnref | |
| run: opam exec -- dune build @runtest-wasm --profile wasi | |
| - name: Run Base tests | |
| if: matrix.all_jane_street_tests | |
| continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
| working-directory: ./janestreet/lib/base | |
| run: opam exec -- dune runtest | |
| - name: Run Base bigstring tests | |
| if: matrix.all_jane_street_tests | |
| continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
| working-directory: ./janestreet/lib/base_bigstring | |
| run: opam exec -- dune runtest | |
| - name: Run Core tests | |
| if: matrix.all_jane_street_tests | |
| continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
| working-directory: ./janestreet/lib/core | |
| run: opam exec -- dune runtest | |
| - name: Run Bignum tests | |
| if: matrix.all_jane_street_tests | |
| continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
| working-directory: ./janestreet/lib/bignum | |
| run: opam exec -- dune runtest | |
| - name: Run Bin_prot tests | |
| if: matrix.all_jane_street_tests | |
| continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
| working-directory: ./janestreet/lib/bin_prot | |
| run: opam exec -- dune runtest | |
| - name: Run String_dict tests | |
| if: matrix.all_jane_street_tests | |
| continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
| working-directory: ./janestreet/lib/string_dict | |
| run: opam exec -- dune runtest | |
| - name: Run Zarith tests | |
| if: matrix.all_jane_street_tests | |
| continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
| working-directory: ./janestreet/lib/zarith_stubs_js | |
| run: opam exec -- dune runtest | |
| - name: Run Virtual_dom tests | |
| if: matrix.all_jane_street_tests | |
| continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
| working-directory: ./janestreet/lib/virtual_dom | |
| run: opam exec -- dune runtest | |
| - name: Run Bonsai tests | |
| if: ${{ matrix.all_jane_street_tests && matrix.os != 'windows-latest' }} | |
| continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
| working-directory: ./janestreet/lib/bonsai_test | |
| run: opam exec -- dune runtest | |
| - name: Run Bonsai web tests | |
| if: ${{ matrix.all_jane_street_tests && matrix.os != 'windows-latest' }} | |
| continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
| working-directory: ./janestreet/lib/bonsai_web_test | |
| run: opam exec -- dune runtest | |
| - name: Run Bonsai web components' tests | |
| if: ${{ matrix.all_jane_street_tests && matrix.os != 'windows-latest' }} | |
| continue-on-error: ${{ matrix.os == 'windows-latest' }} | |
| working-directory: ./janestreet/lib/bonsai_web_components | |
| run: opam exec -- dune runtest | |
| - name: Run Bonsai tests (release profile) | |
| if: ${{ ! matrix.separate_compilation }} | |
| working-directory: ./janestreet/lib/bonsai_test | |
| run: opam exec -- dune runtest --profile release | |
| - name: Run Bonsai web tests (release profile) | |
| if: ${{ ! matrix.separate_compilation }} | |
| working-directory: ./janestreet/lib/bonsai_web_test | |
| run: opam exec -- dune runtest --profile release | |
| - name: Run Bonsai web components' tests (release profile) | |
| if: ${{ ! matrix.separate_compilation }} | |
| working-directory: ./janestreet/lib/bonsai_web_components | |
| run: opam exec -- dune runtest --profile release |