Organisationsdialohqocaml-grpc13b132 ()(lower-bound)

(lower-bound)

Link Copied
Code Copied

Logs

2026-05-26 14:09.12: New job: test dialohq/ocaml-grpc https://github.com/dialohq/ocaml-grpc.git#refs/pull/70/head (13b132512fdd771906d8efe8cb93a8daf696c958) (linux-x86_64:(lower-bound))
Base: ocaml/opam:debian-13-ocaml-5.2@sha256:26d60e8deaee6424c5d0213b45df9190656e7c616c5febfec9dc170744ad31b1
Opam project build


To reproduce locally:


git clone --recursive "https://github.com/dialohq/ocaml-grpc.git" && cd "ocaml-grpc" && git fetch origin "refs/pull/70/head" && git reset --hard 13b13251
cat > Dockerfile <<'END-OF-DOCKERFILE'
FROM ocaml/opam:debian-13-ocaml-5.2@sha256:26d60e8deaee6424c5d0213b45df9190656e7c616c5febfec9dc170744ad31b1
# debian-13-5.2_opam-2.5
USER 1000:1000
ENV CLICOLOR_FORCE="1"
ENV OPAMCOLOR="always"
WORKDIR /src
RUN sudo ln -f /usr/bin/opam-2.5 /usr/bin/opam
RUN cd ~/opam-repository && (git cat-file -e 1e48ea346f1e1348b56dde290f9df854129cafb9 || git fetch origin master) && git reset -q --hard 1e48ea346f1e1348b56dde290f9df854129cafb9 && git log --no-decorate -n1 --oneline
RUN opam init --reinit -ni
RUN uname -rs && opam exec -- ocaml -version && opam --version
WORKDIR /src
RUN sudo chown opam /src
RUN opam update -u
COPY --chown=1000:1000 grpc.opam grpc-lwt.opam grpc-examples.opam grpc-eio.opam grpc-bench.opam grpc-async.opam ./
RUN opam pin add -yn grpc.dev './' && \
opam pin add -yn grpc-lwt.dev './' && \
opam pin add -yn grpc-examples.dev './' && \
opam pin add -yn grpc-eio.dev './' && \
opam pin add -yn grpc-bench.dev './' && \
opam pin add -yn grpc-async.dev './'
RUN echo '(lang dune 3.0)' > './dune-project'
ENV DEPS="angstrom.0.14.0 asn1-combinators.0.3.1 astring.0.8.5 async.v0.17.0 async_kernel.v0.17.0 async_log.v0.17.0 async_rpc_kernel.v0.17.0 async_unix.v0.17.0 base.v0.17.0 base-bigarray.base base-bytes.base base-domains.base base-nnp.base base-threads.base base-unix.base base64.3.3.0 base_bigstring.v0.17.0 base_quickcheck.v0.17.0 bechamel.0.4.0 bechamel-notty.0.4.0 bigstringaf.0.9.1 bin_prot.v0.17.0 biniou.1.2.2 bos.0.2.1 ca-certs.1.0.1 camlp-streams.5.0.1 capitalization.v0.17.0 cmdliner.1.3.0 cohttp.4.1.2 cohttp-lwt.4.1.2 cohttp-lwt-unix.4.1.2 conduit.6.2.3 conduit-lwt.6.2.3 conduit-lwt-unix.6.2.3 conf-gmp.5 conf-gmp-powm-sec.4 conf-libssl.1 conf-pkg-config.1.0 conf-protoc.1.0.0 core.v0.17.1 core_kernel.v0.17.0 core_unix.v0.17.0 cppo.1.6.7 csexp.1.5.1 cstruct.6.2.0 cstruct-async.6.2.0 digestif.1.3.0 domain-local-await.0.1.0 domain-name.0.3.0 dune.3.12.1 dune-configurator.3.13.1 duration.0.2.1 easy-format.1.3.3 eio.0.12 eio_linux.0.12 eio_main.0.12 eio_posix.0.12 eqaf.0.9 expect_test_helpers_core.v0.17.0 faraday.0.8.1 faraday-async.0.8.2 faraday-lwt.0.7.1 faraday-lwt-unix.0.7.3 fieldslib.v0.17.0 fmt.0.9.0 fpath.0.7.3 gel.v0.17.0 gluten.0.5.2 gluten-async.0.5.2 gluten-eio.0.5.2 gluten-lwt.0.5.2 gluten-lwt-unix.0.5.2 gmap.0.3.0 h2.0.13.0 h2-async.0.13.0 h2-eio.0.13.0 h2-lwt.0.13.0 h2-lwt-unix.0.13.0 hmap.0.8.1 hpack.0.13.0 httpun-types.0.1.0 int_repr.v0.17.0 iomux.0.2 ipaddr.5.6.0 ipaddr-sexp.5.6.0 jane-street-headers.v0.17.0 jsonm.1.0.2 jst-config.v0.17.0 kdf.1.0.0 logs.0.7.0 lwt.5.7.0 lwt-dllist.1.0.0 lwt_ssl.1.2.0 macaddr.5.6.0 magic-mime.1.1.2 mdx.2.4.0 mirage-crypto.1.2.0 mirage-crypto-ec.1.2.0 mirage-crypto-pk.1.2.0 mirage-crypto-rng.1.2.0 mtime.2.1.0 notty.0.2.3 num.1.5 ocaml.5.2.1 ocaml-base-compiler.5.2.1 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-protoc-plugin.4.5.0 ocaml-version.3.5.0 ocaml_intrinsics_kernel.v0.17.0 ocamlbuild.0.14.3 ocamlfind.1.9.6 ocplib-endian.1.1 ohex.0.2.0 optint.0.3.0 parsexp.v0.17.0 ppx_assert.v0.17.0 ppx_base.v0.17.0 ppx_bench.v0.17.0 ppx_bin_prot.v0.17.0 ppx_cold.v0.17.0 ppx_compare.v0.17.0 ppx_custom_printf.v0.17.0 ppx_derivers.1.2.1 ppx_deriving.5.2 ppx_deriving_yojson.3.7.0 ppx_diff.v0.17.0 ppx_disable_unused_warnings.v0.17.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.0 ppx_fields_conv.v0.17.0 ppx_fixed_literal.v0.17.0 ppx_globalize.v0.17.0 ppx_hash.v0.17.0 ppx_here.v0.17.0 ppx_ignore_instrumentation.v0.17.0 ppx_inline_test.v0.17.0 ppx_jane.v0.17.0 ppx_let.v0.17.0 ppx_log.v0.17.0 ppx_module_timer.v0.17.0 ppx_optcomp.v0.17.0 ppx_optional.v0.17.0 ppx_pipebang.v0.17.0 ppx_sexp_conv.v0.17.0 ppx_sexp_message.v0.17.0 ppx_sexp_value.v0.17.0 ppx_stable.v0.17.0 ppx_stable_witness.v0.17.0 ppx_string.v0.17.0 ppx_string_conv.v0.17.0 ppx_tydi.v0.17.0 ppx_typerep_conv.v0.17.0 ppx_variants_conv.v0.17.0 ppxlib.0.33.0 ppxlib_jane.v0.17.0 protocol_version_header.v0.17.0 psq.0.2.0 ptime.1.2.0 re.1.9.0 result.1.5 rresult.0.7.0 seq.0.3 sexp_pretty.v0.17.0 sexplib.v0.17.0 sexplib0.v0.17.0 spawn.v0.15.0 splittable_random.v0.17.0 ssl.0.5.13 stdio.v0.17.0 stdlib-shims.0.1.0 stringext.1.6.0 textutils.v0.17.0 time_now.v0.17.0 timezone.v0.17.0 tls.2.0.1 tls-async.2.0.1 topkg.1.0.8 typerep.v0.17.0 uopt.v0.17.0 uri.4.0.0 uri-sexp.4.0.0 uring.0.5 uutf.1.0.3 variantslib.v0.17.0 x509.1.0.6 yojson.1.6.0 zarith.1.13"
ENV CI="true"
ENV OCAMLCI="true"
RUN opam update --depexts && opam install --cli=2.5 --depext-only -y grpc.dev grpc-lwt.dev grpc-examples.dev grpc-eio.dev grpc-bench.dev grpc-async.dev $DEPS
RUN opam install $DEPS
COPY --chown=1000:1000 . /src
RUN opam exec -- dune build @install @check @runtest && rm -rf _build


END-OF-DOCKERFILE
docker build .
END-REPRO-BLOCK


2026-05-26 14:09.12: Using cache hint "dialohq/ocaml-grpc-ocaml/opam:debian-13-ocaml-5.2@sha256:26d60e8deaee6424c5d0213b45df9190656e7c616c5febfec9dc170744ad31b1-debian-13-5.2_opam-2.5-5658077f483a09e1c92f8ce72008b613"
2026-05-26 14:09.12: Using OBuilder spec:
((from ocaml/opam:debian-13-ocaml-5.2@sha256:26d60e8deaee6424c5d0213b45df9190656e7c616c5febfec9dc170744ad31b1)
(comment debian-13-5.2_opam-2.5)
(user (uid 1000) (gid 1000))
(env CLICOLOR_FORCE 1)
(env OPAMCOLOR always)
(workdir /src)
(run (shell "sudo ln -f /usr/bin/opam-2.5 /usr/bin/opam"))
(run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "cd ~/opam-repository && (git cat-file -e 1e48ea346f1e1348b56dde290f9df854129cafb9 || git fetch origin master) && git reset -q --hard 1e48ea346f1e1348b56dde290f9df854129cafb9 && git log --no-decorate -n1 --oneline"))
(run (shell "opam init --reinit -ni"))
(run (shell "uname -rs && opam exec -- ocaml -version && opam --version"))
(workdir /src)
(run (shell "sudo chown opam /src"))
(run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam update -u"))
(copy (src grpc.opam grpc-lwt.opam grpc-examples.opam grpc-eio.opam grpc-bench.opam grpc-async.opam)
(dst ./))
(run (network host)
(shell  "opam pin add -yn grpc.dev './' && \
\nopam pin add -yn grpc-lwt.dev './' && \
\nopam pin add -yn grpc-examples.dev './' && \
\nopam pin add -yn grpc-eio.dev './' && \
\nopam pin add -yn grpc-bench.dev './' && \
\nopam pin add -yn grpc-async.dev './'"))
(run (shell "echo '(lang dune 3.0)' > './dune-project'"))
(env DEPS "angstrom.0.14.0 asn1-combinators.0.3.1 astring.0.8.5 async.v0.17.0 async_kernel.v0.17.0 async_log.v0.17.0 async_rpc_kernel.v0.17.0 async_unix.v0.17.0 base.v0.17.0 base-bigarray.base base-bytes.base base-domains.base base-nnp.base base-threads.base base-unix.base base64.3.3.0 base_bigstring.v0.17.0 base_quickcheck.v0.17.0 bechamel.0.4.0 bechamel-notty.0.4.0 bigstringaf.0.9.1 bin_prot.v0.17.0 biniou.1.2.2 bos.0.2.1 ca-certs.1.0.1 camlp-streams.5.0.1 capitalization.v0.17.0 cmdliner.1.3.0 cohttp.4.1.2 cohttp-lwt.4.1.2 cohttp-lwt-unix.4.1.2 conduit.6.2.3 conduit-lwt.6.2.3 conduit-lwt-unix.6.2.3 conf-gmp.5 conf-gmp-powm-sec.4 conf-libssl.1 conf-pkg-config.1.0 conf-protoc.1.0.0 core.v0.17.1 core_kernel.v0.17.0 core_unix.v0.17.0 cppo.1.6.7 csexp.1.5.1 cstruct.6.2.0 cstruct-async.6.2.0 digestif.1.3.0 domain-local-await.0.1.0 domain-name.0.3.0 dune.3.12.1 dune-configurator.3.13.1 duration.0.2.1 easy-format.1.3.3 eio.0.12 eio_linux.0.12 eio_main.0.12 eio_posix.0.12 eqaf.0.9 expect_test_helpers_core.v0.17.0 faraday.0.8.1 faraday-async.0.8.2 faraday-lwt.0.7.1 faraday-lwt-unix.0.7.3 fieldslib.v0.17.0 fmt.0.9.0 fpath.0.7.3 gel.v0.17.0 gluten.0.5.2 gluten-async.0.5.2 gluten-eio.0.5.2 gluten-lwt.0.5.2 gluten-lwt-unix.0.5.2 gmap.0.3.0 h2.0.13.0 h2-async.0.13.0 h2-eio.0.13.0 h2-lwt.0.13.0 h2-lwt-unix.0.13.0 hmap.0.8.1 hpack.0.13.0 httpun-types.0.1.0 int_repr.v0.17.0 iomux.0.2 ipaddr.5.6.0 ipaddr-sexp.5.6.0 jane-street-headers.v0.17.0 jsonm.1.0.2 jst-config.v0.17.0 kdf.1.0.0 logs.0.7.0 lwt.5.7.0 lwt-dllist.1.0.0 lwt_ssl.1.2.0 macaddr.5.6.0 magic-mime.1.1.2 mdx.2.4.0 mirage-crypto.1.2.0 mirage-crypto-ec.1.2.0 mirage-crypto-pk.1.2.0 mirage-crypto-rng.1.2.0 mtime.2.1.0 notty.0.2.3 num.1.5 ocaml.5.2.1 ocaml-base-compiler.5.2.1 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-protoc-plugin.4.5.0 ocaml-version.3.5.0 ocaml_intrinsics_kernel.v0.17.0 ocamlbuild.0.14.3 ocamlfind.1.9.6 ocplib-endian.1.1 ohex.0.2.0 optint.0.3.0 parsexp.v0.17.0 ppx_assert.v0.17.0 ppx_base.v0.17.0 ppx_bench.v0.17.0 ppx_bin_prot.v0.17.0 ppx_cold.v0.17.0 ppx_compare.v0.17.0 ppx_custom_printf.v0.17.0 ppx_derivers.1.2.1 ppx_deriving.5.2 ppx_deriving_yojson.3.7.0 ppx_diff.v0.17.0 ppx_disable_unused_warnings.v0.17.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.0 ppx_fields_conv.v0.17.0 ppx_fixed_literal.v0.17.0 ppx_globalize.v0.17.0 ppx_hash.v0.17.0 ppx_here.v0.17.0 ppx_ignore_instrumentation.v0.17.0 ppx_inline_test.v0.17.0 ppx_jane.v0.17.0 ppx_let.v0.17.0 ppx_log.v0.17.0 ppx_module_timer.v0.17.0 ppx_optcomp.v0.17.0 ppx_optional.v0.17.0 ppx_pipebang.v0.17.0 ppx_sexp_conv.v0.17.0 ppx_sexp_message.v0.17.0 ppx_sexp_value.v0.17.0 ppx_stable.v0.17.0 ppx_stable_witness.v0.17.0 ppx_string.v0.17.0 ppx_string_conv.v0.17.0 ppx_tydi.v0.17.0 ppx_typerep_conv.v0.17.0 ppx_variants_conv.v0.17.0 ppxlib.0.33.0 ppxlib_jane.v0.17.0 protocol_version_header.v0.17.0 psq.0.2.0 ptime.1.2.0 re.1.9.0 result.1.5 rresult.0.7.0 seq.0.3 sexp_pretty.v0.17.0 sexplib.v0.17.0 sexplib0.v0.17.0 spawn.v0.15.0 splittable_random.v0.17.0 ssl.0.5.13 stdio.v0.17.0 stdlib-shims.0.1.0 stringext.1.6.0 textutils.v0.17.0 time_now.v0.17.0 timezone.v0.17.0 tls.2.0.1 tls-async.2.0.1 topkg.1.0.8 typerep.v0.17.0 uopt.v0.17.0 uri.4.0.0 uri-sexp.4.0.0 uring.0.5 uutf.1.0.3 variantslib.v0.17.0 x509.1.0.6 yojson.1.6.0 zarith.1.13")
(env CI true)
(env OCAMLCI true)
(run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam update --depexts && opam install --cli=2.5 --depext-only -y grpc.dev grpc-lwt.dev grpc-examples.dev grpc-eio.dev grpc-bench.dev grpc-async.dev $DEPS"))
(run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam install $DEPS"))
(copy (src .) (dst /src))
(run (shell "opam exec -- dune build @install @check @runtest && rm -rf _build"))
)


2026-05-26 14:09.12: Waiting for resource in pool OCluster
2026-05-26 14:09.12: Waiting for worker…
2026-05-26 14:09.13: Got resource from pool OCluster
Building on odawa.caelum.ci.dev
All commits already cached
HEAD is now at 13b1325 build: add h2-eio and eio_main as test deps for grpc-eio


(from ocaml/opam:debian-13-ocaml-5.2@sha256:26d60e8deaee6424c5d0213b45df9190656e7c616c5febfec9dc170744ad31b1)
2026-05-26 14:09.19 ---> using "503ed5afe9018d5040aa2dba759a2e2138f0d96767139d7c938fc99dc949f1e0" from cache


/: (comment debian-13-5.2_opam-2.5)


/: (user (uid 1000) (gid 1000))


/: (env CLICOLOR_FORCE 1)


/: (env OPAMCOLOR always)


/: (workdir /src)


/src: (run (shell "sudo ln -f /usr/bin/opam-2.5 /usr/bin/opam"))
2026-05-26 14:09.19 ---> using "0bf272105382bd787512c287b2362652aa4859b0f5836f3b1f4b55b85352dce7" from cache


/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "cd ~/opam-repository && (git cat-file -e 1e48ea346f1e1348b56dde290f9df854129cafb9 || git fetch origin master) && git reset -q --hard 1e48ea346f1e1348b56dde290f9df854129cafb9 && git log --no-decorate -n1 --oneline"))
From https://github.com/ocaml/opam-repository
* branch                  master     -> FETCH_HEAD
fc08333d1b..1e48ea346f  master     -> origin/master
1e48ea346f Merge pull request #29954 from talex5/release-uring-v2.14.0
2026-05-26 14:09.39 ---> saved as "0f35db193ae52e4cac107f15467ab4603dc7c775eaebecaf643d5e3a1c02ee43"


/src: (run (shell "opam init --reinit -ni"))
Configuring from /home/opam/.opamrc and then from built-in defaults.
Checking for available remotes: rsync and local, git.
- you won't be able to use mercurial repositories unless you install the hg command on your system.
- you won't be able to use darcs repositories unless you install the darcs command on your system.


This version of opam requires an update to the layout of /home/opam/.opam from version 2.1 to version 2.2, which can't be reverted.
You may want to back it up before going further.


Continue? [Y/n] y
[NOTE] The 'jobs' option was reset, its value was 1 and its new value will vary according to the current number of cores on your machine. You can restore the fixed value using:
opam option jobs=1 --global
Format upgrade done.


<><> Updating repositories ><><><><><><><><><><><><><><><><><><><><><><><><><><>
[default] synchronised from git+file:///home/opam/opam-repository
2026-05-26 14:10.02 ---> saved as "cfb7234a1474157a6128fd3829968be054588198469d21c703274dd0e3f8a599"


/src: (run (shell "uname -rs && opam exec -- ocaml -version && opam --version"))
Linux 6.8.0-111-generic
The OCaml toplevel, version 5.2.1
2.5.1
2026-05-26 14:10.20 ---> saved as "9be96bca4289dd9f6f66ea91a6dba4812e65caa3339e512b02aebccbd5d475b8"


/src: (workdir /src)


/src: (run (shell "sudo chown opam /src"))
2026-05-26 14:10.30 ---> saved as "8583923950a23723472bb2f6daabde22242898a4464a752e1f643aa21b117116"


/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam update -u"))


<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>
[default] no changes from git+file:///home/opam/opam-repository


Everything as up-to-date as possible (run with --verbose to show unavailable upgrades).


The following packages are not being upgraded because the new versions conflict with other installed packages:
- ocaml.5.5.0
However, you may "opam upgrade" these packages explicitly at these versions (e.g. "opam upgrade ocaml.5.5.0"), which will ask permission to downgrade or uninstall the conflicting packages.
Nothing to do.
# To update the current shell environment, run: eval $(opam env)
2026-05-26 14:10.53 ---> saved as "00b05f61f8c80b454cf4242eef3f93c8dea2fcd4172b80a52c31a8b04ad81e5d"


/src: (copy (src grpc.opam grpc-lwt.opam grpc-examples.opam grpc-eio.opam grpc-bench.opam grpc-async.opam)
(dst ./))
2026-05-26 14:11.26 ---> saved as "e02719bf624b91b0bb4179730562a25f36d39d8419ddc30aacc851a608c81aa6"


/src: (run (network host)
(shell  "opam pin add -yn grpc.dev './' && \
\nopam pin add -yn grpc-lwt.dev './' && \
\nopam pin add -yn grpc-examples.dev './' && \
\nopam pin add -yn grpc-eio.dev './' && \
\nopam pin add -yn grpc-bench.dev './' && \
\nopam pin add -yn grpc-async.dev './'"))
[grpc.dev] synchronised (file:///src)
grpc is now pinned to file:///src (version dev)
[grpc-lwt.dev] synchronised (file:///src)
grpc-lwt is now pinned to file:///src (version dev)
[grpc-examples.dev] synchronised (file:///src)
grpc-examples is now pinned to file:///src (version dev)
[grpc-eio.dev] synchronised (file:///src)
grpc-eio is now pinned to file:///src (version dev)
[grpc-bench.dev] synchronised (file:///src)
grpc-bench is now pinned to file:///src (version dev)
[grpc-async.dev] synchronised (file:///src)
grpc-async is now pinned to file:///src (version dev)
2026-05-26 14:11.54 ---> saved as "5ae5e721dea7acf90b3609897c5a065d70ce0c6da8fa674fa665d33cb527abba"


/src: (run (shell "echo '(lang dune 3.0)' > './dune-project'"))
2026-05-26 14:12.13 ---> saved as "dd47fd9519c46d550cb5ff0802e06ab40d97ff6725a790bbe4fe016ec9945bdd"


/src: (env DEPS "angstrom.0.14.0 asn1-combinators.0.3.1 astring.0.8.5 async.v0.17.0 async_kernel.v0.17.0 async_log.v0.17.0 async_rpc_kernel.v0.17.0 async_unix.v0.17.0 base.v0.17.0 base-bigarray.base base-bytes.base base-domains.base base-nnp.base base-threads.base base-unix.base base64.3.3.0 base_bigstring.v0.17.0 base_quickcheck.v0.17.0 bechamel.0.4.0 bechamel-notty.0.4.0 bigstringaf.0.9.1 bin_prot.v0.17.0 biniou.1.2.2 bos.0.2.1 ca-certs.1.0.1 camlp-streams.5.0.1 capitalization.v0.17.0 cmdliner.1.3.0 cohttp.4.1.2 cohttp-lwt.4.1.2 cohttp-lwt-unix.4.1.2 conduit.6.2.3 conduit-lwt.6.2.3 conduit-lwt-unix.6.2.3 conf-gmp.5 conf-gmp-powm-sec.4 conf-libssl.1 conf-pkg-config.1.0 conf-protoc.1.0.0 core.v0.17.1 core_kernel.v0.17.0 core_unix.v0.17.0 cppo.1.6.7 csexp.1.5.1 cstruct.6.2.0 cstruct-async.6.2.0 digestif.1.3.0 domain-local-await.0.1.0 domain-name.0.3.0 dune.3.12.1 dune-configurator.3.13.1 duration.0.2.1 easy-format.1.3.3 eio.0.12 eio_linux.0.12 eio_main.0.12 eio_posix.0.12 eqaf.0.9 expect_test_helpers_core.v0.17.0 faraday.0.8.1 faraday-async.0.8.2 faraday-lwt.0.7.1 faraday-lwt-unix.0.7.3 fieldslib.v0.17.0 fmt.0.9.0 fpath.0.7.3 gel.v0.17.0 gluten.0.5.2 gluten-async.0.5.2 gluten-eio.0.5.2 gluten-lwt.0.5.2 gluten-lwt-unix.0.5.2 gmap.0.3.0 h2.0.13.0 h2-async.0.13.0 h2-eio.0.13.0 h2-lwt.0.13.0 h2-lwt-unix.0.13.0 hmap.0.8.1 hpack.0.13.0 httpun-types.0.1.0 int_repr.v0.17.0 iomux.0.2 ipaddr.5.6.0 ipaddr-sexp.5.6.0 jane-street-headers.v0.17.0 jsonm.1.0.2 jst-config.v0.17.0 kdf.1.0.0 logs.0.7.0 lwt.5.7.0 lwt-dllist.1.0.0 lwt_ssl.1.2.0 macaddr.5.6.0 magic-mime.1.1.2 mdx.2.4.0 mirage-crypto.1.2.0 mirage-crypto-ec.1.2.0 mirage-crypto-pk.1.2.0 mirage-crypto-rng.1.2.0 mtime.2.1.0 notty.0.2.3 num.1.5 ocaml.5.2.1 ocaml-base-compiler.5.2.1 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-protoc-plugin.4.5.0 ocaml-version.3.5.0 ocaml_intrinsics_kernel.v0.17.0 ocamlbuild.0.14.3 ocamlfind.1.9.6 ocplib-endian.1.1 ohex.0.2.0 optint.0.3.0 parsexp.v0.17.0 ppx_assert.v0.17.0 ppx_base.v0.17.0 ppx_bench.v0.17.0 ppx_bin_prot.v0.17.0 ppx_cold.v0.17.0 ppx_compare.v0.17.0 ppx_custom_printf.v0.17.0 ppx_derivers.1.2.1 ppx_deriving.5.2 ppx_deriving_yojson.3.7.0 ppx_diff.v0.17.0 ppx_disable_unused_warnings.v0.17.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.0 ppx_fields_conv.v0.17.0 ppx_fixed_literal.v0.17.0 ppx_globalize.v0.17.0 ppx_hash.v0.17.0 ppx_here.v0.17.0 ppx_ignore_instrumentation.v0.17.0 ppx_inline_test.v0.17.0 ppx_jane.v0.17.0 ppx_let.v0.17.0 ppx_log.v0.17.0 ppx_module_timer.v0.17.0 ppx_optcomp.v0.17.0 ppx_optional.v0.17.0 ppx_pipebang.v0.17.0 ppx_sexp_conv.v0.17.0 ppx_sexp_message.v0.17.0 ppx_sexp_value.v0.17.0 ppx_stable.v0.17.0 ppx_stable_witness.v0.17.0 ppx_string.v0.17.0 ppx_string_conv.v0.17.0 ppx_tydi.v0.17.0 ppx_typerep_conv.v0.17.0 ppx_variants_conv.v0.17.0 ppxlib.0.33.0 ppxlib_jane.v0.17.0 protocol_version_header.v0.17.0 psq.0.2.0 ptime.1.2.0 re.1.9.0 result.1.5 rresult.0.7.0 seq.0.3 sexp_pretty.v0.17.0 sexplib.v0.17.0 sexplib0.v0.17.0 spawn.v0.15.0 splittable_random.v0.17.0 ssl.0.5.13 stdio.v0.17.0 stdlib-shims.0.1.0 stringext.1.6.0 textutils.v0.17.0 time_now.v0.17.0 timezone.v0.17.0 tls.2.0.1 tls-async.2.0.1 topkg.1.0.8 typerep.v0.17.0 uopt.v0.17.0 uri.4.0.0 uri-sexp.4.0.0 uring.0.5 uutf.1.0.3 variantslib.v0.17.0 x509.1.0.6 yojson.1.6.0 zarith.1.13")


/src: (env CI true)


/src: (env OCAMLCI true)


/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam update --depexts && opam install --cli=2.5 --depext-only -y grpc.dev grpc-lwt.dev grpc-examples.dev grpc-eio.dev grpc-bench.dev grpc-async.dev $DEPS"))
+ /usr/bin/sudo "apt-get" "update"
- Get:1 http://deb.debian.org/debian trixie InRelease [140 kB]
- Get:2 http://deb.debian.org/debian trixie-updates InRelease [47.3 kB]
- Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
- Get:4 http://deb.debian.org/debian trixie/main amd64 Packages [9671 kB]
- Get:5 http://deb.debian.org/debian-security trixie-security/main amd64 Packages [175 kB]
- Fetched 10.1 MB in 12s (868 kB/s)
- Reading package lists...
- 


<><> Synchronising pinned packages ><><><><><><><><><><><><><><><><><><><><><><>
[grpc.dev] synchronised (file:///src)
[grpc-async.dev] synchronised (file:///src)
[grpc-bench.dev] synchronised (file:///src)
[grpc-eio.dev] synchronised (file:///src)
[grpc-examples.dev] synchronised (file:///src)
[grpc-lwt.dev] synchronised (file:///src)


[NOTE] Package ocaml-options-vanilla is already installed (current version is 1).
[NOTE] Package ocaml-config is already installed (current version is 3).
[NOTE] Package ocaml-base-compiler is already installed (current version is 5.2.1).
[NOTE] Package ocaml is already installed (current version is 5.2.1).
[NOTE] Package base-unix is already installed (current version is base).
[NOTE] Package base-threads is already installed (current version is base).
[NOTE] Package base-nnp is already installed (current version is base).
[NOTE] Package base-domains is already installed (current version is base).
[NOTE] Package base-bigarray is already installed (current version is base).


The following system packages will first need to be installed:
libgmp-dev libprotobuf-dev libssl-dev pkg-config protobuf-compiler


<><> Handling external dependencies <><><><><><><><><><><><><><><><><><><><><><>


+ /usr/bin/sudo "apt-get" "install" "-qq" "-yy" "libgmp-dev" "libprotobuf-dev" "libssl-dev" "pkg-config" "protobuf-compiler"
- (Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 20654 files and directories currently installed.)
- Preparing to unpack .../openssl-provider-legacy_3.5.6-1~deb13u1_amd64.deb ...
- Unpacking openssl-provider-legacy (3.5.6-1~deb13u1) over (3.5.5-1~deb13u2) ...
- Setting up openssl-provider-legacy (3.5.6-1~deb13u1) ...
- (Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 20654 files and directories currently installed.)
- Preparing to unpack .../libssl3t64_3.5.6-1~deb13u1_amd64.deb ...
- Unpacking libssl3t64:amd64 (3.5.6-1~deb13u1) over (3.5.5-1~deb13u2) ...
- Setting up libssl3t64:amd64 (3.5.6-1~deb13u1) ...
- Selecting previously unselected package libgmpxx4ldbl:amd64.
- (Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 20654 files and directories currently installed.)
- Preparing to unpack .../00-libgmpxx4ldbl_2%3a6.3.0+dfsg-3_amd64.deb ...
- Unpacking libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-3) ...
- Selecting previously unselected package libgmp-dev:amd64.
- Preparing to unpack .../01-libgmp-dev_2%3a6.3.0+dfsg-3_amd64.deb ...
- Unpacking libgmp-dev:amd64 (2:6.3.0+dfsg-3) ...
- Selecting previously unselected package libpkgconf3:amd64.
- Preparing to unpack .../02-libpkgconf3_1.8.1-4_amd64.deb ...
- Unpacking libpkgconf3:amd64 (1.8.1-4) ...
- Selecting previously unselected package zlib1g-dev:amd64.
- Preparing to unpack .../03-zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1+b1_amd64.deb ...
- Unpacking zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1+b1) ...
- Selecting previously unselected package libprotobuf32t64:amd64.
- Preparing to unpack .../04-libprotobuf32t64_3.21.12-11_amd64.deb ...
- Unpacking libprotobuf32t64:amd64 (3.21.12-11) ...
- Selecting previously unselected package libprotobuf-lite32t64:amd64.
- Preparing to unpack .../05-libprotobuf-lite32t64_3.21.12-11_amd64.deb ...
- Unpacking libprotobuf-lite32t64:amd64 (3.21.12-11) ...
- Selecting previously unselected package libprotobuf-dev:amd64.
- Preparing to unpack .../06-libprotobuf-dev_3.21.12-11_amd64.deb ...
- Unpacking libprotobuf-dev:amd64 (3.21.12-11) ...
- Selecting previously unselected package libprotoc32t64:amd64.
- Preparing to unpack .../07-libprotoc32t64_3.21.12-11_amd64.deb ...
- Unpacking libprotoc32t64:amd64 (3.21.12-11) ...
- Selecting previously unselected package libssl-dev:amd64.
- Preparing to unpack .../08-libssl-dev_3.5.6-1~deb13u1_amd64.deb ...
- Unpacking libssl-dev:amd64 (3.5.6-1~deb13u1) ...
- Preparing to unpack .../09-openssl_3.5.6-1~deb13u1_amd64.deb ...
- Unpacking openssl (3.5.6-1~deb13u1) over (3.5.5-1~deb13u2) ...
- Selecting previously unselected package pkgconf-bin.
- Preparing to unpack .../10-pkgconf-bin_1.8.1-4_amd64.deb ...
- Unpacking pkgconf-bin (1.8.1-4) ...
- Selecting previously unselected package pkgconf:amd64.
- Preparing to unpack .../11-pkgconf_1.8.1-4_amd64.deb ...
- Unpacking pkgconf:amd64 (1.8.1-4) ...
- Selecting previously unselected package pkg-config:amd64.
- Preparing to unpack .../12-pkg-config_1.8.1-4_amd64.deb ...
- Unpacking pkg-config:amd64 (1.8.1-4) ...
- Selecting previously unselected package protobuf-compiler.
- Preparing to unpack .../13-protobuf-compiler_3.21.12-11_amd64.deb ...
- Unpacking protobuf-compiler (3.21.12-11) ...
- Setting up libprotobuf-lite32t64:amd64 (3.21.12-11) ...
- Setting up libprotobuf32t64:amd64 (3.21.12-11) ...
- Setting up libpkgconf3:amd64 (1.8.1-4) ...
- Setting up libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-3) ...
- Setting up libssl-dev:amd64 (3.5.6-1~deb13u1) ...
- Setting up pkgconf-bin (1.8.1-4) ...
- Setting up zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1+b1) ...
- Setting up libprotoc32t64:amd64 (3.21.12-11) ...
- Setting up openssl (3.5.6-1~deb13u1) ...
- Setting up libgmp-dev:amd64 (2:6.3.0+dfsg-3) ...
- Setting up protobuf-compiler (3.21.12-11) ...
- Setting up pkgconf:amd64 (1.8.1-4) ...
- Setting up libprotobuf-dev:amd64 (3.21.12-11) ...
- Setting up pkg-config:amd64 (1.8.1-4) ...
- Processing triggers for libc-bin (2.41-12+deb13u2) ...
# To update the current shell environment, run: eval $(opam env)
2026-05-26 14:13.17 ---> saved as "0014629a41dde852ba9ecb03626c2f7627892941c8a3f29471cdae5c777e46c9"


/src: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam install $DEPS"))
[NOTE] Package ocaml-options-vanilla is already installed (current version is 1).
[NOTE] Package ocaml-config is already installed (current version is 3).
[NOTE] Package ocaml-base-compiler is already installed (current version is 5.2.1).
[NOTE] Package ocaml is already installed (current version is 5.2.1).
[NOTE] Package base-unix is already installed (current version is base).
[NOTE] Package base-threads is already installed (current version is base).
[NOTE] Package base-nnp is already installed (current version is base).
[NOTE] Package base-domains is already installed (current version is base).
[NOTE] Package base-bigarray is already installed (current version is base).
The following actions will be performed:
=== install 180 packages
- install angstrom                    0.14.0
- install asn1-combinators            0.3.1
- install astring                     0.8.5
- install async                       v0.17.0
- install async_kernel                v0.17.0
- install async_log                   v0.17.0
- install async_rpc_kernel            v0.17.0
- install async_unix                  v0.17.0
- install base                        v0.17.0
- install base-bytes                  base
- install base64                      3.3.0
- install base_bigstring              v0.17.0
- install base_quickcheck             v0.17.0
- install bechamel                    0.4.0
- install bechamel-notty              0.4.0
- install bigstringaf                 0.9.1
- install bin_prot                    v0.17.0
- install biniou                      1.2.2
- install bos                         0.2.1
- install ca-certs                    1.0.1
- install camlp-streams               5.0.1
- install capitalization              v0.17.0
- install cmdliner                    1.3.0
- install cohttp                      4.1.2
- install cohttp-lwt                  4.1.2
- install cohttp-lwt-unix             4.1.2
- install conduit                     6.2.3
- install conduit-lwt                 6.2.3
- install conduit-lwt-unix            6.2.3
- install conf-gmp                    5
- install conf-gmp-powm-sec           4
- install conf-libssl                 1
- install conf-pkg-config             1.0
- install conf-protoc                 1.0.0
- install core                        v0.17.1
- install core_kernel                 v0.17.0
- install core_unix                   v0.17.0
- install cppo                        1.6.7
- install csexp                       1.5.1
- install cstruct                     6.2.0
- install cstruct-async               6.2.0
- install digestif                    1.3.0
- install domain-local-await          0.1.0
- install domain-name                 0.3.0
- install dune                        3.12.1
- install dune-configurator           3.13.1
- install duration                    0.2.1
- install easy-format                 1.3.3
- install eio                         0.12
- install eio_linux                   0.12
- install eio_main                    0.12
- install eio_posix                   0.12
- install eqaf                        0.9
- install expect_test_helpers_core    v0.17.0
- install faraday                     0.8.1
- install faraday-async               0.8.2
- install faraday-lwt                 0.7.1
- install faraday-lwt-unix            0.7.3
- install fieldslib                   v0.17.0
- install fmt                         0.9.0
- install fpath                       0.7.3
- install gel                         v0.17.0
- install gluten                      0.5.2
- install gluten-async                0.5.2
- install gluten-eio                  0.5.2
- install gluten-lwt                  0.5.2
- install gluten-lwt-unix             0.5.2
- install gmap                        0.3.0
- install h2                          0.13.0
- install h2-async                    0.13.0
- install h2-eio                      0.13.0
- install h2-lwt                      0.13.0
- install h2-lwt-unix                 0.13.0
- install hmap                        0.8.1
- install hpack                       0.13.0
- install httpun-types                0.1.0
- install int_repr                    v0.17.0
- install iomux                       0.2
- install ipaddr                      5.6.0
- install ipaddr-sexp                 5.6.0
- install jane-street-headers         v0.17.0
- install jsonm                       1.0.2
- install jst-config                  v0.17.0
- install kdf                         1.0.0
- install logs                        0.7.0
- install lwt                         5.7.0
- install lwt-dllist                  1.0.0
- install lwt_ssl                     1.2.0
- install macaddr                     5.6.0
- install magic-mime                  1.1.2
- install mdx                         2.4.0
- install mirage-crypto               1.2.0
- install mirage-crypto-ec            1.2.0
- install mirage-crypto-pk            1.2.0
- install mirage-crypto-rng           1.2.0
- install mtime                       2.1.0
- install notty                       0.2.3
- install num                         1.5
- install ocaml-compiler-libs         v0.17.0
- install ocaml-protoc-plugin         4.5.0
- install ocaml-version               3.5.0
- install ocaml_intrinsics_kernel     v0.17.0
- install ocamlbuild                  0.14.3
- install ocamlfind                   1.9.6
- install ocplib-endian               1.1
- install ohex                        0.2.0
- install optint                      0.3.0
- install parsexp                     v0.17.0
- install ppx_assert                  v0.17.0
- install ppx_base                    v0.17.0
- install ppx_bench                   v0.17.0
- install ppx_bin_prot                v0.17.0
- install ppx_cold                    v0.17.0
- install ppx_compare                 v0.17.0
- install ppx_custom_printf           v0.17.0
- install ppx_derivers                1.2.1
- install ppx_deriving                5.2
- install ppx_deriving_yojson         3.7.0
- install ppx_diff                    v0.17.0
- install ppx_disable_unused_warnings v0.17.0
- install ppx_enumerate               v0.17.0
- install ppx_expect                  v0.17.0
- install ppx_fields_conv             v0.17.0
- install ppx_fixed_literal           v0.17.0
- install ppx_globalize               v0.17.0
- install ppx_hash                    v0.17.0
- install ppx_here                    v0.17.0
- install ppx_ignore_instrumentation  v0.17.0
- install ppx_inline_test             v0.17.0
- install ppx_jane                    v0.17.0
- install ppx_let                     v0.17.0
- install ppx_log                     v0.17.0
- install ppx_module_timer            v0.17.0
- install ppx_optcomp                 v0.17.0
- install ppx_optional                v0.17.0
- install ppx_pipebang                v0.17.0
- install ppx_sexp_conv               v0.17.0
- install ppx_sexp_message            v0.17.0
- install ppx_sexp_value              v0.17.0
- install ppx_stable                  v0.17.0
- install ppx_stable_witness          v0.17.0
- install ppx_string                  v0.17.0
- install ppx_string_conv             v0.17.0
- install ppx_tydi                    v0.17.0
- install ppx_typerep_conv            v0.17.0
- install ppx_variants_conv           v0.17.0
- install ppxlib                      0.33.0
- install ppxlib_jane                 v0.17.0
- install protocol_version_header     v0.17.0
- install psq                         0.2.0
- install ptime                       1.2.0
- install re                          1.9.0
- install result                      1.5
- install rresult                     0.7.0
- install seq                         0.3
- install sexp_pretty                 v0.17.0
- install sexplib                     v0.17.0
- install sexplib0                    v0.17.0
- install spawn                       v0.15.0
- install splittable_random           v0.17.0
- install ssl                         0.5.13
- install stdio                       v0.17.0
- install stdlib-shims                0.1.0
- install stringext                   1.6.0
- install textutils                   v0.17.0
- install time_now                    v0.17.0
- install timezone                    v0.17.0
- install tls                         2.0.1
- install tls-async                   2.0.1
- install topkg                       1.0.8
- install typerep                     v0.17.0
- install uopt                        v0.17.0
- install uri                         4.0.0
- install uri-sexp                    4.0.0
- install uring                       0.5
- install uutf                        1.0.3
- install variantslib                 v0.17.0
- install x509                        1.0.6
- install yojson                      1.6.0
- install zarith                      1.13


<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
-> retrieved angstrom.0.14.0  (cached)
-> retrieved asn1-combinators.0.3.1  (cached)
-> retrieved astring.0.8.5  (cached)
-> retrieved async.v0.17.0  (cached)
-> retrieved async_kernel.v0.17.0  (cached)
-> retrieved async_log.v0.17.0  (cached)
-> retrieved async_rpc_kernel.v0.17.0  (cached)
-> retrieved async_unix.v0.17.0  (cached)
-> retrieved base.v0.17.0  (cached)
-> retrieved base64.3.3.0  (cached)
-> retrieved base_bigstring.v0.17.0  (cached)
-> retrieved base_quickcheck.v0.17.0  (cached)
-> retrieved bechamel.0.4.0, bechamel-notty.0.4.0  (cached)
-> retrieved bigstringaf.0.9.1  (cached)
-> retrieved bin_prot.v0.17.0  (cached)
-> retrieved biniou.1.2.2  (cached)
-> retrieved bos.0.2.1  (cached)
-> retrieved ca-certs.1.0.1  (cached)
-> retrieved camlp-streams.5.0.1  (cached)
-> retrieved capitalization.v0.17.0  (cached)
-> retrieved cmdliner.1.3.0  (cached)
-> retrieved conf-gmp.5  (cached)
-> retrieved conf-gmp-powm-sec.4  (cached)
-> retrieved conf-libssl.1  (cached)
-> retrieved cohttp.4.1.2, cohttp-lwt.4.1.2, cohttp-lwt-unix.4.1.2  (cached)
-> retrieved conduit.6.2.3, conduit-lwt.6.2.3, conduit-lwt-unix.6.2.3  (cached)
-> retrieved core.v0.17.1  (cached)
-> installed conf-gmp.5
-> installed conf-pkg-config.1.0
-> installed conf-protoc.1.0.0
-> retrieved core_kernel.v0.17.0  (cached)
-> retrieved core_unix.v0.17.0  (cached)
-> retrieved cppo.1.6.7  (cached)
-> installed conf-gmp-powm-sec.4
-> installed conf-libssl.1
-> retrieved csexp.1.5.1  (cached)
-> retrieved cstruct.6.2.0, cstruct-async.6.2.0  (cached)
-> retrieved domain-local-await.0.1.0  (cached)
-> retrieved domain-name.0.3.0  (cached)
-> retrieved digestif.1.3.0  (cached)
-> retrieved duration.0.2.1  (cached)
-> retrieved easy-format.1.3.3  (cached)
-> retrieved eio.0.12, eio_linux.0.12, eio_main.0.12, eio_posix.0.12  (cached)
-> retrieved dune.3.12.1  (cached)
-> retrieved dune-configurator.3.13.1  (cached)
-> retrieved eqaf.0.9  (cached)
-> retrieved expect_test_helpers_core.v0.17.0  (cached)
-> retrieved faraday.0.8.1  (cached)
-> retrieved faraday-async.0.8.2  (cached)
-> retrieved faraday-lwt.0.7.1  (cached)
-> retrieved faraday-lwt-unix.0.7.3  (cached)
-> retrieved fieldslib.v0.17.0  (cached)
-> retrieved fmt.0.9.0  (cached)
-> installed cmdliner.1.3.0
-> retrieved fpath.0.7.3  (cached)
-> retrieved gel.v0.17.0  (cached)
-> retrieved gluten.0.5.2, gluten-async.0.5.2, gluten-eio.0.5.2, gluten-lwt.0.5.2, gluten-lwt-unix.0.5.2  (cached)
-> retrieved gmap.0.3.0  (cached)
-> retrieved h2.0.13.0, h2-async.0.13.0, h2-eio.0.13.0, h2-lwt.0.13.0, h2-lwt-unix.0.13.0, hpack.0.13.0  (cached)
-> retrieved hmap.0.8.1  (cached)
-> retrieved httpun-types.0.1.0  (cached)
-> retrieved int_repr.v0.17.0  (cached)
-> retrieved iomux.0.2  (cached)
-> retrieved ipaddr.5.6.0, ipaddr-sexp.5.6.0, macaddr.5.6.0  (cached)
-> retrieved jane-street-headers.v0.17.0  (cached)
-> retrieved jsonm.1.0.2  (cached)
-> retrieved jst-config.v0.17.0  (cached)
-> retrieved kdf.1.0.0  (cached)
-> retrieved logs.0.7.0  (cached)
-> retrieved lwt-dllist.1.0.0  (cached)
-> retrieved lwt_ssl.1.2.0  (cached)
-> retrieved lwt.5.7.0  (cached)
-> retrieved magic-mime.1.1.2  (cached)
-> retrieved mdx.2.4.0  (cached)
-> retrieved mtime.2.1.0  (cached)
-> retrieved notty.0.2.3  (cached)
-> retrieved num.1.5  (cached)
-> retrieved ocaml-compiler-libs.v0.17.0  (cached)
-> retrieved ocaml-protoc-plugin.4.5.0  (cached)
-> retrieved ocaml-version.3.5.0  (cached)
-> retrieved ocaml_intrinsics_kernel.v0.17.0  (cached)
-> retrieved ocamlbuild.0.14.3  (cached)
-> retrieved ocamlfind.1.9.6  (cached)
-> retrieved mirage-crypto.1.2.0, mirage-crypto-ec.1.2.0, mirage-crypto-pk.1.2.0, mirage-crypto-rng.1.2.0  (cached)
-> retrieved ocplib-endian.1.1  (cached)
-> retrieved ohex.0.2.0  (cached)
-> retrieved optint.0.3.0  (cached)
-> retrieved parsexp.v0.17.0  (cached)
-> retrieved ppx_assert.v0.17.0  (cached)
-> retrieved ppx_base.v0.17.0  (cached)
-> retrieved ppx_bench.v0.17.0  (cached)
-> retrieved ppx_bin_prot.v0.17.0  (cached)
-> retrieved ppx_cold.v0.17.0  (cached)
-> retrieved ppx_compare.v0.17.0  (cached)
-> retrieved ppx_custom_printf.v0.17.0  (cached)
-> retrieved ppx_derivers.1.2.1  (cached)
-> retrieved ppx_deriving.5.2  (cached)
-> retrieved ppx_deriving_yojson.3.7.0  (cached)
-> retrieved ppx_diff.v0.17.0  (cached)
-> retrieved ppx_disable_unused_warnings.v0.17.0  (cached)
-> retrieved ppx_enumerate.v0.17.0  (cached)
-> retrieved ppx_expect.v0.17.0  (cached)
-> retrieved ppx_fields_conv.v0.17.0  (cached)
-> retrieved ppx_fixed_literal.v0.17.0  (cached)
-> retrieved ppx_globalize.v0.17.0  (cached)
-> retrieved ppx_hash.v0.17.0  (cached)
-> retrieved ppx_here.v0.17.0  (cached)
-> retrieved ppx_ignore_instrumentation.v0.17.0  (cached)
-> retrieved ppx_inline_test.v0.17.0  (cached)
-> retrieved ppx_jane.v0.17.0  (cached)
-> retrieved ppx_let.v0.17.0  (cached)
-> retrieved ppx_log.v0.17.0  (cached)
-> retrieved ppx_module_timer.v0.17.0  (cached)
-> retrieved ppx_optcomp.v0.17.0  (cached)
-> retrieved ppx_optional.v0.17.0  (cached)
-> retrieved ppx_pipebang.v0.17.0  (cached)
-> retrieved ppx_sexp_conv.v0.17.0  (cached)
-> retrieved ppx_sexp_message.v0.17.0  (cached)
-> retrieved ppx_sexp_value.v0.17.0  (cached)
-> retrieved ppx_stable.v0.17.0  (cached)
-> retrieved ppx_stable_witness.v0.17.0  (cached)
-> retrieved ppx_string.v0.17.0  (cached)
-> retrieved ppx_string_conv.v0.17.0  (cached)
-> retrieved ppx_tydi.v0.17.0  (cached)
-> retrieved ppx_typerep_conv.v0.17.0  (cached)
-> retrieved ppx_variants_conv.v0.17.0  (cached)
-> retrieved ppxlib_jane.v0.17.0  (cached)
-> retrieved protocol_version_header.v0.17.0  (cached)
-> retrieved psq.0.2.0  (cached)
-> retrieved ptime.1.2.0  (cached)
-> retrieved result.1.5  (cached)
-> retrieved re.1.9.0  (cached)
-> retrieved rresult.0.7.0  (cached)
-> retrieved ppxlib.0.33.0  (cached)
-> retrieved seq.0.3  (cached)
-> retrieved sexp_pretty.v0.17.0  (cached)
-> retrieved sexplib.v0.17.0  (cached)
-> retrieved sexplib0.v0.17.0  (cached)
-> retrieved spawn.v0.15.0  (cached)
-> retrieved splittable_random.v0.17.0  (cached)
-> retrieved stdio.v0.17.0  (cached)
-> retrieved ssl.0.5.13  (cached)
-> retrieved stdlib-shims.0.1.0  (cached)
-> retrieved stringext.1.6.0  (cached)
-> retrieved textutils.v0.17.0  (cached)
-> retrieved time_now.v0.17.0  (cached)
-> retrieved timezone.v0.17.0  (cached)
-> retrieved typerep.v0.17.0  (cached)
-> retrieved topkg.1.0.8  (cached)
-> retrieved uopt.v0.17.0  (cached)
-> retrieved tls.2.0.1, tls-async.2.0.1  (cached)
-> retrieved uri.4.0.0, uri-sexp.4.0.0  (cached)
-> retrieved uring.0.5  (cached)
-> retrieved uutf.1.0.3  (cached)
-> retrieved variantslib.v0.17.0  (cached)
-> retrieved yojson.1.6.0  (cached)
-> retrieved zarith.1.13  (cached)
-> retrieved x509.1.0.6  (cached)
-> installed num.1.5
-> installed ocamlfind.1.9.6
-> installed base-bytes.base
-> installed zarith.1.13
-> installed ocamlbuild.0.14.3
-> installed topkg.1.0.8
-> installed hmap.0.8.1
-> installed rresult.0.7.0
-> installed uutf.1.0.3
-> installed mtime.2.1.0
-> installed fmt.0.9.0
-> installed ptime.1.2.0
-> installed astring.0.8.5
-> installed dune.3.12.1
-> installed jsonm.1.0.2
-> installed jane-street-headers.v0.17.0
-> installed domain-local-await.0.1.0
-> installed duration.0.2.1
-> installed gmap.0.3.0
-> installed csexp.1.5.1
-> installed fpath.0.7.3
-> installed asn1-combinators.0.3.1
-> installed bechamel.0.4.0
-> installed camlp-streams.5.0.1
-> installed cppo.1.6.7
-> installed cstruct.6.2.0
-> installed domain-name.0.3.0
-> installed macaddr.5.6.0
-> installed magic-mime.1.1.2
-> installed ocaml-compiler-libs.v0.17.0
-> installed ocaml-version.3.5.0
-> installed ocaml_intrinsics_kernel.v0.17.0
-> installed ohex.0.2.0
-> installed optint.0.3.0
-> installed ppx_derivers.1.2.1
-> installed result.1.5
-> installed seq.0.3
-> installed sexplib0.v0.17.0
-> installed spawn.v0.15.0
-> installed stdlib-shims.0.1.0
-> installed stringext.1.6.0
-> installed easy-format.1.3.3
-> installed ocplib-endian.1.1
-> installed ipaddr.5.6.0
-> installed psq.0.2.0
-> installed eqaf.0.9
-> installed biniou.1.2.2
-> installed re.1.9.0
-> installed ocaml-protoc-plugin.4.5.0
-> installed digestif.1.3.0
-> installed parsexp.v0.17.0
-> installed dune-configurator.3.13.1
-> installed bigstringaf.0.9.1
-> installed iomux.0.2
-> installed sexplib.v0.17.0
-> installed yojson.1.6.0
-> installed base64.3.3.0
-> installed faraday.0.8.1
-> installed angstrom.0.14.0
-> installed gluten.0.5.2
-> installed httpun-types.0.1.0
-> installed hpack.0.13.0
-> installed mirage-crypto.1.2.0
-> installed uring.0.5
-> installed ssl.0.5.13
-> installed kdf.1.0.0
-> installed uri.4.0.0
-> installed h2.0.13.0
-> installed lwt.5.7.0
-> installed faraday-lwt.0.7.1
-> installed lwt-dllist.1.0.0
-> installed lwt_ssl.1.2.0
-> installed gluten-lwt.0.5.2
-> installed faraday-lwt-unix.0.7.3
-> installed h2-lwt.0.13.0
-> installed gluten-lwt-unix.0.5.2
-> installed notty.0.2.3
-> installed h2-lwt-unix.0.13.0
-> installed logs.0.7.0
-> installed bechamel-notty.0.4.0
-> installed eio.0.12
-> installed gluten-eio.0.5.2
-> installed mirage-crypto-rng.1.2.0
-> installed h2-eio.0.13.0
-> installed base.v0.17.0
-> installed eio_linux.0.12
-> installed eio_posix.0.12
-> installed mirage-crypto-pk.1.2.0
-> installed fieldslib.v0.17.0
-> installed variantslib.v0.17.0
-> installed stdio.v0.17.0
-> installed eio_main.0.12
-> installed typerep.v0.17.0
-> installed mdx.2.4.0
-> installed bos.0.2.1
-> installed mirage-crypto-ec.1.2.0
-> installed x509.1.0.6
-> installed ppxlib.0.33.0
-> installed ca-certs.1.0.1
-> installed tls.2.0.1
-> installed ppxlib_jane.v0.17.0
-> installed ppx_optcomp.v0.17.0
-> installed ppx_disable_unused_warnings.v0.17.0
-> installed ppx_tydi.v0.17.0
-> installed ppx_cold.v0.17.0
-> installed ppx_here.v0.17.0
-> installed ppx_stable_witness.v0.17.0
-> installed ppx_typerep_conv.v0.17.0
-> installed ppx_variants_conv.v0.17.0
-> installed ppx_fields_conv.v0.17.0
-> installed ppx_stable.v0.17.0
-> installed ppx_pipebang.v0.17.0
-> installed ppx_ignore_instrumentation.v0.17.0
-> installed ppx_fixed_literal.v0.17.0
-> installed ppx_enumerate.v0.17.0
-> installed ppx_globalize.v0.17.0
-> installed ppx_compare.v0.17.0
-> installed ppx_deriving.5.2
-> installed ppx_optional.v0.17.0
-> installed ppx_sexp_conv.v0.17.0
-> installed ppx_let.v0.17.0
-> installed ppx_deriving_yojson.3.7.0
-> installed ipaddr-sexp.5.6.0
-> installed uri-sexp.4.0.0
-> installed ppx_hash.v0.17.0
-> installed ppx_assert.v0.17.0
-> installed ppx_sexp_value.v0.17.0
-> installed ppx_sexp_message.v0.17.0
-> installed ppx_custom_printf.v0.17.0
-> installed conduit.6.2.3
-> installed ppx_base.v0.17.0
-> installed cohttp.4.1.2
-> installed conduit-lwt.6.2.3
-> installed capitalization.v0.17.0
-> installed sexp_pretty.v0.17.0
-> installed jst-config.v0.17.0
-> installed cohttp-lwt.4.1.2
-> installed bin_prot.v0.17.0
-> installed ppx_string.v0.17.0
-> installed conduit-lwt-unix.6.2.3
-> installed time_now.v0.17.0
-> installed ppx_bin_prot.v0.17.0
-> installed cohttp-lwt-unix.4.1.2
-> installed ppx_string_conv.v0.17.0
-> installed ppx_module_timer.v0.17.0
-> installed ppx_inline_test.v0.17.0
-> installed ppx_bench.v0.17.0
-> installed ppx_expect.v0.17.0
-> installed splittable_random.v0.17.0
-> installed base_quickcheck.v0.17.0
-> installed ppx_log.v0.17.0
-> installed ppx_jane.v0.17.0
-> installed uopt.v0.17.0
-> installed gel.v0.17.0
-> installed int_repr.v0.17.0
-> installed base_bigstring.v0.17.0
-> installed ppx_diff.v0.17.0
-> installed core.v0.17.1
-> installed protocol_version_header.v0.17.0
-> installed timezone.v0.17.0
-> installed expect_test_helpers_core.v0.17.0
-> installed core_kernel.v0.17.0
-> installed async_kernel.v0.17.0
-> installed core_unix.v0.17.0
-> installed textutils.v0.17.0
-> installed async_rpc_kernel.v0.17.0
-> installed async_unix.v0.17.0
-> installed async_log.v0.17.0
-> installed async.v0.17.0
-> installed cstruct-async.6.2.0
-> installed faraday-async.0.8.2
-> installed tls-async.2.0.1
-> installed gluten-async.0.5.2
-> installed h2-async.0.13.0
Done.
# To update the current shell environment, run: eval $(opam env)
2026-05-26 14:16.20 ---> saved as "58193ddeb0c0ac4cf32b6bcfe797b4e70c8d74de7c50430477c29b6930bdab0f"


/src: (copy (src .) (dst /src))
2026-05-26 14:16.40 ---> saved as "e747e690d503d95ad1d797d0252427883aa3a23ba4ae5f600f2dc85d522b20c4"


/src: (run (shell "opam exec -- dune build @install @check @runtest && rm -rf _build"))
(cd _build/default && /home/opam/.opam/5.2/bin/ocamlc.opt -w @1..3@5..28@30..39@43@46..47@49..57@61..62@67@69-40 -strict-sequence -strict-formats -short-paths -keep-locs -g -bin-annot -I lib/grpc-eio/test/.test_concurrent_handler.eobjs/byte -I /home/opam/.opam/5.2/lib/angstrom -I /home/opam/.opam/5.2/lib/base64 -I /home/opam/.opam/5.2/lib/bigstringaf -I /home/opam/.opam/5.2/lib/bytes -I /home/opam/.opam/5.2/lib/cstruct -I /home/opam/.opam/5.2/lib/domain-local-await -I /home/opam/.opam/5.2/lib/eio -I /home/opam/.opam/5.2/lib/eio/core -I /home/opam/.opam/5.2/lib/eio/unix -I /home/opam/.opam/5.2/lib/eio/utils -I /home/opam/.opam/5.2/lib/eio_linux -I /home/opam/.opam/5.2/lib/eio_main -I /home/opam/.opam/5.2/lib/eio_posix -I /home/opam/.opam/5.2/lib/faraday -I /home/opam/.opam/5.2/lib/fmt -I /home/opam/.opam/5.2/lib/gluten -I /home/opam/.opam/5.2/lib/gluten-eio -I /home/opam/.opam/5.2/lib/h2 -I /home/opam/.opam/5.2/lib/h2-eio -I /home/opam/.opam/5.2/lib/hmap -I /home/opam/.opam/5.2/lib/hpack -I /home/opam/.opam/5.2/lib/httpun-types -I /home/opam/.opam/5.2/lib/iomux -I /home/opam/.opam/5.2/lib/logs -I /home/opam/.opam/5.2/lib/lwt -I /home/opam/.opam/5.2/lib/lwt-dllist -I /home/opam/.opam/5.2/lib/mtime -I /home/opam/.opam/5.2/lib/mtime/clock -I /home/opam/.opam/5.2/lib/ocaml/threads -I /home/opam/.opam/5.2/lib/ocaml/unix -I /home/opam/.opam/5.2/lib/optint -I /home/opam/.opam/5.2/lib/ppx_deriving/runtime -I /home/opam/.opam/5.2/lib/psq -I /home/opam/.opam/5.2/lib/result -I /home/opam/.opam/5.2/lib/seq -I /home/opam/.opam/5.2/lib/stringext -I /home/opam/.opam/5.2/lib/uri -I /home/opam/.opam/5.2/lib/uring -I lib/grpc-eio/.grpc_eio.objs/byte -I lib/grpc/.grpc.objs/byte -intf-suffix .ml -no-alias-deps -opaque -o lib/grpc-eio/test/.test_concurrent_handler.eobjs/byte/dune__exe__Test_concurrent_handler.cmo -c -impl lib/grpc-eio/test/test_concurrent_handler.ml)
File "lib/grpc-eio/test/test_concurrent_handler.ml", line 96, characters 10-32:
96 |     match Eio.Net.listening_addr server_socket with
^^^^^^^^^^^^^^^^^^^^^^
Error: Unbound value Eio.Net.listening_addr
(cd _build/default && /home/opam/.opam/5.2/bin/ocamlopt.opt -w @1..3@5..28@30..39@43@46..47@49..57@61..62@67@69-40 -strict-sequence -strict-formats -short-paths -keep-locs -g -I lib/grpc-eio/test/.test_concurrent_handler.eobjs/byte -I lib/grpc-eio/test/.test_concurrent_handler.eobjs/native -I /home/opam/.opam/5.2/lib/angstrom -I /home/opam/.opam/5.2/lib/base64 -I /home/opam/.opam/5.2/lib/bigstringaf -I /home/opam/.opam/5.2/lib/bytes -I /home/opam/.opam/5.2/lib/cstruct -I /home/opam/.opam/5.2/lib/domain-local-await -I /home/opam/.opam/5.2/lib/eio -I /home/opam/.opam/5.2/lib/eio/core -I /home/opam/.opam/5.2/lib/eio/unix -I /home/opam/.opam/5.2/lib/eio/utils -I /home/opam/.opam/5.2/lib/eio_linux -I /home/opam/.opam/5.2/lib/eio_main -I /home/opam/.opam/5.2/lib/eio_posix -I /home/opam/.opam/5.2/lib/faraday -I /home/opam/.opam/5.2/lib/fmt -I /home/opam/.opam/5.2/lib/gluten -I /home/opam/.opam/5.2/lib/gluten-eio -I /home/opam/.opam/5.2/lib/h2 -I /home/opam/.opam/5.2/lib/h2-eio -I /home/opam/.opam/5.2/lib/hmap -I /home/opam/.opam/5.2/lib/hpack -I /home/opam/.opam/5.2/lib/httpun-types -I /home/opam/.opam/5.2/lib/iomux -I /home/opam/.opam/5.2/lib/logs -I /home/opam/.opam/5.2/lib/lwt -I /home/opam/.opam/5.2/lib/lwt-dllist -I /home/opam/.opam/5.2/lib/mtime -I /home/opam/.opam/5.2/lib/mtime/clock -I /home/opam/.opam/5.2/lib/ocaml/threads -I /home/opam/.opam/5.2/lib/ocaml/unix -I /home/opam/.opam/5.2/lib/optint -I /home/opam/.opam/5.2/lib/ppx_deriving/runtime -I /home/opam/.opam/5.2/lib/psq -I /home/opam/.opam/5.2/lib/result -I /home/opam/.opam/5.2/lib/seq -I /home/opam/.opam/5.2/lib/stringext -I /home/opam/.opam/5.2/lib/uri -I /home/opam/.opam/5.2/lib/uring -I lib/grpc-eio/.grpc_eio.objs/byte -I lib/grpc-eio/.grpc_eio.objs/native -I lib/grpc/.grpc.objs/byte -I lib/grpc/.grpc.objs/native -intf-suffix .ml -no-alias-deps -opaque -o lib/grpc-eio/test/.test_concurrent_handler.eobjs/native/dune__exe__Test_concurrent_handler.cmx -c -impl lib/grpc-eio/test/test_concurrent_handler.ml)
File "lib/grpc-eio/test/test_concurrent_handler.ml", line 96, characters 10-32:
96 |     match Eio.Net.listening_addr server_socket with
^^^^^^^^^^^^^^^^^^^^^^
Error: Unbound value Eio.Net.listening_addr
File "examples/helloworld-tutorial.md", line 1, characters 0-0:
/usr/bin/git --no-pager diff --no-index --color=always -u _build/default/examples/helloworld-tutorial.md _build/default/examples/.mdx/helloworld-tutorial.md.corrected
diff --git a/_build/default/examples/helloworld-tutorial.md b/_build/default/examples/.mdx/helloworld-tutorial.md.corrected
index 903b8a7..46b71fb 100644
--- a/_build/default/examples/helloworld-tutorial.md
+++ b/_build/default/examples/.mdx/helloworld-tutorial.md.corrected
@@ -136,6 +136,10 @@ In the proto directory of your project create a `dune` file and add the followin
"--ocaml_out=annot=[@@deriving show { with_path = false }]:."
%{proto})))
```
+```mdx-error
+Line 9, characters 6-7:
+Error: Syntax error: operator expected.
+```


Make sure the dependencies are installed


@@ -154,6 +158,10 @@ Now that the build process is written and our dependencies are all setup, we can
```ocaml
open Grpc_lwt
```
+```mdx-error
+Line 1, characters 6-14:
+Error: Unbound module Grpc_lwt
+```


Next up, we implement the Greeter service we previously defined in our `.proto` file. He is what that might look like:


@@ -185,6 +193,10 @@ let server =
Server.(
v () |> add_service ~name:"mypackage.Greeter" ~service:greeter_service)
```
+```mdx-error
+Line 2, characters 14-33:
+Error: Unbound module Ocaml_protoc_plugin
+```


Finally, let's define the LWT runtime that our server will actually run on.


@@ -214,6 +226,10 @@ let () =
let forever, _ = Lwt.wait () in
Lwt_main.run forever
```
+```mdx-error
+Line 2, characters 14-24:
+Error: Unbound module Lwt
+```


You should now be able to run your HelloWorld gRPC server using the command `dune exec -- service`. This uses the executable we defined earlier in our `lib/dune` to specifically run the server. Consult the full source code in [greeter-lwt/service.ml](greeter-lwt/service.ml) if you encounter errors.


@@ -244,6 +260,10 @@ So now we have a running gRPC server, and that's great but how can our applicati
open Grpc_lwt
open Lwt.Syntax
```
+```mdx-error
+Line 1, characters 6-14:
+Error: Unbound module Grpc_lwt
+```


The client is much simpler than the server as we don't need to implement any service methods, just make requests. Here is an Lwt runtime which will make our request and print the response to your terminal:


@@ -284,6 +304,10 @@ let call_server address port req =
| None -> Greeter.SayHello.Response.make ()))
()
```
+```mdx-error
+Line 3, characters 5-9:
+Error: Unbound value ( let* )
+```


Then we run the client as:


@@ -301,6 +325,10 @@ let () =
| Ok (res, _) -> print_endline res
| Error _ -> print_endline "an error occurred")
```
+```mdx-error
+Line 2, characters 14-24:
+Error: Unbound module Lwt
+```


That's it! Our complete client source is available as [greeter-lwt/client.ml](greeter-lwt/client.ml).


File "examples/routeguide-tutorial.md", line 1, characters 0-0:
/usr/bin/git --no-pager diff --no-index --color=always -u _build/default/examples/routeguide-tutorial.md _build/default/examples/.mdx/routeguide-tutorial.md.corrected
diff --git a/_build/default/examples/routeguide-tutorial.md b/_build/default/examples/.mdx/routeguide-tutorial.md.corrected
index c23a132..e465d35 100644
--- a/_build/default/examples/routeguide-tutorial.md
+++ b/_build/default/examples/.mdx/routeguide-tutorial.md.corrected
@@ -163,6 +163,10 @@ Edit the `dune-project` to add `ocaml-protoc-plugin` as a dependency. Then add a
"--ocaml_out=annot=[@@deriving show { with_path = false }, eq]:."
%{proto})))
```
+```mdx-error
+Line 11, characters 6-7:
+Error: Syntax error: operator expected.
+```


<!-- $MDX skip -->
```shell
@@ -207,6 +211,10 @@ let server clock =
|> add_service ~name:"routeguide.RouteGuide"
~service:(route_guide_service clock))
```
+```mdx-error
+Line 2, characters 5-19:
+Error: Unbound module Server
+```


### Simple RPC


@@ -245,6 +253,10 @@ let get_feature (buffer : string) =
( Grpc.Status.(v OK),
Some (Feature.make ~location:point () |> encode |> Writer.contents) )
```
+```mdx-error
+Line 2, characters 26-56:
+Error: Unbound module Service
+```


The method is passed the client's `Point` protocol buffer request. It decodes the request into a `Point.t` and uses that to look up the feature. It returns a `Feature` protocol buffer object with the response information indicating the successful response, based on the feature found or an unnamed default feature.


@@ -276,6 +288,10 @@ let list_features (buffer : string) (f : string -> unit) =
in
Grpc.Status.(v OK)
```
+```mdx-error
+Line 3, characters 26-56:
+Error: Unbound module Service
+```


Like `get_feature` `list_feature`'s input is a single message. A `Rectangle` that is decoded from a string buffer. The `f: (string -> unit)` function is for writing the encoded responses back to the client. In the function we decode the request, lookup any matching features and stream them back to the client as we find them using `f`. Once we've looked at all the `features` we respond with an `OK` indicating the streaming has finished successfully.


@@ -335,6 +351,10 @@ let record_route (clock : _ Eio.Time.clock) (stream : string Seq.t) =
Eio.traceln "RecordRoute exit\n";
(Grpc.Status.(v OK), Some (encode summary |> Writer.contents))
```
+```mdx-error
+Line 1, characters 29-43:
+Error: Unbound module Eio
+```


### Bidirectional streaming RPCs


@@ -363,6 +383,10 @@ let route_chat (stream : string Seq.t) (f : string -> unit) =
Printf.printf "RouteChat exit\n";
Grpc.Status.(v OK)
```
+```mdx-error
+Line 4, characters 26-56:
+Error: Unbound module Service
+```


`route_chat` receives a `string Seq.t` of requests which it decodes, logs to stdout to show it has received the note, and then encodes again to send back to the client. Finally it responds with an `OK` indicating it has finished. The logic is we receive one `RouteNote` and respond directly with the same `RouteNote` using the `f` function supplied.


@@ -402,6 +426,10 @@ let () =


Eio_main.run (serve server)
```
+```mdx-error
+Line 3, characters 15-29:
+Error: Unbound module Eio
+```


To handle requests we use `h2-lwt-unix`, an implementation of the HTTP/2 specification entirely in OCaml. What that means is we can swap in other h2 implementations like MirageOS to run in a Unikernel or Async to use JaneStreet's alternatve async implementation. Furthermore we can add TLS or SSL encryptionon to our HTTP/2 stack.


@@ -427,6 +455,18 @@ let client ~sw host port network =
let socket = Eio.Net.connect ~sw network addr in
H2_eio.Client.create_connection ~sw ~error_handler:ignore socket
```
+```mdx-error
+File "_none_", line 1:
+Alert ocaml_deprecated_auto_include:
+OCaml's lib directory layout changed in 5.0. The unix subdirectory has been
+automatically added to the search path, but you should add -I +unix to the
+command-line to silence this alert (e.g. by adding unix to the list of
+libraries in your dune file, or adding use_unix to your _tags file for
+ocamlbuild, or using -package unix for ocamlfind).
+
+Line 3, characters 7-32:
+Error: Unbound module Eio_unix
+```


To call service methods, we take the H2 connection and build up a gRPC call for the service method using `Client.call` from the Client module.


@@ -460,6 +500,10 @@ let call_get_feature connection point =
| Ok (res, _ok) -> Printf.printf "RESPONSE = {%s}" (Feature.show res)
| Error _ -> Printf.printf "an error occurred"
```
+```mdx-error
+Line 2, characters 26-55:
+Error: Unbound module Service
+```


### Server-side streaming RPC


@@ -504,6 +548,10 @@ let print_features connection =
| Error e ->
failwith (Printf.sprintf "HTTP2 error: %s" (H2.Status.to_string e))
```
+```mdx-error
+Line 3, characters 7-21:
+Error: Unbound module Rectangle
+```


As in the simple RPC we pass a single request value. However, instead of getting back a single value we get a stream of `Feature`s. We use `Seq.map` to iterate over the stream and decode each into a `Feature.t` and then print out the features when they are all decoded. Equally we could have printed the features as they are being decoded inside the `Seq.map` rather than gathering them all into a List and printing them at the end. Notice that the type signature for `Client.RPC.server_streaming` is similar to `unary` in that we provide an encoded request and provide a handler function to consume the response.


@@ -517,6 +565,11 @@ let random_point () : Point.t =
let longitude = (Random.int 360 - 180) * 10000000 in
Point.make ~latitude ~longitude ()
```
+```mdx-error
+Line 1, characters 23-30:
+Error: Unbound module Point
+Hint: Did you mean Printf?
+```
We create a function for generating random points and then use that to generate a sequence of 100 points to record on our route.
<!-- $MDX include,file=routeguide/src/client.ml,part=client-record-route -->
```ocaml
@@ -559,6 +612,10 @@ let run_record_route connection =
| Error e ->
failwith (Printf.sprintf "HTTP2 error: %s" (H2.Status.to_string e))
```
+```mdx-error
+Line 4, characters 54-66:
+Error: Unbound value random_point
+```


With this stream of points we setup another handler using `Client.Rpc.client_streaming`. The type of the callback arguments is important to understand: `writer` is a `Seq.writer` for sending data down the gRPC stream to the server. Calling `Seq.write writer value` will send the encoded value to the server, while calling `Seq.close_writer writer` signals that we have finished streaming. Here you can see we iterate over all the points, writing each one to the stream, and when we have sent everything we close the writer to signal we are finished. `response` is a promise that resolves once the server has replied; we await it and decode the `RouteSummary`.


@@ -583,6 +640,10 @@ let run_route_chat clock connection =
x - 1 ))
in
```
+```mdx-error
+Line 16, characters 1-3:
+Error: Syntax error
+```


We start by generating a short sequence of locations, similar to how we did for `record_route`.
<!-- $MDX include,file=routeguide/src/client.ml,part=client-route-chat-2 -->
@@ -627,6 +688,10 @@ We start by generating a short sequence of locations, similar to how we did for
| Error e ->
failwith (Printf.sprintf "HTTP2 error: %s" (H2.Status.to_string e))
```
+```mdx-error
+Line 1, characters 24-53:
+Error: Unbound module Service
+```


Then we again use the `Client.Rpc` module to setup a `bidirectional_streaming` handler with an interesting type signature: `val bidirectional_streaming : f:(string Seq.writer -> string Seq.t -> 'a) -> 'a handler`. Somewhat intimidating but hopefully understandable in context. The function `f` receives two arguments: a `Seq.writer` for sending notes to the server, and a `Seq.t` for reading the stream of responses coming back. Calling `Seq.write writer value` sends an encoded value to the stream, with the same semantics as before. The `string Seq.t` is the stream of `RouteNote` responses from the server, which we need to decode and print out. We define a recursive function `go` to fold over the list, sending `route_notes`, sleeping to wait for a server response, and printing out that response. When we run out of `route_notes` to send we call `Seq.close_writer writer` to tell the server we are done and it can stop listening.
Other combinations of sending and receiving are possible, the reader is encouraged to try them out.
"/usr/bin/env" "bash" "-c" "opam exec -- dune build @install @check @runtest && rm -rf _build" failed with exit status 1
2026-05-26 14:16.49: Job failed: Failed: Build failed