name: CI on: push: branches: - main pull_request: workflow_dispatch: merge_group: concurrency: group: "${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}" cancel-in-progress: true permissions: contents: read jobs: # # Stage 1 # nix-build: name: Nix Build strategy: fail-fast: false matrix: os: - macos-latest - ubuntu-latest runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@v31 with: extra_nix_config: | extra-substituters = https://anmonteiro.nix-cache.workers.dev extra-trusted-public-keys = ocaml.nix-cache.com-1:/xI2h2+56rwFfKyyFVbkJSeGqSIYMC/Je+7XXqGKDIY= - run: nix build nix-test: name: Nix Tests strategy: fail-fast: false matrix: os: - ubuntu-latest runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@v31 with: extra_nix_config: | extra-substituters = https://anmonteiro.nix-cache.workers.dev extra-trusted-public-keys = ocaml.nix-cache.com-1:/xI2h2+56rwFfKyyFVbkJSeGqSIYMC/Je+7XXqGKDIY= - run: nix develop -i -c make test fmt: name: Format runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@v31 with: extra_nix_config: | extra-substituters = https://anmonteiro.nix-cache.workers.dev extra-trusted-public-keys = ocaml.nix-cache.com-1:/xI2h2+56rwFfKyyFVbkJSeGqSIYMC/Je+7XXqGKDIY= - run: nix develop .#fmt -c make fmt doc: name: Documentation runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@v31 with: extra_nix_config: | extra-substituters = https://anmonteiro.nix-cache.workers.dev extra-trusted-public-keys = ocaml.nix-cache.com-1:/xI2h2+56rwFfKyyFVbkJSeGqSIYMC/Je+7XXqGKDIY= - run: nix develop .#doc -c make doc env: LC_ALL: C # # Stage 2 # build: name: Build # we only start building our other jobs, once our main tests have passed needs: nix-test strategy: fail-fast: false matrix: # Please keep the list in sync with the minimal version of OCaml in # dune-project, dune.opam.template and bootstrap.ml # # We don't run tests on all versions of the Windows environment and on # 4.02.x and 4.07.x in other environments include: # OCaml trunk: - ocaml-compiler: ocaml-variants.5.4.0+trunk os: ubuntu-latest # OCaml 5: ## ubuntu (x86) - ocaml-compiler: 5.3.x os: ubuntu-latest run_tests: true ## macos (Apple Silicon) - ocaml-compiler: 5.3.x os: macos-latest run_tests: true ## macos (x86) - ocaml-compiler: 5.3.x os: macos-13 ## MSVC - ocaml-compiler: ocaml-compiler.5.3.0,system-msvc os: windows-latest run_tests: true ## mingw - ocaml-compiler: ocaml-base-compiler.5.3.0,system-mingw os: windows-latest run_tests: true # OCaml 4: ## ubuntu (x86) - ocaml-compiler: 4.14.x os: ubuntu-latest ## ubuntu (x86-32) - ocaml-compiler: "ocaml-variants.4.14.2+options,ocaml-option-32bit" os: ubuntu-latest apt_update: true ## macos (Apple Silicon) - ocaml-compiler: 4.14.x os: macos-latest # OCaml 4.08: ## ubuntu (x86) - ocaml-compiler: 4.08.x os: ubuntu-latest runs-on: ${{ matrix.os }} steps: - name: Checkout code uses: actions/checkout@v4 # The 32 bit gcc/g++ packages are by default out-of-date so we need to # manually update our package listing. - name: Update apt package listing if: ${{ matrix.apt_update == true }} run: sudo apt update - name: Use OCaml ${{ matrix.ocaml-compiler }} uses: ocaml/setup-ocaml@v3 with: ocaml-compiler: ${{ matrix.ocaml-compiler }} # Install ocamlfind-secondary and ocaml-secondary-compiler, if needed - run: opam install ./dune.opam --deps-only --with-test - name: Install system deps on macOS run: brew install coreutils pkg-config file if: ${{ matrix.os == 'macos-latest' }} # dune doesn't have any additional dependencies so we can build it right # away this makes it possible to see build errors as soon as possible - run: opam exec -- make release - name: Install deps # CR-soon Alizter: Lwt 5.9.2 breaks on msvc so we pin it here. Remove # this when https://github.com/ocsigen/lwt/issues/1071 is fixed. run: | opam pin add lwt 5.9.1 --no-action opam install . --deps-only --with-test opam exec -- make dev-deps if: ${{ matrix.run_tests }} - name: Run test suite on Unix run: opam exec -- make test if: ${{ matrix.os != 'windows-latest' && matrix.run_tests }} - name: Run test suite on Win32 run: opam exec -- make test-windows if: ${{ matrix.os == 'windows-latest' && matrix.run_tests }} # We never build configurator - name: Build configurator run: opam install ./dune-configurator.opam if: ${{ matrix.configurator == true }} coq: name: Coq 8.16.1 needs: nix-build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@v31 with: extra_nix_config: | extra-substituters = https://anmonteiro.nix-cache.workers.dev extra-trusted-public-keys = ocaml.nix-cache.com-1:/xI2h2+56rwFfKyyFVbkJSeGqSIYMC/Je+7XXqGKDIY= - run: nix develop .#coq -c make test-coq env: # We disable the Dune cache when running the tests DUNE_CACHE: disabled wasm: name: Wasm_of_ocaml needs: nix-build runs-on: ubuntu-latest steps: - name: Install Node uses: actions/setup-node@v4 with: node-version: latest - name: Set-up Binaryen uses: Aandreba/setup-binaryen@v1.0.0 with: token: ${{ github.token }} - name: Checkout Code uses: actions/checkout@v4 - name: Use OCaml 5.2.x uses: ocaml/setup-ocaml@v3 with: ocaml-compiler: 5.2.x - name: Install faked binaryen-bin package # The binaries have already been downloaded run: opam install --fake binaryen-bin - name: Install Wasm_of_ocaml run: opam install "wasm_of_ocaml-compiler>=6.1" - name: Set Git User run: | git config --global user.name github-actions[bot] git config --global user.email github-actions[bot]@users.noreply.github.com - name: Run Tests run: opam exec -- make test-wasm cygwin: name: Cygwin Build runs-on: windows-latest steps: - uses: actions/checkout@v4 - name: Setup Cygwin uses: cygwin/cygwin-install-action@v6 with: packages: ocaml gcc-core make - name: Bootstrap Dune run: make bootstrap ## In order to build dune locally we need to have the re library ## available. Even if we do, it is likely that our vendored blake3 rules ## will miss cygwin support. So for now, we don't enable the rest. # - name: Build Dune # run: _boot/dune build dune.install create-local-opam-switch: name: Create local opam switch needs: nix-build strategy: fail-fast: true matrix: os: - macos-latest - ubuntu-latest ocaml-compiler: - 5 - 4.14 runs-on: ${{ matrix.os }} steps: - name: Use OCaml ${{ matrix.ocaml-compiler }} uses: ocaml/setup-ocaml@v3 with: ocaml-compiler: ${{ matrix.ocaml-compiler }} - uses: actions/checkout@v4 - name: Create an empty switch run: opam switch create . --empty - name: Pin local packages to local dependencies run: opam pin add . -n --with-version=dev - name: Install external dependencies run: opam install . build-microbench: name: Build microbenchmarks needs: nix-build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@v31 with: extra_nix_config: | extra-substituters = https://anmonteiro.nix-cache.workers.dev extra-trusted-public-keys = ocaml.nix-cache.com-1:/xI2h2+56rwFfKyyFVbkJSeGqSIYMC/Je+7XXqGKDIY= - run: nix develop .#microbench -c make dune build bench/micro