2026-01-16 11:36.40: New job: test mbarbin/dunolint https://github.com/mbarbin/dunolint.git#refs/heads/main (1e9e21ff8f22f4916f43f22e44f944b03e329806) (linux-x86_64:debian-13-5.3_opam-2.5) Base: ocaml/opam:debian-13-ocaml-5.3@sha256:d46aa1ad7e7af14675d98de3f22b6a570ad13dc72dca386d59b30d1586f38c9d Opam project build To reproduce locally: git clone --recursive "https://github.com/mbarbin/dunolint.git" -b "main" && cd "dunolint" && git reset --hard 1e9e21ff cat > Dockerfile <<'END-OF-DOCKERFILE' FROM ocaml/opam:debian-13-ocaml-5.3@sha256:d46aa1ad7e7af14675d98de3f22b6a570ad13dc72dca386d59b30d1586f38c9d # debian-13-5.3_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 opam init --reinit -ni RUN uname -rs && opam exec -- ocaml -version && opam --version WORKDIR /src RUN sudo chown opam /src RUN cd ~/opam-repository && (git cat-file -e 873cb18c37b308713d11ad3894c4bb78d73fb3e7 || git fetch origin master) && git reset -q --hard 873cb18c37b308713d11ad3894c4bb78d73fb3e7 && git log --no-decorate -n1 --oneline && opam update -u COPY --chown=1000:1000 dunolint.opam dunolint-tests.opam dunolint-lib.opam dunolint-lib-base.opam dunolint-dev.opam ./ RUN opam pin add -yn dunolint.dev './' && \ opam pin add -yn dunolint-tests.dev './' && \ opam pin add -yn dunolint-lib.dev './' && \ opam pin add -yn dunolint-lib-base.dev './' && \ opam pin add -yn dunolint-dev.dev './' RUN echo '(lang dune 3.0)' > './dune-project' ENV DEPS="astring.0.8.5 base.v0.17.3 base-bigarray.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base base_bigstring.v0.17.0 base_quickcheck.v0.17.0 bin_prot.v0.17.0-1 bisect_ppx.2.8.3 bitv.2.1 camlp-streams.5.0.1 capitalization.v0.17.0 cmdlang.0.0.10 cmdlang-cmdliner-err-runner.0.0.16 cmdlang-stdlib-runner.0.0.10 cmdlang-to-cmdliner.0.0.10 cmdliner.1.3.0 core.v0.17.1 core_kernel.v0.17.0 core_unix.v0.17.1 cppo.1.8.0 csexp.1.5.2 dune.3.21.0 dune-build-info.3.21.0 dune-configurator.3.21.0 dyn.3.21.0 either.1.0.0 expect_test_helpers_core.v0.17.0 fieldslib.v0.17.0 file-rewriter.0.0.3 fix.20250919 fmt.0.11.0 fpath.0.7.3 fpath-base.0.4.0 fpath-sexp0.0.4.0 fs-io.3.21.0 gel.v0.17.0 int_repr.v0.17.0 jane-street-headers.v0.17.0 jst-config.v0.17.0 loc.0.2.2 logs.0.10.0 mdx.2.5.1 menhir.20250912 menhirCST.20250912 menhirLib.20250912 menhirSdk.20250912 num.1.6 ocaml.5.3.0 ocaml-base-compiler.5.3.0 ocaml-compiler.5.3.0 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-version.4.0.3 ocaml_intrinsics_kernel.v0.17.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 ocamlformat.0.28.1 ocamlformat-lib.0.28.1 ocp-indent.1.9.0 octavius.1.2.2 ordering.3.21.0 pageantty.0.0.3 parsexp.v0.17.0 patdiff.v0.17.0 patience_diff.v0.17.0 pp.2.0.0 pplumbing.0.0.16 pplumbing-err.0.0.16 pplumbing-log.0.0.16 pplumbing-log-cli.0.0.16 pplumbing-pp-tty.0.0.16 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_diff.v0.17.0 ppx_disable_unused_warnings.v0.17.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.2 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_js_style.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.35.0 ppxlib_jane.v0.17.2 re.1.14.0 result.1.5 sexp_pretty.v0.17.0 sexplib.v0.17.0 sexplib0.v0.17.0 sexps-rewriter.0.0.3 spawn.v0.17.0 splittable_random.v0.17.0 stdio.v0.17.0 stdlib-shims.0.3.0 stdune.3.21.0 time_now.v0.17.0 timezone.v0.17.0 top-closure.3.21.0 topkg.1.1.1 typerep.v0.17.1 uopt.v0.17.0 uucp.17.0.0 uuseg.17.0.0 uutf.1.0.4 variantslib.v0.17.0 volgo.0.0.21 volgo-base.0.0.21 volgo-git-backend.0.0.21 volgo-git-unix.0.0.21 volgo-hg-backend.0.0.21 volgo-hg-unix.0.0.21 volgo-vcs.0.0.21" ENV CI="true" ENV OCAMLCI="true" RUN opam update --depexts && opam install --cli=2.5 --depext-only -y dunolint.dev dunolint-tests.dev dunolint-lib.dev dunolint-lib-base.dev dunolint-dev.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-01-16 11:36.40: Using cache hint "mbarbin/dunolint-ocaml/opam:debian-13-ocaml-5.3@sha256:d46aa1ad7e7af14675d98de3f22b6a570ad13dc72dca386d59b30d1586f38c9d-debian-13-5.3_opam-2.5-23e7d746fc72aee2499b55e8f72c2b7a" 2026-01-16 11:36.40: Using OBuilder spec: ((from ocaml/opam:debian-13-ocaml-5.3@sha256:d46aa1ad7e7af14675d98de3f22b6a570ad13dc72dca386d59b30d1586f38c9d) (comment debian-13-5.3_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 (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 "cd ~/opam-repository && (git cat-file -e 873cb18c37b308713d11ad3894c4bb78d73fb3e7 || git fetch origin master) && git reset -q --hard 873cb18c37b308713d11ad3894c4bb78d73fb3e7 && git log --no-decorate -n1 --oneline && opam update -u")) (copy (src dunolint.opam dunolint-tests.opam dunolint-lib.opam dunolint-lib-base.opam dunolint-dev.opam) (dst ./)) (run (network host) (shell "opam pin add -yn dunolint.dev './' && \ \nopam pin add -yn dunolint-tests.dev './' && \ \nopam pin add -yn dunolint-lib.dev './' && \ \nopam pin add -yn dunolint-lib-base.dev './' && \ \nopam pin add -yn dunolint-dev.dev './'")) (run (network host) (shell "echo '(lang dune 3.0)' > './dune-project'")) (env DEPS "astring.0.8.5 base.v0.17.3 base-bigarray.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base base_bigstring.v0.17.0 base_quickcheck.v0.17.0 bin_prot.v0.17.0-1 bisect_ppx.2.8.3 bitv.2.1 camlp-streams.5.0.1 capitalization.v0.17.0 cmdlang.0.0.10 cmdlang-cmdliner-err-runner.0.0.16 cmdlang-stdlib-runner.0.0.10 cmdlang-to-cmdliner.0.0.10 cmdliner.1.3.0 core.v0.17.1 core_kernel.v0.17.0 core_unix.v0.17.1 cppo.1.8.0 csexp.1.5.2 dune.3.21.0 dune-build-info.3.21.0 dune-configurator.3.21.0 dyn.3.21.0 either.1.0.0 expect_test_helpers_core.v0.17.0 fieldslib.v0.17.0 file-rewriter.0.0.3 fix.20250919 fmt.0.11.0 fpath.0.7.3 fpath-base.0.4.0 fpath-sexp0.0.4.0 fs-io.3.21.0 gel.v0.17.0 int_repr.v0.17.0 jane-street-headers.v0.17.0 jst-config.v0.17.0 loc.0.2.2 logs.0.10.0 mdx.2.5.1 menhir.20250912 menhirCST.20250912 menhirLib.20250912 menhirSdk.20250912 num.1.6 ocaml.5.3.0 ocaml-base-compiler.5.3.0 ocaml-compiler.5.3.0 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-version.4.0.3 ocaml_intrinsics_kernel.v0.17.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 ocamlformat.0.28.1 ocamlformat-lib.0.28.1 ocp-indent.1.9.0 octavius.1.2.2 ordering.3.21.0 pageantty.0.0.3 parsexp.v0.17.0 patdiff.v0.17.0 patience_diff.v0.17.0 pp.2.0.0 pplumbing.0.0.16 pplumbing-err.0.0.16 pplumbing-log.0.0.16 pplumbing-log-cli.0.0.16 pplumbing-pp-tty.0.0.16 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_diff.v0.17.0 ppx_disable_unused_warnings.v0.17.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.2 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_js_style.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.35.0 ppxlib_jane.v0.17.2 re.1.14.0 result.1.5 sexp_pretty.v0.17.0 sexplib.v0.17.0 sexplib0.v0.17.0 sexps-rewriter.0.0.3 spawn.v0.17.0 splittable_random.v0.17.0 stdio.v0.17.0 stdlib-shims.0.3.0 stdune.3.21.0 time_now.v0.17.0 timezone.v0.17.0 top-closure.3.21.0 topkg.1.1.1 typerep.v0.17.1 uopt.v0.17.0 uucp.17.0.0 uuseg.17.0.0 uutf.1.0.4 variantslib.v0.17.0 volgo.0.0.21 volgo-base.0.0.21 volgo-git-backend.0.0.21 volgo-git-unix.0.0.21 volgo-hg-backend.0.0.21 volgo-hg-unix.0.0.21 volgo-vcs.0.0.21") (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 dunolint.dev dunolint-tests.dev dunolint-lib.dev dunolint-lib-base.dev dunolint-dev.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-01-16 11:36.40: Waiting for resource in pool OCluster 2026-01-16 12:01.43: Waiting for worker… 2026-01-16 12:08.05: Got resource from pool OCluster Building on odawa.caelum.ci.dev All commits already cached HEAD is now at 1e9e21f Improve default settings for GHA permissions (from ocaml/opam:debian-13-ocaml-5.3@sha256:d46aa1ad7e7af14675d98de3f22b6a570ad13dc72dca386d59b30d1586f38c9d) 2026-01-16 12:27.12 ---> using "8f757df45728effe507eca56c86e1525d6f8aad30b62b4a9b59eae9c6cde42fb" from cache /: (comment debian-13-5.3_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-01-16 12:27.12 ---> using "b04b528e62ea0538895a78a15a41e9f453d9f14477b7181a52d907c9b1c2f35a" from cache /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.0 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 71 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=71 --global Format upgrade done. <><> Updating repositories ><><><><><><><><><><><><><><><><><><><><><><><><><><> [default] Initialised 2026-01-16 12:27.12 ---> using "bbf7aa515bbed8a5ca7725309b339923b9d8f46434fbf406906241fde3c6c50c" from cache /src: (run (shell "uname -rs && opam exec -- ocaml -version && opam --version")) Linux 6.8.0-87-generic The OCaml toplevel, version 5.3.0 2.5.0 2026-01-16 12:27.12 ---> using "e0988c899051b72033c726186015288d182396fe909b49168ddfc9dccbef1bd3" from cache /src: (workdir /src) /src: (run (shell "sudo chown opam /src")) 2026-01-16 12:27.12 ---> using "cb572ce1b146de47b5ca5c1aabb25cc17821c4239558a2dbdc155e2668bedc8c" from cache /src: (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "cd ~/opam-repository && (git cat-file -e 873cb18c37b308713d11ad3894c4bb78d73fb3e7 || git fetch origin master) && git reset -q --hard 873cb18c37b308713d11ad3894c4bb78d73fb3e7 && git log --no-decorate -n1 --oneline && opam update -u")) From https://github.com/ocaml/opam-repository * branch master -> FETCH_HEAD 16d9c0eb87..873cb18c37 master -> origin/master 873cb18c37 Merge pull request #29216 from shonfeder/release-dune-3.21.0 <><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><> [default] synchronised from git+file:///home/opam/opam-repository Everything as up-to-date as possible (run with --verbose to show unavailable upgrades). However, you may "opam upgrade" these packages explicitly at these versions (e.g. "opam upgrade ocaml.5.4.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-01-16 12:27.12 ---> using "b312ef370e55bac74e801cee487dfa58b2f84e3b456c9a9ba6dc8e67a8881a02" from cache /src: (copy (src dunolint.opam dunolint-tests.opam dunolint-lib.opam dunolint-lib-base.opam dunolint-dev.opam) (dst ./)) 2026-01-16 12:27.12 ---> saved as "fe2faf165dd27a828921fd7b0ecb9db5984e1b69b356415826fc7524c8792118" /src: (run (network host) (shell "opam pin add -yn dunolint.dev './' && \ \nopam pin add -yn dunolint-tests.dev './' && \ \nopam pin add -yn dunolint-lib.dev './' && \ \nopam pin add -yn dunolint-lib-base.dev './' && \ \nopam pin add -yn dunolint-dev.dev './'")) [dunolint.dev] synchronised (file:///src) dunolint is now pinned to file:///src (version dev) [NOTE] Package dunolint-tests does not exist in opam repositories registered in the current switch. [dunolint-tests.dev] synchronised (file:///src) dunolint-tests is now pinned to file:///src (version dev) [dunolint-lib.dev] synchronised (file:///src) dunolint-lib is now pinned to file:///src (version dev) [dunolint-lib-base.dev] synchronised (file:///src) dunolint-lib-base is now pinned to file:///src (version dev) [NOTE] Package dunolint-dev does not exist in opam repositories registered in the current switch. [dunolint-dev.dev] synchronised (file:///src) dunolint-dev is now pinned to file:///src (version dev) 2026-01-16 12:27.18 ---> saved as "6702c4cfcae2562005d27982e6e00a26db9ebf898a45401c9f220cf69dfacdac" /src: (run (network host) (shell "echo '(lang dune 3.0)' > './dune-project'")) 2026-01-16 12:27.18 ---> saved as "f1d02d800d834fc4fd5b21b5245fa3509dcd7161379a262fa086bff1920dbaf5" /src: (env DEPS "astring.0.8.5 base.v0.17.3 base-bigarray.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base base_bigstring.v0.17.0 base_quickcheck.v0.17.0 bin_prot.v0.17.0-1 bisect_ppx.2.8.3 bitv.2.1 camlp-streams.5.0.1 capitalization.v0.17.0 cmdlang.0.0.10 cmdlang-cmdliner-err-runner.0.0.16 cmdlang-stdlib-runner.0.0.10 cmdlang-to-cmdliner.0.0.10 cmdliner.1.3.0 core.v0.17.1 core_kernel.v0.17.0 core_unix.v0.17.1 cppo.1.8.0 csexp.1.5.2 dune.3.21.0 dune-build-info.3.21.0 dune-configurator.3.21.0 dyn.3.21.0 either.1.0.0 expect_test_helpers_core.v0.17.0 fieldslib.v0.17.0 file-rewriter.0.0.3 fix.20250919 fmt.0.11.0 fpath.0.7.3 fpath-base.0.4.0 fpath-sexp0.0.4.0 fs-io.3.21.0 gel.v0.17.0 int_repr.v0.17.0 jane-street-headers.v0.17.0 jst-config.v0.17.0 loc.0.2.2 logs.0.10.0 mdx.2.5.1 menhir.20250912 menhirCST.20250912 menhirLib.20250912 menhirSdk.20250912 num.1.6 ocaml.5.3.0 ocaml-base-compiler.5.3.0 ocaml-compiler.5.3.0 ocaml-compiler-libs.v0.17.0 ocaml-config.3 ocaml-options-vanilla.1 ocaml-version.4.0.3 ocaml_intrinsics_kernel.v0.17.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 ocamlformat.0.28.1 ocamlformat-lib.0.28.1 ocp-indent.1.9.0 octavius.1.2.2 ordering.3.21.0 pageantty.0.0.3 parsexp.v0.17.0 patdiff.v0.17.0 patience_diff.v0.17.0 pp.2.0.0 pplumbing.0.0.16 pplumbing-err.0.0.16 pplumbing-log.0.0.16 pplumbing-log-cli.0.0.16 pplumbing-pp-tty.0.0.16 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_diff.v0.17.0 ppx_disable_unused_warnings.v0.17.0 ppx_enumerate.v0.17.0 ppx_expect.v0.17.2 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_js_style.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.35.0 ppxlib_jane.v0.17.2 re.1.14.0 result.1.5 sexp_pretty.v0.17.0 sexplib.v0.17.0 sexplib0.v0.17.0 sexps-rewriter.0.0.3 spawn.v0.17.0 splittable_random.v0.17.0 stdio.v0.17.0 stdlib-shims.0.3.0 stdune.3.21.0 time_now.v0.17.0 timezone.v0.17.0 top-closure.3.21.0 topkg.1.1.1 typerep.v0.17.1 uopt.v0.17.0 uucp.17.0.0 uuseg.17.0.0 uutf.1.0.4 variantslib.v0.17.0 volgo.0.0.21 volgo-base.0.0.21 volgo-git-backend.0.0.21 volgo-git-unix.0.0.21 volgo-hg-backend.0.0.21 volgo-hg-unix.0.0.21 volgo-vcs.0.0.21") /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 dunolint.dev dunolint-tests.dev dunolint-lib.dev dunolint-lib-base.dev dunolint-dev.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 [9670 kB] - Get:5 http://deb.debian.org/debian-security trixie-security/main amd64 Packages [95.9 kB] - Fetched 9997 kB in 1s (7418 kB/s) - Reading package lists... <><> Synchronising pinned packages ><><><><><><><><><><><><><><><><><><><><><><> [dunolint.dev] synchronised (file:///src) [dunolint-dev.dev] synchronised (file:///src) [dunolint-lib.dev] synchronised (file:///src) [dunolint-lib-base.dev] synchronised (file:///src) [dunolint-tests.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-compiler is already installed (current version is 5.3.0). [NOTE] Package ocaml-base-compiler is already installed (current version is 5.3.0). [NOTE] Package ocaml is already installed (current version is 5.3.0). [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-effects 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). # To update the current shell environment, run: eval $(opam env) 2026-01-16 12:27.27 ---> saved as "71fb36a7aefcbfe161b95bc3da26a60b1bfb7915d4b1996f8133aa35149d962a" /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-compiler is already installed (current version is 5.3.0). [NOTE] Package ocaml-base-compiler is already installed (current version is 5.3.0). [NOTE] Package ocaml is already installed (current version is 5.3.0). [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-effects 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 132 packages - install astring 0.8.5 - install base v0.17.3 - install base_bigstring v0.17.0 - install base_quickcheck v0.17.0 - install bin_prot v0.17.0-1 - install bisect_ppx 2.8.3 - install bitv 2.1 - install camlp-streams 5.0.1 - install capitalization v0.17.0 - install cmdlang 0.0.10 - install cmdlang-cmdliner-err-runner 0.0.16 - install cmdlang-stdlib-runner 0.0.10 - install cmdlang-to-cmdliner 0.0.10 - install cmdliner 1.3.0 - install core v0.17.1 - install core_kernel v0.17.0 - install core_unix v0.17.1 - install cppo 1.8.0 - install csexp 1.5.2 - install dune 3.21.0 - install dune-build-info 3.21.0 - install dune-configurator 3.21.0 - install dyn 3.21.0 - install either 1.0.0 - install expect_test_helpers_core v0.17.0 - install fieldslib v0.17.0 - install file-rewriter 0.0.3 - install fix 20250919 - install fmt 0.11.0 - install fpath 0.7.3 - install fpath-base 0.4.0 - install fpath-sexp0 0.4.0 - install fs-io 3.21.0 - install gel v0.17.0 - install int_repr v0.17.0 - install jane-street-headers v0.17.0 - install jst-config v0.17.0 - install loc 0.2.2 - install logs 0.10.0 - install mdx 2.5.1 - install menhir 20250912 - install menhirCST 20250912 - install menhirLib 20250912 - install menhirSdk 20250912 - install num 1.6 - install ocaml-compiler-libs v0.17.0 - install ocaml-version 4.0.3 - install ocaml_intrinsics_kernel v0.17.1 - install ocamlbuild 0.16.1 - install ocamlfind 1.9.8 - install ocamlformat 0.28.1 - install ocamlformat-lib 0.28.1 - install ocp-indent 1.9.0 - install octavius 1.2.2 - install ordering 3.21.0 - install pageantty 0.0.3 - install parsexp v0.17.0 - install patdiff v0.17.0 - install patience_diff v0.17.0 - install pp 2.0.0 - install pplumbing 0.0.16 - install pplumbing-err 0.0.16 - install pplumbing-log 0.0.16 - install pplumbing-log-cli 0.0.16 - install pplumbing-pp-tty 0.0.16 - 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_diff v0.17.0 - install ppx_disable_unused_warnings v0.17.0 - install ppx_enumerate v0.17.0 - install ppx_expect v0.17.2 - 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_js_style 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.35.0 - install ppxlib_jane v0.17.2 - install re 1.14.0 - install result 1.5 - install sexp_pretty v0.17.0 - install sexplib v0.17.0 - install sexplib0 v0.17.0 - install sexps-rewriter 0.0.3 - install spawn v0.17.0 - install splittable_random v0.17.0 - install stdio v0.17.0 - install stdlib-shims 0.3.0 - install stdune 3.21.0 - install time_now v0.17.0 - install timezone v0.17.0 - install top-closure 3.21.0 - install topkg 1.1.1 - install typerep v0.17.1 - install uopt v0.17.0 - install uucp 17.0.0 - install uuseg 17.0.0 - install uutf 1.0.4 - install variantslib v0.17.0 - install volgo 0.0.21 - install volgo-base 0.0.21 - install volgo-git-backend 0.0.21 - install volgo-git-unix 0.0.21 - install volgo-hg-backend 0.0.21 - install volgo-hg-unix 0.0.21 - install volgo-vcs 0.0.21 <><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><> -> retrieved astring.0.8.5 (cached) -> retrieved base.v0.17.3 (cached) -> retrieved base_bigstring.v0.17.0 (cached) -> retrieved base_quickcheck.v0.17.0 (cached) -> retrieved bin_prot.v0.17.0-1 (cached) -> retrieved bisect_ppx.2.8.3 (cached) -> retrieved bitv.2.1 (cached) -> retrieved camlp-streams.5.0.1 (cached) -> retrieved capitalization.v0.17.0 (cached) -> retrieved cmdlang-cmdliner-err-runner.0.0.16, pplumbing.0.0.16, pplumbing-err.0.0.16, pplumbing-log.0.0.16, pplumbing-log-cli.0.0.16, pplumbing-pp-tty.0.0.16 (cached) -> retrieved cmdlang.0.0.10, cmdlang-stdlib-runner.0.0.10, cmdlang-to-cmdliner.0.0.10 (cached) -> retrieved cmdliner.1.3.0 (cached) -> retrieved core.v0.17.1 (cached) -> retrieved core_kernel.v0.17.0 (cached) -> retrieved core_unix.v0.17.1 (cached) -> retrieved cppo.1.8.0 (cached) -> retrieved csexp.1.5.2 (cached) -> retrieved either.1.0.0 (cached) -> retrieved expect_test_helpers_core.v0.17.0 (cached) -> retrieved fieldslib.v0.17.0 (cached) -> retrieved file-rewriter.0.0.3, sexps-rewriter.0.0.3 (cached) -> retrieved fix.20250919 (cached) -> retrieved fmt.0.11.0 (cached) -> retrieved fpath.0.7.3 (cached) -> retrieved gel.v0.17.0 (cached) -> retrieved fpath-base.0.4.0, fpath-sexp0.0.4.0 (cached) -> retrieved int_repr.v0.17.0 (cached) -> retrieved jane-street-headers.v0.17.0 (cached) -> retrieved jst-config.v0.17.0 (cached) -> retrieved loc.0.2.2 (cached) -> retrieved logs.0.10.0 (cached) -> retrieved mdx.2.5.1 (cached) -> retrieved menhir.20250912, menhirCST.20250912, menhirLib.20250912, menhirSdk.20250912 (cached) -> retrieved dune.3.21.0, dune-build-info.3.21.0, dune-configurator.3.21.0, dyn.3.21.0, fs-io.3.21.0, ordering.3.21.0, stdune.3.21.0, top-closure.3.21.0 (cached) -> retrieved num.1.6 (cached) -> retrieved ocaml-compiler-libs.v0.17.0 (cached) -> retrieved ocaml-version.4.0.3 (cached) -> retrieved ocaml_intrinsics_kernel.v0.17.1 (cached) -> retrieved ocamlbuild.0.16.1 (cached) -> retrieved ocamlfind.1.9.8 (cached) -> installed cmdliner.1.3.0 -> retrieved ocp-indent.1.9.0 (cached) -> retrieved octavius.1.2.2 (cached) -> retrieved pageantty.0.0.3 (cached) -> retrieved parsexp.v0.17.0 (cached) -> retrieved ocamlformat.0.28.1, ocamlformat-lib.0.28.1 (cached) -> retrieved patdiff.v0.17.0 (cached) -> retrieved patience_diff.v0.17.0 (cached) -> retrieved pp.2.0.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_diff.v0.17.0 (cached) -> installed num.1.6 -> retrieved ppx_disable_unused_warnings.v0.17.0 (cached) -> retrieved ppx_enumerate.v0.17.0 (cached) -> retrieved ppx_expect.v0.17.2 (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_js_style.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.2 (cached) -> retrieved re.1.14.0 (cached) -> retrieved result.1.5 (cached) -> retrieved sexp_pretty.v0.17.0 (cached) -> retrieved ppxlib.0.35.0 (cached) -> retrieved sexplib.v0.17.0 (cached) -> retrieved sexplib0.v0.17.0 (cached) -> retrieved spawn.v0.17.0 (cached) -> retrieved splittable_random.v0.17.0 (cached) -> retrieved stdio.v0.17.0 (cached) -> retrieved stdlib-shims.0.3.0 (cached) -> retrieved time_now.v0.17.0 (cached) -> retrieved timezone.v0.17.0 (cached) -> retrieved typerep.v0.17.1 (cached) -> retrieved uopt.v0.17.0 (cached) -> retrieved topkg.1.1.1 (cached) -> retrieved uuseg.17.0.0 (cached) -> retrieved uutf.1.0.4 (cached) -> retrieved variantslib.v0.17.0 (cached) -> retrieved uucp.17.0.0 (cached) -> retrieved volgo.0.0.21, volgo-base.0.0.21, volgo-git-backend.0.0.21, volgo-git-unix.0.0.21, volgo-hg-backend.0.0.21, volgo-hg-unix.0.0.21, volgo-vcs.0.0.21 (cached) -> installed ocamlfind.1.9.8 -> installed ocamlbuild.0.16.1 -> installed topkg.1.1.1 -> installed uutf.1.0.4 -> installed fmt.0.11.0 -> installed astring.0.8.5 -> installed logs.0.10.0 -> installed fpath.0.7.3 -> installed dune.3.21.0 -> installed bitv.2.1 -> installed camlp-streams.5.0.1 -> installed cmdlang.0.0.10 -> installed cppo.1.8.0 -> installed csexp.1.5.2 -> installed either.1.0.0 -> installed fix.20250919 -> installed jane-street-headers.v0.17.0 -> installed menhirCST.20250912 -> installed menhirLib.20250912 -> installed menhirSdk.20250912 -> installed ocaml-compiler-libs.v0.17.0 -> installed ocaml-version.4.0.3 -> installed ocaml_intrinsics_kernel.v0.17.1 -> installed ocp-indent.1.9.0 -> installed octavius.1.2.2 -> installed pp.2.0.0 -> installed ppx_derivers.1.2.1 -> installed re.1.14.0 -> installed result.1.5 -> installed sexplib0.v0.17.0 -> installed spawn.v0.17.0 -> installed stdlib-shims.0.3.0 -> installed cmdlang-stdlib-runner.0.0.10 -> installed cmdlang-to-cmdliner.0.0.10 -> installed fpath-sexp0.0.4.0 -> installed ordering.3.21.0 -> installed mdx.2.5.1 -> installed parsexp.v0.17.0 -> installed dune-build-info.3.21.0 -> installed fs-io.3.21.0 -> installed top-closure.3.21.0 -> installed dune-configurator.3.21.0 -> installed sexplib.v0.17.0 -> installed dyn.3.21.0 -> installed uucp.17.0.0 -> installed uuseg.17.0.0 -> installed stdune.3.21.0 -> installed loc.0.2.2 -> installed base.v0.17.3 -> installed file-rewriter.0.0.3 -> installed pplumbing-pp-tty.0.0.16 -> installed fieldslib.v0.17.0 -> installed variantslib.v0.17.0 -> installed sexps-rewriter.0.0.3 -> installed fpath-base.0.4.0 -> installed stdio.v0.17.0 -> installed pplumbing-log.0.0.16 -> installed pplumbing-err.0.0.16 -> installed cmdlang-cmdliner-err-runner.0.0.16 -> installed pageantty.0.0.3 -> installed typerep.v0.17.1 -> installed pplumbing-log-cli.0.0.16 -> installed pplumbing.0.0.16 -> installed volgo.0.0.21 -> installed volgo-hg-backend.0.0.21 -> installed volgo-git-backend.0.0.21 -> installed menhir.20250912 -> installed volgo-git-unix.0.0.21 -> installed ppxlib.0.35.0 -> installed volgo-hg-unix.0.0.21 -> installed ppx_optcomp.v0.17.0 -> installed ppxlib_jane.v0.17.2 -> installed volgo-vcs.0.0.21 -> installed ppx_cold.v0.17.0 -> installed ppx_disable_unused_warnings.v0.17.0 -> installed ppx_here.v0.17.0 -> installed ppx_stable_witness.v0.17.0 -> installed ppx_tydi.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_enumerate.v0.17.0 -> installed ppx_ignore_instrumentation.v0.17.0 -> installed ppx_fixed_literal.v0.17.0 -> installed ppx_pipebang.v0.17.0 -> installed ppx_compare.v0.17.0 -> installed ppx_js_style.v0.17.0 -> installed ppx_globalize.v0.17.0 -> installed bisect_ppx.2.8.3 -> installed ppx_optional.v0.17.0 -> installed ppx_sexp_conv.v0.17.0 -> installed ppx_let.v0.17.0 -> installed ppx_hash.v0.17.0 -> installed ocamlformat-lib.0.28.1 -> installed ppx_assert.v0.17.0 -> installed ppx_custom_printf.v0.17.0 -> installed ppx_sexp_message.v0.17.0 -> installed ppx_sexp_value.v0.17.0 -> installed ppx_base.v0.17.0 -> installed ocamlformat.0.28.1 -> installed capitalization.v0.17.0 -> installed volgo-base.0.0.21 -> installed sexp_pretty.v0.17.0 -> installed jst-config.v0.17.0 -> installed bin_prot.v0.17.0-1 -> installed ppx_string.v0.17.0 -> installed time_now.v0.17.0 -> installed ppx_bin_prot.v0.17.0 -> 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.2 -> 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 timezone.v0.17.0 -> installed expect_test_helpers_core.v0.17.0 -> installed patience_diff.v0.17.0 -> installed core_kernel.v0.17.0 -> installed core_unix.v0.17.1 -> installed patdiff.v0.17.0 Done. <><> ocp-indent.1.9.0 installed successfully ><><><><><><><><><><><><><><><><><> => This package requires additional configuration for use in editors. Install package 'user-setup', or manually: * for Emacs, add these lines to ~/.emacs: (add-to-list 'load-path "/home/opam/.opam/5.3/share/emacs/site-lisp") (require 'ocp-indent) * for Vim, add this line to ~/.vimrc: set rtp^="/home/opam/.opam/5.3/share/ocp-indent/vim" # To update the current shell environment, run: eval $(opam env) 2026-01-16 12:29.23 ---> saved as "5ee86e77171e0ba9d7639c8b9ed7103723cd5dea9f7f690a79ecf7fdde614229" /src: (copy (src .) (dst /src)) 2026-01-16 12:29.23 ---> saved as "93166b641984409aee4a7bf19607c2cce59406837f1eb8f3b8c83c6bbb865c8b" /src: (run (shell "opam exec -- dune build @install @check @runtest && rm -rf _build")) File "test/expect/test__autofmt.ml", line 1, characters 0-0: (cd _build/.sandbox/7d4d7bce305b883e6b4c4e08a0673cce/default && /home/opam/.opam/5.3/bin/patdiff -keep-whitespace -location-style omake test/expect/test__autofmt.ml test/expect/test__autofmt.ml.corrected) ------ test/expect/test__autofmt.ml ++++++ test/expect/test__autofmt.ml.corrected File "test/expect/test__autofmt.ml", line 41, characters 0-1: | Dunolint_cli.Private.Linter.maybe_autoformat_file ~previous_contents ~new_contents | in | print_endline fmt | in | (* When the previous contents is well formatted, the new contents gets | formatted as well. *) | test | ~previous_contents: | (String.lstrip | {| |(lang dune 3.17) | |(name dunolint) ||}) | ~new_contents:"(lang dune 3.17) (name dunolint)"; | [%expect -| {| -| (lang dune 3.17) -| -| (name dunolint) -| |}]; +| {| (lang dune 3.17) (name dunolint) |}]; | (* If the previous contents is not formatted, then we do not autoformat the | new one. This is a heuristic. *) | test | ~previous_contents:"(lang dune 3.17) (name dunolint)" | ~new_contents:"(lang dune 3.17) (name dunolint)"; | [%expect {| (lang dune 3.17) (name dunolint) |}]; | (* This includes cases where the previous contents fails to autofmt. *) | test | ~previous_contents:"(lang dune 3.17 invalid-file" | ~new_contents:"(lang dune 3.17) (name dunolint)"; | [%expect {| (lang dune 3.17) (name dunolint) |}]; | () |;; File "test/cram/lint-dune-workspace-file.t", line 1, characters 0-0: (cd _build/default && /home/opam/.opam/5.3/bin/patdiff -keep-whitespace -location-style omake test/cram/lint-dune-workspace-file.t test/cram/lint-dune-workspace-file.t.corrected) ------ test/cram/lint-dune-workspace-file.t ++++++ test/cram/lint-dune-workspace-file.t.corrected File "test/cram/lint-dune-workspace-file.t", line 22, characters 0-1: | $ touch dune-workspace | |Test that dune-workspace files can be linted and formatted. | | $ printf '(lang dune 3.17)\n' > dune-workspace | $ dunolint tools lint-file dune-workspace | (lang dune 3.17) | |Test formatting of dune-workspace files. | | $ cat > dune-workspace <<'EOF' | > (lang | > dune | > 3.17) | > EOF | $ dunolint tools lint-file dune-workspace -| (lang dune 3.17) +| Error: Failed to format dune file: +| File "dune-workspace", line 1, characters 0-11: +| 1 | (lang +| ^^^^^^^^^^^ +| Error: Invalid first line, expected: (lang <lang> <version>) +| Exited 1 +| [123] | |Formatting can be disabled. | | $ cat > dune-workspace <<'EOF' | > (lang | > dune | > 3.17) | > EOF | $ dunolint tools lint-file dune-workspace --format-file=false | (lang | dune | 3.17) | |Test invalid dune version format. | | $ printf '(lang dune invalid)\n' > dune-workspace | $ dunolint tools lint-file dune-workspace | File "dune-workspace", line 1, characters 11-18: | 1 | (lang dune invalid) | ^^^^^^^ | Error: Expected VERSION.MINOR format, got: "invalid". -| (lang dune invalid) +| +| Error: Failed to format dune file: +| File "dune-workspace", line 1, characters 11-18: +| 1 | (lang dune invalid) +| ^^^^^^^ +| Error: Invalid version. Version must be two numbers separated by a +| dot. +| Exited 1 | [123] | | $ printf '(lang dune 3.INVALID)\n' > dune-workspace | $ dunolint tools lint-file dune-workspace | File "dune-workspace", line 1, characters 11-20: | 1 | (lang dune 3.INVALID) | ^^^^^^^^^ | Error: Invalid version format: "3.INVALID". -| (lang dune 3.INVALID) +| +| Error: Failed to format dune file: +| File "dune-workspace", line 1, characters 11-20: +| 1 | (lang dune 3.INVALID) +| ^^^^^^^^^ +| Error: Invalid version. Version must be two numbers separated by a +| dot. +| Exited 1 | [123] | |Test invalid lang stanza (not dune). | | $ printf '(lang dunolint 1.0)\n' > dune-workspace | $ dunolint tools lint-file dune-workspace | File "dune-workspace", line 1, characters 6-14: | 1 | (lang dunolint 1.0) | ^^^^^^^^ | Error: Expected (lang dune VERSION) format. -| (lang dunolint 1.0) +| +| Error: Failed to format dune file: +| File "dune-workspace", line 1, characters 6-14: +| 1 | (lang dunolint 1.0) +| ^^^^^^^^ +| Error: Unknown language "dunolint". +| Exited 1 | [123] | |Test invalid lang stanza (missing middle constructor). | | $ printf '(lang 3.17)\n' > dune-workspace | $ dunolint tools lint-file dune-workspace | File "dune-workspace", line 1, characters 0-11: | 1 | (lang 3.17) | ^^^^^^^^^^^ | Error: Expected (lang dune VERSION) format. -| (lang 3.17) +| +| Error: Failed to format dune file: +| File "dune-workspace", line 1, characters 0-11: +| 1 | (lang 3.17) +| ^^^^^^^^^^^ +| Error: Invalid first line, expected: (lang <lang> <version>) +| Exited 1 | [123] | |Test invalid sexp in dune-workspace files. | | $ printf '(invalid sexp\n' > dune-workspace | $ dunolint tools lint-file dune-workspace | File "dune-workspace", line 2, characters 0-0: | Error: unclosed parentheses at end of input | [123] | |Test a complete dune-workspace file. | | $ cat > dune-workspace <<'EOF' | > (lang dune 3.17) | > | > (context default) File "test/cram/lint-file.t", line 1, characters 0-0: (cd _build/default && /home/opam/.opam/5.3/bin/patdiff -keep-whitespace -location-style omake test/cram/lint-file.t test/cram/lint-file.t.corrected) ------ test/cram/lint-file.t ++++++ test/cram/lint-file.t.corrected File "test/cram/lint-file.t", line 119, characters 0-1: |code. This should be handled by the logic responsible for the editor |integration. | | $ printf "(invalid sexp\n" | dunolint tools lint-file --filename=dune | File "dune", line 2, characters 0-0: | Error: unclosed parentheses at end of input | [123] | |Test invalid lang stanza (missing middle constructor) for dune-project files. | | $ printf '(lang 3.17)\n' > dune-project | $ dunolint tools lint-file dune-project | File "dune-project", line 1, characters 0-11: | 1 | (lang 3.17) | ^^^^^^^^^^^ | Error: Expected (lang dune VERSION) format. -| (lang 3.17) +| +| Error: Failed to format dune file: +| File "dune-project", line 1, characters 0-11: +| 1 | (lang 3.17) +| ^^^^^^^^^^^ +| Error: Invalid first line, expected: (lang <lang> <version>) +| Exited 1 | [123] | |Next we are going to test the command with config. | |The command may be passed a config file. | | $ printf '(lang dunolint 1.0)\n' > dunolint | | $ dunolint tools lint dune --config=dunolint -| (library -| (name mylib) -| (libraries a b c)) +| Error: Failed to format dune file: +| File "dune-project", line 1, characters 0-11: +| 1 | (lang 3.17) +| ^^^^^^^^^^^ +| Error: Invalid first line, expected: (lang <lang> <version>) +| Exited 1 +| [123] | |To make it easier to write in this test, we're generating an actual config from |an OCaml file. | | $ ./lint_file_config_gen.exe --format=v1 > dunolint | | $ dunolint tools lint dune -| (library -| (name mylib) -| (libraries a b c)) +| Error: Failed to format dune file: +| File "dune-project", line 1, characters 0-11: +| 1 | (lang 3.17) +| ^^^^^^^^^^^ +| Error: Invalid first line, expected: (lang <lang> <version>) +| Exited 1 +| [123] | | $ cat dunolint | ;; This file is generated by [bin/lint_file_gen_config.ml]. Do not edit! | (lang dunolint 1.0) | | (skip_paths .git/*) | | (skip_paths _build/*) | | (rule | (cond ((path (glob vendor/*)) return) | (true (enforce (dune_project (name (equals foo))))))) | | $ cat > dune-project <<EOF | > (lang dune 3.17) | > File "test/dunolint/dune_linter/test__executable.ml", line 1, characters 0-0: (cd _build/.sandbox/70050349f24ee873cd4b67a1a564dd4f/default && /home/opam/.opam/5.3/bin/patdiff -keep-whitespace -location-style omake test/dunolint/dune_linter/test__executable.ml test/dunolint/dune_linter/test__executable.ml.corrected) ------ test/dunolint/dune_linter/test__executable.ml ++++++ test/dunolint/dune_linter/test__executable.ml.corrected File "test/dunolint/dune_linter/test__executable.ml", line 618, characters 0-1: | (* Test removing fields via [not has_field]. *) | let init = | {| |(executable | (name my-exe) | (public_name my-cli) | (instrumentation (backend bisect_ppx)) | (lint (pps ppx_linter)) | (preprocess no_preprocessing)) ||} | in | let test cond = | let t = parse init in | enforce_diff t cond | in | test [ not_ (has_field `instrumentation) ]; -| [%expect -| {| -| -1,8 +1,6 -| (executable -| (name my-exe) -| (public_name my-cli) -| -| (instrumentation -| -| (backend bisect_ppx)) -| (lint -| (pps ppx_linter)) -| (preprocess no_preprocessing)) -| |}]; +| [%expect.unreachable]; -| test [ not_ (has_field `lint) ]; -| [%expect -| {| -| -3,6 +3,4 -| (public_name my-cli) -| (instrumentation -| (backend bisect_ppx)) -| -| (lint -| -| (pps ppx_linter)) -| (preprocess no_preprocessing)) -| |}]; +| test [ not_ (has_field `lint) ]; +| [%expect.unreachable]; -| test [ not_ (has_field `preprocess) ]; -| [%expect -| {| -| -4,5 +4,4 -| (instrumentation -| (backend bisect_ppx)) -| (lint -| -| (pps ppx_linter)) -| -| (preprocess no_preprocessing)) -| +| (pps ppx_linter))) -| |}]; +| test [ not_ (has_field `preprocess) ]; +| [%expect.unreachable]; -| test [ not_ (has_field `name) ]; -| [%expect -| {| -| -1,5 +1,4 -| (executable -| -| (name my-exe) -| (public_name my-cli) -| (instrumentation -| (backend bisect_ppx)) -| |}]; +| test [ not_ (has_field `name) ]; +| [%expect.unreachable]; -| test [ not_ (has_field `public_name) ]; -| [%expect -| {| -| -1,6 +1,5 -| (executable -| (name my-exe) -| -| (public_name my-cli) -| (instrumentation -| (backend bisect_ppx)) -| (lint -| |}]; -| () +| test [ not_ (has_field `public_name) ]; +| [%expect.unreachable]; +| () +|[@@expect.uncaught_exn {| +| (* CR expect_test_collector: This test expectation appears to contain a backtrace. +| This is strongly discouraged as backtraces are fragile. +| Please change this test to not include a backtrace. *) +| ("Failed to format dune file:" +| "\027[1;31mError\027[0m: A running dune (pid: 5400) instance has locked the build directory. If\ +| \nthis is not the case, please delete \"_build/.lock\"." "Exited 1") +| Raised at Pplumbing_err__Err.raise in file "lib/pplumbing_err/src/err.ml", line 239, characters 2-61 +| Called from Dune_linter_test__Test__executable.enforce_diff in file "test/dunolint/dune_linter/test__executable.ml", lines 292-293, characters 4-60 +| Called from Dune_linter_test__Test__executable.(fun).test in file "test/dunolint/dune_linter/test__executable.ml" (inlined), line 615, characters 4-23 +| Called from Dune_linter_test__Test__executable.(fun) in file "test/dunolint/dune_linter/test__executable.ml", line 617, characters 2-44 +| Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28 +| |}] |;; | |let%expect_test "positive_enforcement_with_existing_fields" = | (* Test enforcement conditions when fields are already present. *) | let init = | {| |(executable | (name my-exe) | (public_name my-cli) | (instrumentation (backend bisect_ppx)) | (lint (pps ppx_linter)) | (preprocess no_preprocessing)) ||} | in | let test cond = | let t = parse init in File "test/dunolint/dune_linter/test__library.ml", line 1, characters 0-0: (cd _build/.sandbox/70050349f24ee873cd4b67a1a564dd4f/default && /home/opam/.opam/5.3/bin/patdiff -keep-whitespace -location-style omake test/dunolint/dune_linter/test__library.ml test/dunolint/dune_linter/test__library.ml.corrected) ------ test/dunolint/dune_linter/test__library.ml ++++++ test/dunolint/dune_linter/test__library.ml.corrected File "test/dunolint/dune_linter/test__library.ml", line 740, characters 0-1: | (condition (name (is_suffix hey)))) | |}]; | (* When [equals] is combined with other predicates in [and_], the initial | value from [equals] is used. *) | test [ name (and_ [ equals main; is_prefix "ma" ]) ]; | [%expect | {| | -1,2 +1,3 | (library | -| (public_name my-cli)) | +| (public_name my-cli) | +| (name main)) | |}]; | (* When [equals] is the second operand, [find_init_value] continues scanning | past the first operand that doesn't provide an initial value. *) | test [ name (and_ [ is_prefix "ma"; equals main ]) ]; -| [%expect -| {| -| -1,2 +1,3 -| (library -| -| (public_name my-cli)) -| +| (public_name my-cli) -| +| (name main)) -| |}]; +| [%expect.unreachable]; | (* Currently the application of invariant is not idempotent. See how, at the | end of the application of this chain of [and_] the invariant no longer | holds. We'll probably revisit at some later point, keeping as | characterization tests for now. *) | test [ name (and_ [ equals main; is_prefix "hey_" ]) ]; -| [%expect -| {| -| -1,2 +1,3 -| (library -| -| (public_name my-cli)) -| +| (public_name my-cli) -| +| (name hey_main)) -| |}]; +| [%expect.unreachable]; | (* Predicates inside [or_], [if_], or [not_] are not at positive enforcing | positions, so they cannot provide initial values - enforcement fails. *) | test_fails [ name (or_ [ equals main; is_prefix "hey" ]) ]; -| [%expect -| {| -| (Dunolinter.Handler.Enforce_failure (loc _) -| (condition (name (or (equals main) (is_prefix hey))))) -| |}]; +| [%expect.unreachable]; -| test_fails [ name (if_ (is_prefix "hey") (is_suffix "ho") (equals main)) ]; -| [%expect -| {| -| (Dunolinter.Handler.Enforce_failure (loc _) -| (condition (name (if (is_prefix hey) (is_suffix ho) (equals main))))) -| |}]; +| test_fails [ name (if_ (is_prefix "hey") (is_suffix "ho") (equals main)) ]; +| [%expect.unreachable]; -| test_fails [ name (not_ (equals main)) ]; -| [%expect -| {| -| (Dunolinter.Handler.Enforce_failure (loc _) -| (condition (name (not (equals main))))) -| |}]; +| test_fails [ name (not_ (equals main)) ]; +| [%expect.unreachable]; | test_fails [ name false_ ]; -| [%expect {| (Dunolinter.Handler.Enforce_failure (loc _) (condition (name false))) |}]; +| [%expect.unreachable]; | let init = {| (library (name my_lib)) |} in | let test cond = | let t = parse init in | enforce_diff t cond | in | let test_fails cond = | let t = parse init in | require_does_raise (fun () -> enforce t cond) | in | test [ public_name (equals (Dune.Library.Public_name.v "public_lib")) ]; -| [%expect -| {| -| -1,2 +1,3 -| (library -| -| (name my_lib)) -| +| (name my_lib) -| +| (public_name public_lib)) -| |}]; +| [%expect.unreachable]; -| (* [is_prefix] and [is_suffix] cannot provide initial values - enforcement fails. *) -| test_fails [ public_name (is_prefix "prefix_") ]; -| [%expect -| {| -| (Dunolinter.Handler.Enforce_failure (loc _) -| (condition (public_name (is_prefix prefix_)))) -| |}]; +| (* [is_prefix] and [is_suffix] cannot provide initial values - enforcement fails. *) +| test_fails [ public_name (is_prefix "prefix_") ]; +| [%expect.unreachable]; -| test_fails [ public_name (is_suffix "_suffix") ]; -| [%expect -| {| -| (Dunolinter.Handler.Enforce_failure (loc _) -| (condition (public_name (is_suffix _suffix)))) -| |}]; +| test_fails [ public_name (is_suffix "_suffix") ]; +| [%expect.unreachable]; -| (* Package can also be added via enforce with equals. *) -| test [ package (equals (Dune.Package.Name.v "my-pkg")) ]; -| [%expect -| {| -| -1,2 +1,3 -| (library -| -| (name my_lib)) -| +| (name my_lib) -| +| (package my-pkg)) -| |}]; +| (* Package can also be added via enforce with equals. *) +| test [ package (equals (Dune.Package.Name.v "my-pkg")) ]; +| [%expect.unreachable]; -| (* Package prefix/suffix predicates cannot provide initial values - enforcement fails. *) -| test_fails [ package (is_prefix "prefix-") ]; -| [%expect -| {| -| (Dunolinter.Handler.Enforce_failure (loc _) -| (condition (package (is_prefix prefix-)))) -| |}]; +| (* Package prefix/suffix predicates cannot provide initial values - enforcement fails. *) +| test_fails [ package (is_prefix "prefix-") ]; +| [%expect.unreachable]; -| test_fails [ package (is_suffix "-suffix") ]; -| [%expect -| {| -| (Dunolinter.Handler.Enforce_failure (loc _) -| (condition (package (is_suffix -suffix)))) -| |}]; -| () +| test_fails [ package (is_suffix "-suffix") ]; +| [%expect.unreachable]; +| () +|[@@expect.uncaught_exn {| +| (* CR expect_test_collector: This test expectation appears to contain a backtrace. +| This is strongly discouraged as backtraces are fragile. +| Please change this test to not include a backtrace. *) +| ("Failed to format dune file:" +| "\027[1;31mError\027[0m: A running dune (pid: 5310) instance has locked the build directory. If\ +| \nthis is not the case, please delete \"_build/.lock\"." "Exited 1") +| Raised at Pplumbing_err__Err.raise in file "lib/pplumbing_err/src/err.ml", line 239, characters 2-61 +| Called from Dune_linter_test__Test__library.enforce_diff in file "test/dunolint/dune_linter/test__library.ml", lines 566-567, characters 4-60 +| Called from Dune_linter_test__Test__library.(fun).test in file "test/dunolint/dune_linter/test__library.ml" (inlined), line 697, characters 4-23 +| Called from Dune_linter_test__Test__library.(fun) in file "test/dunolint/dune_linter/test__library.ml", line 739, characters 2-54 +| Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28 +| |}] |;; | |let%expect_test "enforce_failures" = | (* This covers cases yielding enforce failures. *) | let init = {| (library) |} in | let test cond = | let t = parse init in | enforce t cond | in | (* Certain fields don't have heuristics in place for initializing a value if | it isn't there. *) | require_does_raise (fun () -> test [ has_field `name ]); | [%expect | {| (Dunolinter.Handler.Enforce_failure (loc _) (condition (has_field name))) |}]; | require_does_raise (fun () -> test [ has_field `public_name ]); | [%expect File "test/dunolint/dune_linter/test__library.ml", line 993, characters 0-1: | {| |(library | (name my-lib) | (public_name my-public-lib) | (inline_tests) | (modes byte native) | (instrumentation (backend bisect_ppx)) | (lint (pps ppx_linter)) | (preprocess no_preprocessing)) ||} | in | let test cond = | let t = parse init in | enforce_diff t cond | in | test [ not_ (has_field `inline_tests) ]; -| [%expect -| {| -| -1,7 +1,6 -| (library -| (name my-lib) -| (public_name my-public-lib) -| -| (inline_tests) -| (modes byte native) -| (instrumentation -| (backend bisect_ppx)) -| |}]; +| [%expect.unreachable]; | (* Test removing inline_tests with arguments. *) | let init_with_args = | {| |(library | (name my-lib) | (inline_tests (deps ./test_data)) | (modes byte native)) ||} | in | let t = parse init_with_args in | enforce_diff t [ not_ (has_field `inline_tests) ]; -| [%expect -| {| -| -1,5 +1,3 -| (library -| (name my-lib) -| -| (inline_tests -| -| (deps ./test_data)) -| (modes byte native)) -| |}]; +| [%expect.unreachable]; -| test [ not_ (has_field `instrumentation) ]; -| [%expect -| {| -| -3,8 +3,6 -| (public_name my-public-lib) -| (inline_tests) -| (modes byte native) -| -| (instrumentation -| -| (backend bisect_ppx)) -| (lint -| (pps ppx_linter)) -| (preprocess no_preprocessing)) -| |}]; +| test [ not_ (has_field `instrumentation) ]; +| [%expect.unreachable]; -| test [ not_ (has_field `lint) ]; -| [%expect -| {| -| -5,6 +5,4 -| (modes byte native) -| (instrumentation -| (backend bisect_ppx)) -| -| (lint -| -| (pps ppx_linter)) -| (preprocess no_preprocessing)) -| |}]; +| test [ not_ (has_field `lint) ]; +| [%expect.unreachable]; -| test [ not_ (has_field `preprocess) ]; -| [%expect -| {| -| -6,5 +6,4 -| (instrumentation -| (backend bisect_ppx)) -| (lint -| -| (pps ppx_linter)) -| -| (preprocess no_preprocessing)) -| +| (pps ppx_linter))) -| |}]; +| test [ not_ (has_field `preprocess) ]; +| [%expect.unreachable]; -| test [ not_ (has_field `modes) ]; -| [%expect -| {| -| -2,7 +2,6 -| (name my-lib) -| (public_name my-public-lib) -| (inline_tests) -| -| (modes byte native) -| (instrumentation -| (backend bisect_ppx)) -| (lint -| |}]; +| test [ not_ (has_field `modes) ]; +| [%expect.unreachable]; -| test [ not_ (has_field `name) ]; -| [%expect -| {| -| -1,5 +1,4 -| (library -| -| (name my-lib) -| (public_name my-public-lib) -| (inline_tests) -| (modes byte native) -| |}]; +| test [ not_ (has_field `name) ]; +| [%expect.unreachable]; -| test [ not_ (has_field `public_name) ]; -| [%expect -| {| -| -1,6 +1,5 -| (library -| (name my-lib) -| -| (public_name my-public-lib) -| (inline_tests) -| (modes byte native) -| (instrumentation -| |}]; +| test [ not_ (has_field `public_name) ]; +| [%expect.unreachable]; | (* Test removing package field. *) | let init_with_package = | {| |(library | (name my-lib) | (package my-pkg) | (modes byte native)) ||} | in | let t = parse init_with_package in | enforce_diff t [ not_ (has_field `package) ]; -| [%expect -| {| -| -1,4 +1,3 -| (library -| (name my-lib) -| -| (package my-pkg) -| (modes byte native)) -| |}]; -| () +| [%expect.unreachable]; +| () +|[@@expect.uncaught_exn {| +| (* CR expect_test_collector: This test expectation appears to contain a backtrace. +| This is strongly discouraged as backtraces are fragile. +| Please change this test to not include a backtrace. *) +| ("Failed to format dune file:" +| "\027[1;31mError\027[0m: A running dune (pid: 5338) instance has locked the build directory. If\ +| \nthis is not the case, please delete \"_build/.lock\"." "Exited 1") +| Raised at Pplumbing_err__Err.raise in file "lib/pplumbing_err/src/err.ml", line 239, characters 2-61 +| Called from Dune_linter_test__Test__library.enforce_diff in file "test/dunolint/dune_linter/test__library.ml", lines 566-567, characters 4-60 +| Called from Dune_linter_test__Test__library.(fun).test in file "test/dunolint/dune_linter/test__library.ml" (inlined), line 990, characters 4-23 +| Called from Dune_linter_test__Test__library.(fun) in file "test/dunolint/dune_linter/test__library.ml", line 992, characters 2-41 +| Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28 +| |}] |;; | |let%expect_test "positive_enforcement_with_existing_fields" = | (* Test enforcement conditions when fields are already present. *) | let init = | {| |(library | (name my-lib) | (public_name my-public-lib) | (inline_tests) | (modes byte native) | (instrumentation (backend bisect_ppx)) | (lint (pps ppx_linter)) | (preprocess no_preprocessing)) ||} | in | let test cond = | let t = parse init in | enforce_diff t cond | in | test [ has_field `name ]; | [%expect {||}]; | test [ has_field `public_name ]; | [%expect {||}]; | test [ has_field `inline_tests ]; | [%expect {||}]; | test [ has_field `modes ]; -| [%expect {||}]; +| [%expect.unreachable]; | test [ has_field `instrumentation ]; -| [%expect {||}]; +| [%expect.unreachable]; | test [ has_field `lint ]; -| [%expect {||}]; +| [%expect.unreachable]; | test [ has_field `preprocess ]; -| [%expect {||}]; +| [%expect.unreachable]; | (* Test [has_field `package] with existing package field. *) | let init_with_package = | {| |(library | (name my-lib) | (package my-pkg) | (modes byte native)) ||} | in | let t = parse init_with_package in | enforce_diff t [ has_field `package ]; -| [%expect {||}]; +| [%expect.unreachable]; | () +|[@@expect.uncaught_exn {| +| (* CR expect_test_collector: This test expectation appears to contain a backtrace. +| This is strongly discouraged as backtraces are fragile. +| Please change this test to not include a backtrace. *) +| ("Failed to format dune file:" +| "\027[1;31mError\027[0m: A running dune (pid: 5488) instance has locked the build directory. If\ +| \nthis is not the case, please delete \"_build/.lock\"." "Exited 1") +| Raised at Pplumbing_err__Err.raise in file "lib/pplumbing_err/src/err.ml", line 239, characters 2-61 +| Called from Dune_linter_test__Test__library.enforce_diff in file "test/dunolint/dune_linter/test__library.ml", lines 566-567, characters 4-60 +| Called from Dune_linter_test__Test__library.(fun).test in file "test/dunolint/dune_linter/test__library.ml" (inlined), line 1130, characters 4-23 +| Called from Dune_linter_test__Test__library.(fun) in file "test/dunolint/dune_linter/test__library.ml", line 1138, characters 2-27 +| Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28 +| |}] |;; | |let%expect_test "field_condition_enforcement_with_existing_fields" = | (* Test fields condition enforcement when fields are already present. *) | let init = | {| |(library | (name my-lib) | (public_name my-public-lib) | (modes byte native) | (instrumentation (backend bisect_ppx)) | (lint (pps ppx_linter)) | (preprocess no_preprocessing)) ||} | in | let test cond = | let t = parse init in | enforce_diff t cond | in | test [ public_name (equals (Dune.Library.Public_name.v "new.name")) ]; -| [%expect -| {| -| -1,6 +1,6 -| (library -| (name my-lib) -| -| (public_name my-public-lib) -| +| (public_name new.name) -| (modes byte native) -| (instrumentation -| (backend bisect_ppx)) -| |}]; +| [%expect.unreachable]; -| test [ public_name (is_prefix "lib."); public_name (is_suffix "-pub") ]; -| [%expect -| {| -| -1,6 +1,6 -| (library -| (name my-lib) -| -| (public_name my-public-lib) -| +| (public_name lib.my-public-lib-pub) -| (modes byte native) -| (instrumentation -| (backend bisect_ppx)) -| |}]; +| test [ public_name (is_prefix "lib."); public_name (is_suffix "-pub") ]; +| [%expect.unreachable]; -| test [ instrumentation (backend (Dune.Instrumentation.Backend.Name.v "coverage")) ]; -| [%expect -| {| -| -3,7 +3,7 -| (public_name my-public-lib) -| (modes byte native) -| (instrumentation -| -| (backend bisect_ppx)) -| +| (backend coverage)) -| (lint -| (pps ppx_linter)) -| (preprocess no_preprocessing)) -| |}]; +| test [ instrumentation (backend (Dune.Instrumentation.Backend.Name.v "coverage")) ]; +| [%expect.unreachable]; -| test [ lint (pps (pp (Dune.Pp.Name.v "ppx_deriving"))) ]; -| [%expect -| {| -| -5,5 +5,5 -| (instrumentation -| (backend bisect_ppx)) -| (lint -| -| (pps ppx_linter)) -| +| (pps ppx_deriving ppx_linter)) -| (preprocess no_preprocessing)) -| |}]; +| test [ lint (pps (pp (Dune.Pp.Name.v "ppx_deriving"))) ]; +| [%expect.unreachable]; -| test [ preprocess (pps (pp (Dune.Pp.Name.v "ppx_compare"))) ]; -| [%expect -| {| -| -6,4 +6,5 -| (backend bisect_ppx)) -| (lint -| (pps ppx_linter)) -| -| (preprocess no_preprocessing)) -| +| (preprocess -| +| (pps ppx_compare))) -| |}]; +| test [ preprocess (pps (pp (Dune.Pp.Name.v "ppx_compare"))) ]; +| [%expect.unreachable]; | (* Test package condition enforcement with existing package field. *) | let init_with_package = | {| |(library | (name my-lib) | (package old-pkg) | (modes byte native)) ||} | in | let test_pkg cond = | let t = parse init_with_package in | enforce_diff t cond | in | test_pkg [ package (equals (Dune.Package.Name.v "new-pkg")) ]; -| [%expect -| {| -| -1,4 +1,4 -| (library -| (name my-lib) -| -| (package old-pkg) -| +| (package new-pkg) -| (modes byte native)) -| |}]; +| [%expect.unreachable]; -| test_pkg [ package (is_prefix "prefix-"); package (is_suffix "-suffix") ]; -| [%expect -| {| -| -1,4 +1,4 -| (library -| (name my-lib) -| -| (package old-pkg) -| +| (package prefix-old-pkg-suffix) -| (modes byte native)) -| |}]; -| () +| test_pkg [ package (is_prefix "prefix-"); package (is_suffix "-suffix") ]; +| [%expect.unreachable]; +| () +|[@@expect.uncaught_exn {| +| (* CR expect_test_collector: This test expectation appears to contain a backtrace. +| This is strongly discouraged as backtraces are fragile. +| Please change this test to not include a backtrace. *) +| ("Failed to format dune file:" +| "\027[1;31mError\027[0m: A running dune (pid: 5536) instance has locked the build directory. If\ +| \nthis is not the case, please delete \"_build/.lock\"." "Exited 1") +| Raised at Pplumbing_err__Err.raise in file "lib/pplumbing_err/src/err.ml", line 239, characters 2-61 +| Called from Dune_linter_test__Test__library.enforce_diff in file "test/dunolint/dune_linter/test__library.ml", lines 571-572, characters 4-60 +| Called from Dune_linter_test__Test__library.(fun).test in file "test/dunolint/dune_linter/test__library.ml" (inlined), line 1176, characters 4-23 +| Called from Dune_linter_test__Test__library.(fun) in file "test/dunolint/dune_linter/test__library.ml", line 1178, characters 2-71 +| Called from Ppx_expect_runtime__Test_block.Configured.dump_backtrace in file "runtime/test_block.ml", line 142, characters 10-28 +| |}] |;; | |let%expect_test "if_present eval" = | (* Test [if_present] evaluation behavior. | When the field is absent, [if_present] evaluates to [True]. | When the field is present, it evaluates the inner condition. *) | let _, t_no_public_name = parse {| (library (name mylib)) |} in | let _, t_with_public_name = | parse {| (library (name mylib) (public_name my-public-lib)) |} | in | let _, t_no_package = parse {| (library (name mylib)) |} in | let _, t_with_package = parse {| (library (name mylib) (package my-pkg)) |} in | (* [if_present] on absent public_name evaluates to True. *) | Test_helpers.is_true | (Dune_linter.Library.eval | t_no_public_name "/usr/bin/env" "bash" "-c" "opam exec -- dune build @install @check @runtest && rm -rf _build" failed with exit status 1 2026-01-16 12:29.31: Job failed: Failed: Build failed