300 lines
8.9 KiB
YAML
300 lines
8.9 KiB
YAML
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
|