@@ -68,33 +68,13 @@ jobs:
6868 exe-suffix : " .exe"
6969 dune-profile : release
7070
71- <<<<<<< HEAD
7271 # Disable for now. eio and eio_main require ocaml >= 5.2.0
7372 # Verify that the compiler still builds with the oldest OCaml version we support.
7473 # - os: ubuntu-24.04
7574 # ocaml_compiler: ocaml-variants.5.0.0+options,ocaml-option-static
7675 # node-target: linux-x64
7776 # rust-target: x86_64-unknown-linux-musl
7877 # dune-profile: static
79- ||||||| 5ec125a91
80- # Verify that the compiler still builds with older OCaml versions
81- - os : ubuntu-latest
82- ocaml_compiler : ocaml-variants.5.0.0+options,ocaml-option-static
83- - os : ubuntu-latest
84- ocaml_compiler : ocaml-variants.4.14.2+options,ocaml-option-static
85- - os : ubuntu-latest
86- ocaml_compiler : ocaml-variants.4.13.0+options,ocaml-option-static
87- =======
88- # Verify that the compiler still builds with the oldest OCaml version we support.
89- # Steps comparing OCaml and Rust rewatch are skipped on this job; the
90- # first linux-x64 job runs them. OCaml 5.0 does not build with GCC 15
91- # (C23 by default), so this job stays on Ubuntu 24.04.
92- - os : ubuntu-24.04
93- ocaml_compiler : ocaml-variants.5.0.0+options,ocaml-option-static
94- node-target : linux-x64
95- rust-target : x86_64-unknown-linux-musl
96- dune-profile : static
97- >>>>>>> master
9878
9979 runs-on : ${{matrix.os}}
10080
11898
11999 - name : Setup Linux dependencies
120100 if : runner.os == 'Linux'
121- <<<<<<< HEAD
122101 uses : ./.github/actions/setup-linux-dependencies
123102
124103 - name : Build rewatch
@@ -128,143 +107,22 @@ jobs:
128107 rust-target : ${{ matrix.rust-target }}
129108 exe-suffix : ${{ matrix.exe-suffix }}
130109 run-quality-checks : " true"
131- ||||||| 5ec125a91
132- uses : awalsh128/cache-apt-pkgs-action@v1.4.2
133- with :
134- # See https://github.com/ocaml/setup-ocaml/blob/b2105f9/packages/setup-ocaml/src/unix.ts#L9
135- packages : bubblewrap darcs g++-multilib gcc-multilib mercurial musl-tools rsync
136- version : v2
137- =======
138- uses : ./.github/actions/setup-linux-dependencies
139- >>>>>>> master
140110
141- <<<<<<< HEAD
142111 # The static OCaml switch uses musl-gcc. linux-libc-dev installs Linux
143112 # headers under /usr/include, but musl-gcc searches the musl include dir.
144113 # Link the Linux headers into musl's include path so packages with C stubs
145114 # such as uring can include <linux/...> headers.
146115 - name : Make Linux headers visible to musl-gcc
147116 if : runner.os == 'Linux'
148- ||||||| 5ec125a91
149- # matrix.ocaml_compiler may contain commas
150- - name : Get OPAM cache key
151- shell : bash
152- run : echo "opam_cache_key=opam-env-v5-${{ matrix.os }}-${{ matrix.ocaml_compiler }}-${{ hashFiles('dune-project') }}" | sed 's/,/-/g' >> $GITHUB_ENV
153-
154- - name : Restore OPAM environment
155- id : cache-opam-env
156- uses : actions/cache/restore@v4
157- with :
158- path : |
159- ${{ runner.tool_cache }}/opam
160- ~/.opam
161- _opam
162- .opam-path
163- D:\cygwin
164- D:\.opam
165- key : ${{ env.opam_cache_key }}
166-
167- - name : Use OCaml ${{matrix.ocaml_compiler}}
168- uses : ocaml/setup-ocaml@v3.0.15
169- if : steps.cache-opam-env.outputs.cache-hit != 'true'
170- with :
171- ocaml-compiler : ${{matrix.ocaml_compiler}}
172- opam-pin : false
173-
174- - name : Get OPAM executable path
175- if : steps.cache-opam-env.outputs.cache-hit != 'true'
176- uses : actions/github-script@v7
177- with :
178- script : |
179- const opamPath = await io.which('opam', true);
180- console.log('opam executable found: %s', opamPath);
181-
182- const fs = require('fs/promises');
183- await fs.writeFile('.opam-path', opamPath, 'utf-8');
184- console.log('stored path to .opam-path');
185-
186- - name : Install OPAM dependencies
187- if : steps.cache-opam-env.outputs.cache-hit != 'true'
188- run : opam install . --deps-only --with-test
189-
190- - name : Cache OPAM environment
191- if : steps.cache-opam-env.outputs.cache-hit != 'true'
192- uses : actions/cache/save@v4
193- with :
194- path : |
195- ${{ runner.tool_cache }}/opam
196- ~/.opam
197- _opam
198- .opam-path
199- D:\cygwin
200- D:\.opam
201- key : ${{ env.opam_cache_key }}
202-
203- - name : Use cached OPAM environment
204- if : steps.cache-opam-env.outputs.cache-hit == 'true'
205- =======
206- - name : Build rewatch
207- uses : ./.github/actions/build-rewatch
208- with :
209- cache-target : ${{ matrix.rust-target }}
210- rust-target : ${{ matrix.rust-target }}
211- exe-suffix : ${{ matrix.exe-suffix }}
212- run-quality-checks : " true"
213-
214- - name : Setup OCaml ${{ matrix.ocaml_compiler }}
215- id : setup_ocaml
216- uses : ./.github/actions/setup-ocaml
217- with :
218- compiler : ${{ matrix.ocaml_compiler }}
219- os : ${{ matrix.os }}
220- cache-prefix : opam-env-v9
221-
222- - name : Compiler build state key
223- id : compiler-build-state-key
224- shell : bash
225- >>>>>>> master
226117 run : |
227- <<<<<<< HEAD
228118 set -eux
229- ||||||| 5ec125a91
230- # https://github.com/ocaml/setup-ocaml/blob/b2105f9/packages/setup-ocaml/src/installer.ts#L33
231- echo "OPAMVERBOSE=$RUNNER_DEBUG" >> "$GITHUB_ENV"
232- echo "OPAMCOLOR=always" >> "$GITHUB_ENV"
233- echo "OPAMCONFIRMLEVEL=unsafe-yes" >> "$GITHUB_ENV"
234- echo "OPAMERRLOGLEN=0" >> "$GITHUB_ENV"
235- echo "OPAMPRECISETRACKING=1" >> "$GITHUB_ENV"
236- echo "OPAMYES=1" >> "$GITHUB_ENV"
237- =======
238- echo "value=compiler-build-state-v1-${{ matrix.os }}-${{ steps.setup_ocaml.outputs.setup_version }}-${{ matrix.ocaml_compiler }}-${{ hashFiles('*.opam') }}" \
239- | sed 's/,/-/g' >> "$GITHUB_OUTPUT"
240- >>>>>>> master
241119
242- <<<<<<< HEAD
243120 # Get the GNU multiarch triplet for the current machine.
244121 # Examples:
245122 # x86_64-linux-gnu
246123 # aarch64-linux-gnu
247124 GNU_MULTIARCH="$(gcc -print-multiarch)"
248- ||||||| 5ec125a91
249- if [[ "$RUNNER_OS" != "Windows" ]]; then
250- echo "OPAMROOT=$HOME/.opam" >> "$GITHUB_ENV"
251- else
252- echo "OPAMROOT=D:\\.opam" >> "$GITHUB_ENV"
253- fi
254- =======
255- - name : Restore compiler build state
256- if : github.base_ref == 'master' || github.ref == 'refs/heads/master'
257- id : compiler-build-state
258- uses : actions/cache/restore@v6
259- with :
260- path : |
261- C:\.cache\dune
262- ~/.cache/dune
263- _build
264- key : ${{ steps.compiler-build-state-key.outputs.value }}
265- >>>>>>> master
266125
267- <<<<<<< HEAD
268126 # Convert the GNU triplet into the musl include directory name.
269127 # Examples:
270128 # x86_64-linux-gnu -> x86_64-linux-musl
@@ -326,39 +184,6 @@ jobs:
326184 _build
327185 key : ${{ steps.compiler-build-state-key.outputs.value }}
328186
329- ||||||| 5ec125a91
330- OPAM_PATH="$(cat .opam-path)"
331- chmod +x "$OPAM_PATH"
332- dirname "$OPAM_PATH" >> "$GITHUB_PATH"
333-
334- if [[ "$RUNNER_OS" == "Windows" ]]; then
335- fsutil behavior query SymlinkEvaluation
336- fsutil behavior set symlinkEvaluation R2L:1 R2R:1
337- fsutil behavior query SymlinkEvaluation
338-
339- CYGWIN="winsymlinks:native"
340- CYGWIN_ROOT="D:\\cygwin"
341- CYGWIN_ROOT_BIN="D:\\cygwin\\bin"
342- CYGWIN_ROOT_WRAPPERBIN="D:\\cygwin\\wrapperbin"
343-
344- echo "HOME=$USERPROFILE" >> "$GITHUB_ENV"
345- echo "MSYS=winsymlinks:native" >> "$GITHUB_ENV"
346- echo "CYGWIN=$CYGWIN" >> "$GITHUB_ENV"
347- echo "CYGWIN_ROOT=$CYGWIN_ROOT" >> "$GITHUB_ENV"
348- echo "CYGWIN_ROOT_BIN=$CYGWIN_ROOT_BIN" >> "$GITHUB_ENV"
349- echo "CYGWIN_ROOT_WRAPPERBIN=$CYGWIN_ROOT_WRAPPERBIN" >> "$GITHUB_ENV"
350-
351- echo "$CYGWIN_ROOT_WRAPPERBIN" >> "$GITHUB_PATH"
352- fi
353- shell : bash
354-
355- # see https://github.com/ocaml/setup-ocaml/issues/815
356- - name : " Windows: set SHELLOPTS=igncr"
357- if : runner.os == 'Windows'
358- run : echo "SHELLOPTS=igncr" >>"$GITHUB_ENV"
359-
360- =======
361- >>>>>>> master
362187 - name : Build compiler
363188 run : opam exec -- dune build --display quiet
364189
@@ -458,31 +283,9 @@ jobs:
458283 run : make -C tests/gentype_tests/typescript-react-example clean test
459284 shell : bash
460285
461- <<<<<<< HEAD
462286 - name : Run LSP tests
463287 run : opam exec -- make test-lsp
464- ||||||| 5ec125a91
465- - name : Run syntax benchmarks
466- if : matrix.benchmarks
467- run : ./_build/install/default/bin/syntax_benchmarks | tee tests/benchmark-output.json
468- =======
469- - name : Run OCaml rewatch parity tests
470- if : ${{ !contains(matrix.ocaml_compiler, '5.0.0') }}
471- timeout-minutes : 20
472- run : |
473- . rewatch-ocaml/tests/process_watchdog.sh
474- start_process_watchdog
475- bash rewatch-ocaml/tests/check_canonical_test_coverage.sh
476- bash rewatch-ocaml/tests/check_config_acceptance.sh \
477- packages/@rescript/${{ matrix.node-target }}/bin/rescript-rust.exe \
478- packages/@rescript/${{ matrix.node-target }}/bin/rescript.exe
479- bash rewatch-ocaml/tests/check_command_validation.sh \
480- packages/@rescript/${{ matrix.node-target }}/bin/rescript-rust.exe \
481- packages/@rescript/${{ matrix.node-target }}/bin/rescript.exe
482- shell : bash
483- >>>>>>> master
484288
485- <<<<<<< HEAD
486289 - name : Run OCaml rewatch parity tests
487290 if : ${{ !contains(matrix.ocaml_compiler, '5.0.0') }}
488291 timeout-minutes : 20
@@ -544,75 +347,6 @@ jobs:
544347 if : matrix.node-target == 'linux-arm64'
545348 run : ./rewatch/tests/suite.sh packages/@rescript/${{ matrix.node-target }}/bin/rescript-rust.exe
546349 shell : bash
547- ||||||| 5ec125a91
548- - name : Restore previous benchmark data
549- if : matrix.benchmarks
550- uses : actions/cache/restore@v4
551- with :
552- path : ./tests/benchmark-cache
553- key : syntax-benchmark-v1
554-
555- - name : Create new benchmark data and comment on alert
556- # Do not run for PRs created from other repos as those won't be able to write to the pull request
557- if : ${{ matrix.benchmarks && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.event.repository.full_name) }}
558- uses : benchmark-action/github-action-benchmark@v1
559- with :
560- name : Syntax Benchmarks
561- tool : customSmallerIsBetter
562- output-file-path : tests/benchmark-output.json
563- external-data-json-path : ./tests/benchmark-cache/benchmark-data.json
564- github-token : ${{ secrets.GITHUB_TOKEN }}
565- alert-threshold : " 105%"
566- comment-always : false
567- comment-on-alert : true
568- =======
569- - name : Run OCaml rewatch interactive output tests
570- # Terminal rendering depends on the host OS, not the CPU architecture.
571- # Use the faster ARM runners for one Linux and one macOS check. Windows
572- # does not provide a reliable native equivalent of the `script` PTY.
573- if : matrix.node-target == 'linux-arm64' || matrix.node-target == 'darwin-arm64'
574- timeout-minutes : 15
575- run : |
576- bash rewatch-ocaml/tests/check_interactive_output.sh \
577- packages/@rescript/${{ matrix.node-target }}/bin/rescript-rust.exe \
578- packages/@rescript/${{ matrix.node-target }}/bin/rescript.exe
579- shell : bash
580-
581- - name : Run OCaml rewatch verbose output tests
582- if : ${{ !contains(matrix.ocaml_compiler, '5.0.0') }}
583- timeout-minutes : 10
584- run : |
585- bash rewatch-ocaml/tests/check_verbose_output.sh \
586- packages/@rescript/${{ matrix.node-target }}/bin/rescript-rust.exe \
587- packages/@rescript/${{ matrix.node-target }}/bin/rescript.exe
588- shell : bash
589-
590- - name : Run OCaml rewatch unit tests
591- timeout-minutes : 10
592- run : |
593- opam exec -- dune build tests/rewatch_ounit_tests/rewatch_ounit_tests_main.exe
594- # Run the executable directly so a stuck test leaves live progress;
595- # dune otherwise buffers the test output until the action exits.
596- opam exec -- ./_build/default/tests/rewatch_ounit_tests/rewatch_ounit_tests_main.exe -runner sequential
597- shell : bash
598-
599- - name : Run OCaml rewatch focused integration tests
600- timeout-minutes : 30
601- run : |
602- sh rewatch-ocaml/tests/run.sh packages/@rescript/${{ matrix.node-target }}/bin/rescript.exe
603- shell : bash
604-
605- - name : Run OCaml rewatch canonical tests
606- run : ./rewatch/tests/suite.sh packages/@rescript/${{ matrix.node-target }}/bin/rescript.exe
607- shell : bash
608-
609- # The Rust implementation is kept for comparison. One platform runs its
610- # shared suite; the parity steps exercise it on every platform.
611- - name : Run Rust rewatch reference tests
612- if : matrix.node-target == 'linux-arm64'
613- run : ./rewatch/tests/suite.sh packages/@rescript/${{ matrix.node-target }}/bin/rescript-rust.exe
614- shell : bash
615- >>>>>>> master
616350
617351 - name : Build playground compiler
618352 if : matrix.build_playground
@@ -799,7 +533,6 @@ jobs:
799533 artifact-ids : ${{ needs.build-compiler.outputs.api-docs-artifact-id }}
800534 path : data/api
801535
802- <<<<<<< HEAD
803536 - name : Check if repo is clean
804537 id : diffcheck
805538 run : |
@@ -837,48 +570,6 @@ jobs:
837570 test-installation-npm :
838571 needs :
839572 - pkg-pr-new
840- ||||||| 5ec125a91
841- installationTest :
842- needs : package
843- =======
844- - name : Check if repo is clean
845- id : diffcheck
846- run : |
847- git status
848- if [ -z "$(git status --porcelain)" ]; then
849- echo "clean=true" >> $GITHUB_OUTPUT
850- else
851- echo "clean=false" >> $GITHUB_OUTPUT
852- fi
853-
854- - name : Use Node.js
855- if : steps.diffcheck.outputs.clean == 'false'
856- uses : actions/setup-node@v7
857- with :
858- cache : yarn
859- node-version-file : .node-version
860-
861- - name : Build website
862- if : steps.diffcheck.outputs.clean == 'false'
863- run : |
864- yarn
865- yarn build
866-
867- test-devcontainer :
868- runs-on : ubuntu-26.04-arm
869- steps :
870- - name : Checkout
871- uses : actions/checkout@v7
872- - name : Run make in dev container
873- uses : devcontainers/ci@v0.3
874- with :
875- push : never
876- runCmd : make
877-
878- test-installation-npm :
879- needs :
880- - pkg-pr-new
881- >>>>>>> master
882573 strategy :
883574 fail-fast : false
884575 matrix :
0 commit comments