2026-01-24 21:25.13: New job: test ocurrent/ocaml-docs-ci https://github.com/ocurrent/ocaml-docs-ci.git#refs/heads/staging (b3630639c22f086179b3e0e1e69f1b1aa57dce6c) (linux-x86_64:(lint-fmt)) Base: ocaml/opam:debian-13-ocaml-4.08@sha256:7cdc2a1943ac1462f548be7816c6d02f14e605659f225027208abe04795ea500 ocamlformat version: version 0.27.0 (from opam) To reproduce locally: git clone --recursive "https://github.com/ocurrent/ocaml-docs-ci.git" -b "staging" && cd "ocaml-docs-ci" && git reset --hard b3630639 cat > Dockerfile <<'END-OF-DOCKERFILE' FROM ocaml/opam:debian-13-ocaml-4.08@sha256:7cdc2a1943ac1462f548be7816c6d02f14e605659f225027208abe04795ea500 USER 1000:1000 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 RUN opam depext -i dune WORKDIR /src RUN opam depext -i ocamlformat=0.27.0 COPY --chown=1000:1000 . /src/ RUN opam exec -- dune build @fmt --ignore-promoted-rules || (echo "dune build @fmt failed"; exit 2) END-OF-DOCKERFILE docker build . END-REPRO-BLOCK 2026-01-24 21:25.13: Using cache hint "ocurrent/ocaml-docs-ci-ocaml/opam:debian-13-ocaml-4.08@sha256:7cdc2a1943ac1462f548be7816c6d02f14e605659f225027208abe04795ea500-debian-13-4.08_opam-2.5-ocamlformat-873cb18c37b308713d11ad3894c4bb78d73fb3e7" 2026-01-24 21:25.13: Using OBuilder spec: ((from ocaml/opam:debian-13-ocaml-4.08@sha256:7cdc2a1943ac1462f548be7816c6d02f14e605659f225027208abe04795ea500) (user (uid 1000) (gid 1000)) (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")) (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam depext -i dune")) (workdir /src) (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam depext -i ocamlformat=0.27.0")) (copy (src .) (dst /src/)) (run (shell "opam exec -- dune build @fmt --ignore-promoted-rules || (echo \"dune build @fmt failed\"; exit 2)")) ) 2026-01-24 21:25.13: Waiting for resource in pool OCluster 2026-01-24 21:25.13: Waiting for worker… 2026-01-24 21:25.15: Got resource from pool OCluster Building on odawa.caelum.ci.dev All commits already cached HEAD is now at b363063 Update dockerfiles to ocaml 5.4 (from ocaml/opam:debian-13-ocaml-4.08@sha256:7cdc2a1943ac1462f548be7816c6d02f14e605659f225027208abe04795ea500) 2026-01-24 21:25.17 ---> using "4c1f60dc0cc5644c6a4c05cf3315bdbf9cc478b70e443b212a1220385bab8bba" from cache /: (user (uid 1000) (gid 1000)) /: (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 a6b2f19780..8e1b9a49e8 master -> origin/master 873cb18c37 Merge pull request #29216 from shonfeder/release-dune-3.21.0 <><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><> [default] Initialised default (at git+file:///home/opam/opam-repository): [INFO] opam 2.1 and 2.2 include many performance and security improvements over 2.0; please consider upgrading (https://opam.ocaml.org/doc/Install.html) Everything as up-to-date as possible (run with --verbose to show unavailable upgrades). However, you may "opam upgrade" these packages explicitly, which will ask permission to downgrade or uninstall the conflicting packages. Nothing to do. # Run eval $(opam env) to update the current shell environment 2026-01-24 21:25.17 ---> using "72a7cd495abee3d0659c15140c96fff42d035222fc9b794ad453f1a5292cd6f1" from cache /: (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam depext -i dune")) # Detecting depexts using vars: arch=x86_64, os=linux, os-distribution=debian, os-family=debian # No extra OS packages requirements found. # All required OS packages found. # Now letting opam install the packages The following actions will be performed: - install dune 3.21.0 <><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><> [dune.3.21.0] found in cache <><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><> -> installed dune.3.21.0 Done. # Run eval $(opam env) to update the current shell environment 2026-01-24 21:25.17 ---> using "3b5aee51bb4636e6dab95deb6944478b896d0b06f021712424b773f7d70073ac" from cache /: (workdir /src) /src: (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam depext -i ocamlformat=0.27.0")) # Detecting depexts using vars: arch=x86_64, os=linux, os-distribution=debian, os-family=debian # No extra OS packages requirements found. # All required OS packages found. # Now letting opam install the packages The following actions will be performed: - install sexplib0 v0.14.0 [required by base] - install ocamlbuild 0.16.1 [required by fpath, astring, uuseg] - install cmdliner 1.3.0 [required by ocamlformat] - install either 1.0.0 [required by ocamlformat-lib] - install menhirLib 20250912 [required by ocamlformat-lib] - install csexp 1.5.2 [required by ocamlformat] - install dune-build-info 3.21.0 [required by ocamlformat-lib] - install camlp-streams 5.0.1 [required by ocamlformat-lib] - install seq base [required by re] - install menhirSdk 20250912 [required by ocamlformat-lib] - install fix 20250919 [required by ocamlformat-lib] - install menhirCST 20250912 [required by menhir] - install ocamlfind 1.9.8 [required by ocp-indent, astring, fpath, uuseg] - install ocaml-version 4.0.3 [required by ocamlformat-lib] - install dune-configurator 3.21.0 [required by base] - install re 1.11.0 [required by ocamlformat] - install menhir 20250912 [required by ocamlformat-lib] - install topkg 1.1.1 [required by fpath, astring, uuseg] - install ocp-indent 1.9.0 [required by ocamlformat-lib] - install base v0.14.3 [required by ocamlformat-lib] - install uutf 1.0.4 [required by ocamlformat-lib] - install astring 0.8.5 [required by ocamlformat-lib] - install stdio v0.14.0 [required by ocamlformat-lib] - install uucp 15.0.0 [required by uuseg] - install fpath 0.7.3 [required by ocamlformat-lib] - install uuseg 15.0.0 [required by ocamlformat-lib] - install ocamlformat-lib 0.27.0 [required by ocamlformat] - install ocamlformat 0.27.0 ===== 28 to install ===== <><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><> [astring.0.8.5] found in cache [base.v0.14.3] found in cache [camlp-streams.5.0.1] found in cache [cmdliner.1.3.0] found in cache [csexp.1.5.2] found in cache [dune-build-info.3.21.0] found in cache [dune-configurator.3.21.0] found in cache [either.1.0.0] found in cache [fix.20250919] found in cache [fpath.0.7.3] found in cache [menhir.20250912] found in cache [menhirCST.20250912] found in cache [menhirLib.20250912] found in cache [menhirSdk.20250912] found in cache [ocaml-version.4.0.3] found in cache [ocamlbuild.0.16.1] found in cache [ocamlfind.1.9.8] found in cache [ocamlformat.0.27.0] found in cache [ocamlformat-lib.0.27.0] found in cache [ocp-indent.1.9.0] found in cache [re.1.11.0] found in cache [sexplib0.v0.14.0] found in cache [stdio.v0.14.0] found in cache [topkg.1.1.1] found in cache [uucp.15.0.0] found in cache [uuseg.15.0.0] found in cache [uutf.1.0.4] found in cache <><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><> -> installed seq.base -> installed camlp-streams.5.0.1 -> installed cmdliner.1.3.0 -> installed csexp.1.5.2 -> installed either.1.0.0 -> installed fix.20250919 -> installed menhirCST.20250912 -> installed menhirLib.20250912 -> installed menhirSdk.20250912 -> installed ocaml-version.4.0.3 -> installed sexplib0.v0.14.0 -> installed re.1.11.0 -> installed dune-build-info.3.21.0 -> installed ocamlfind.1.9.8 -> installed dune-configurator.3.21.0 -> installed ocamlbuild.0.16.1 -> installed ocp-indent.1.9.0 -> installed base.v0.14.3 -> installed topkg.1.1.1 -> installed stdio.v0.14.0 -> installed menhir.20250912 -> installed uutf.1.0.4 -> installed astring.0.8.5 -> installed fpath.0.7.3 -> installed uucp.15.0.0 -> installed uuseg.15.0.0 -> installed ocamlformat-lib.0.27.0 -> installed ocamlformat.0.27.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/4.08/share/emacs/site-lisp") (require 'ocp-indent) * for Vim, add this line to ~/.vimrc: set rtp^="/home/opam/.opam/4.08/share/ocp-indent/vim" # Run eval $(opam env) to update the current shell environment 2026-01-24 21:25.17 ---> using "2ae43ae662b95641fa2bf73d980051b9145f20314d85ad107c6a3257b77df4e6" from cache /src: (copy (src .) (dst /src/)) 2026-01-24 21:25.17 ---> saved as "37767322492632c9baca126c9c7a57d1ed18eed1ff4a5d3e65a7530d129c80df" /src: (run (shell "opam exec -- dune build @fmt --ignore-promoted-rules || (echo \"dune build @fmt failed\"; exit 2)")) File "src/solver/solver.mli", line 1, characters 0-0: diff --git a/_build/default/src/solver/solver.mli b/_build/default/src/solver/.formatted/solver.mli index 14734ad..a9f7034 100644 --- a/_build/default/src/solver/solver.mli +++ b/_build/default/src/solver/.formatted/solver.mli @@ -11,7 +11,8 @@ val test_fake : unit -> unit (** [test_fake ()] runs a test with fake packages, no git needed. *) val test_real : string -> unit -(** [test_real repo_path] runs a test with the real opam-repository at [repo_path]. *) +(** [test_real repo_path] runs a test with the real opam-repository at + [repo_path]. *) val main : Git_unix.Store.Hash.t -> unit (** [main hash] runs a worker process that reads requests from stdin and writes File "src/solver/opam_repository.ml", line 1, characters 0-0: diff --git a/_build/default/src/solver/opam_repository.ml b/_build/default/src/solver/.formatted/opam_repository.ml index 05e9f3a..4492e3e 100644 --- a/_build/default/src/solver/opam_repository.ml +++ b/_build/default/src/solver/.formatted/opam_repository.ml @@ -21,7 +21,8 @@ let open_store_at path = Git_unix.Store.v ~dotgit fpath >|= function | Ok x -> x | Error e -> - Fmt.failwith "Failed to open opam-repository at %s: %a" path Store.pp_error e + Fmt.failwith "Failed to open opam-repository at %s: %a" path + Store.pp_error e let clone () = match Unix.lstat clone_path with File "src/solver/main.ml", line 1, characters 0-0: diff --git a/_build/default/src/solver/main.ml b/_build/default/src/solver/.formatted/main.ml index d791ee1..fb6d7f5 100644 --- a/_build/default/src/solver/main.ml +++ b/_build/default/src/solver/.formatted/main.ml @@ -79,10 +79,8 @@ let () = | [| _prog; "test" |] -> Solver.test (Git_unix.Store.Hash.of_hex "ac01ad6037c0bdcca9f67fe49cd54475b585f9b2") - | [| _prog; "test-fake" |] -> - Solver.test_fake () - | [| _prog; "test-real"; repo_path |] -> - Solver.test_real repo_path + | [| _prog; "test-fake" |] -> Solver.test_fake () + | [| _prog; "test-real"; repo_path |] -> Solver.test_real repo_path | args -> Fmt.failwith "Usage: ocaml-ci-solver (got %a)" Fmt.(array (quote string)) File "src/solver/git_context.ml", line 1, characters 0-0: diff --git a/_build/default/src/solver/git_context.ml b/_build/default/src/solver/.formatted/git_context.ml index e805f22..728e10f 100644 --- a/_build/default/src/solver/git_context.ml +++ b/_build/default/src/solver/.formatted/git_context.ml @@ -160,6 +160,6 @@ let read_packages store commit = OpamPackage.Name.Map.empty) let create ?(test = OpamPackage.Name.Set.empty) - ?(pins = OpamPackage.Name.Map.empty) ?(doc = false) - ~constraints ~env ~packages () = + ?(pins = OpamPackage.Name.Map.empty) ?(doc = false) ~constraints ~env + ~packages () = { env; packages; pins; constraints; test; doc } File "src/lib/config.ml", line 1, characters 0-0: diff --git a/_build/default/src/lib/config.ml b/_build/default/src/lib/.formatted/config.ml index 0a45c63..ad17dcb 100644 --- a/_build/default/src/lib/config.ml +++ b/_build/default/src/lib/.formatted/config.ml @@ -3,7 +3,8 @@ open Cmdliner let random = In_channel.with_open_bin "/dev/urandom" (fun ch -> let str = - String.init 4 (fun _ -> In_channel.input_byte ch |> Option.get |> Char.chr) + String.init 4 (fun _ -> + In_channel.input_byte ch |> Option.get |> Char.chr) in Base64.encode_exn str) File "src/lib/valid_packages.ml", line 1, characters 0-0: diff --git a/_build/default/src/lib/valid_packages.ml b/_build/default/src/lib/.formatted/valid_packages.ml index e0fde28..bc555d9 100644 --- a/_build/default/src/lib/valid_packages.ml +++ b/_build/default/src/lib/.formatted/valid_packages.ml @@ -11,12 +11,15 @@ module Op = struct module Value = struct type t = Package.Set.t + let digest v = let b = Buffer.create 1000000 in - Package.Set.elements v |> List.iter (fun p -> - Buffer.add_string b (Package.universe p |> Package.Universe.hash); - Buffer.add_string b (Package.opam p |> OpamPackage.name_to_string); - Buffer.add_string b (Package.opam p |> OpamPackage.version_to_string)); + Package.Set.elements v + |> List.iter (fun p -> + Buffer.add_string b (Package.universe p |> Package.Universe.hash); + Buffer.add_string b (Package.opam p |> OpamPackage.name_to_string); + Buffer.add_string b + (Package.opam p |> OpamPackage.version_to_string)); Digest.string (Buffer.contents b) end File "src/lib/voodoo.ml", line 1, characters 0-0: diff --git a/_build/default/src/lib/voodoo.ml b/_build/default/src/lib/.formatted/voodoo.ml index 7a32bcb..abf31f8 100644 --- a/_build/default/src/lib/voodoo.ml +++ b/_build/default/src/lib/.formatted/voodoo.ml @@ -58,10 +58,12 @@ module OdocDriver = struct @@ Misc.Cmd.list [ "sudo apt-get update"; - Fmt.str "opam pin -ny sherlodoc.dev %s --with-version 3.1.0" sherlodoc_pin; + Fmt.str "opam pin -ny sherlodoc.dev %s --with-version 3.1.0" + sherlodoc_pin; Fmt.str - "opam pin -ny odoc-parser.dev --with-version 3.1.0 %s && opam pin -ny \ - odoc-md.dev %s --with-version 3.1.0 && opam pin -ny odoc.dev %s --with-version 3.1.0" + "opam pin -ny odoc-parser.dev --with-version 3.1.0 %s && \ + opam pin -ny odoc-md.dev %s --with-version 3.1.0 && opam \ + pin -ny odoc.dev %s --with-version 3.1.0" odoc_pin odoc_pin odoc_pin; "opam install -y odoc-md"; "opam install -y odoc-driver sherlodoc"; File "src/lib/package.ml", line 1, characters 0-0: diff --git a/_build/default/src/lib/package.ml b/_build/default/src/lib/.formatted/package.ml index 507c299..1d28214 100644 --- a/_build/default/src/lib/package.ml +++ b/_build/default/src/lib/.formatted/package.ml @@ -117,12 +117,15 @@ end = struct let memo = ref OpamPackage.Map.empty in let package_deps = OpamPackage.Map.of_list compile_deps in let rec obtain ~visiting package = - if OpamPackage.Set.mem package visiting then begin + if OpamPackage.Set.mem package visiting then ( Printf.eprintf "CYCLE DETECTED: %s\n%!" (OpamPackage.to_string package); Printf.eprintf " Visiting stack: %s\n%!" - (OpamPackage.Set.elements visiting |> List.map OpamPackage.to_string |> String.concat " -> "); - failwith (Printf.sprintf "Dependency cycle detected at %s" (OpamPackage.to_string package)) - end; + (OpamPackage.Set.elements visiting + |> List.map OpamPackage.to_string + |> String.concat " -> "); + failwith + (Printf.sprintf "Dependency cycle detected at %s" + (OpamPackage.to_string package))); match OpamPackage.Map.find_opt package !memo with | Some package -> package | None -> File "src/solver/solver.ml", line 1, characters 0-0: diff --git a/_build/default/src/solver/solver.ml b/_build/default/src/solver/.formatted/solver.ml index bc93853..f28e5ba 100644 --- a/_build/default/src/solver/solver.ml +++ b/_build/default/src/solver/.formatted/solver.ml @@ -13,8 +13,10 @@ let env (vars : Worker.Vars.t) = let get_names = OpamFormula.fold_left (fun a (name, _) -> name :: a) [] -let universes ?(post = false) ?(doc = false) ~packages (resolutions : OpamPackage.t list) = - Printf.eprintf "DEBUG universes: post=%b doc=%b resolutions=%d\n%!" post doc (List.length resolutions); +let universes ?(post = false) ?(doc = false) ~packages + (resolutions : OpamPackage.t list) = + Printf.eprintf "DEBUG universes: post=%b doc=%b resolutions=%d\n%!" post doc + (List.length resolutions); let aux root = let name, version = (OpamPackage.name root, OpamPackage.version root) in let opamfile : OpamFile.OPAM.t = @@ -23,15 +25,16 @@ let universes ?(post = false) ?(doc = false) ~packages (resolutions : OpamPackag |> OpamPackage.Name.Map.find name |> OpamPackage.Version.Map.find version with Not_found -> - Printf.eprintf "DEBUG: Package not found in packages map: %s\n%!" (OpamPackage.to_string root); + Printf.eprintf "DEBUG: Package not found in packages map: %s\n%!" + (OpamPackage.to_string root); raise Not_found in let deps = opamfile |> OpamFile.OPAM.depends |> OpamFilter.partial_filter_formula - (OpamFilter.deps_var_env ~build:true ~post ~test:false - ~doc ~dev_setup:false ~dev:false) + (OpamFilter.deps_var_env ~build:true ~post ~test:false ~doc + ~dev_setup:false ~dev:false) |> get_names |> OpamPackage.Name.Set.of_list in @@ -39,8 +42,8 @@ let universes ?(post = false) ?(doc = false) ~packages (resolutions : OpamPackag opamfile |> OpamFile.OPAM.depopts |> OpamFilter.partial_filter_formula - (OpamFilter.deps_var_env ~build:true ~post ~test:false - ~doc ~dev_setup:false ~dev:false) + (OpamFilter.deps_var_env ~build:true ~post ~test:false ~doc + ~dev_setup:false ~dev:false) |> get_names |> OpamPackage.Name.Set.of_list in @@ -113,11 +116,15 @@ let solve ~packages ~constraints ~root_pkgs (vars : Worker.Vars.t) = on odoc/documentation tools that create cycles (e.g., camlp-streams -> odoc -> odoc-parser -> camlp-streams) *) Printf.eprintf "DEBUG: Computing compile_universes...\n%!"; let compile_universes = universes ~post:false ~doc:false ~packages pkgs in - Printf.eprintf "DEBUG: compile_universes done (%d entries)\n%!" (List.length compile_universes); + Printf.eprintf "DEBUG: compile_universes done (%d entries)\n%!" + (List.length compile_universes); (* link_universes: use extended packages, include all deps *) Printf.eprintf "DEBUG: Computing link_universes...\n%!"; - let link_universes = universes ~post:true ~doc:true ~packages:extended pkgs in - Printf.eprintf "DEBUG: link_universes done (%d entries)\n%!" (List.length link_universes); + let link_universes = + universes ~post:true ~doc:true ~packages:extended pkgs + in + Printf.eprintf "DEBUG: link_universes done (%d entries)\n%!" + (List.length link_universes); let map_universes univs = List.map (fun (pkg, str, univ) -> @@ -232,7 +239,8 @@ let main commit = (* Test with fake packages - no git needed *) let test_fake () = (* Helper to create a simple opam with unfiltered depends *) - let make_opam ?(depends = []) ?(doc_depends = []) ?(x_extra_doc_deps = []) () = + let make_opam ?(depends = []) ?(doc_depends = []) ?(x_extra_doc_deps = []) () + = let empty = OpamFile.OPAM.empty in let mk_dep name = let name = OpamPackage.Name.of_string name in @@ -245,7 +253,9 @@ let test_fake () = List.map (fun name -> let name = OpamPackage.Name.of_string name in - let filter = OpamTypes.FIdent ([], OpamVariable.of_string "with-doc", None) in + let filter = + OpamTypes.FIdent ([], OpamVariable.of_string "with-doc", None) + in OpamFormula.Atom (name, OpamFormula.Atom (OpamTypes.Filter filter))) doc_depends |> OpamFormula.ands @@ -258,7 +268,10 @@ let test_fake () = if x_extra_doc_deps = [] then opam else let ext_value = - let deps_str = String.concat " & " (List.map (fun s -> "\"" ^ s ^ "\"") x_extra_doc_deps) in + let deps_str = + String.concat " & " + (List.map (fun s -> "\"" ^ s ^ "\"") x_extra_doc_deps) + in OpamParser.FullPos.value_from_string deps_str "<test>" in let extensions = @@ -295,19 +308,18 @@ let test_fake () = ("base", "2.0", make_opam ()); ("doc-helper", "1.0", make_opam ()); ("extra-helper", "1.0", make_opam ()); - ( "mylib", "1.0", - make_opam - ~depends:[ "base" ] - ~doc_depends:[ "doc-helper" ] - ~x_extra_doc_deps:[ "extra-helper" ] - () ); + ( "mylib", + "1.0", + make_opam ~depends:[ "base" ] ~doc_depends:[ "doc-helper" ] + ~x_extra_doc_deps:[ "extra-helper" ] () ); ] in let constraints = OpamPackage.Name.Map.empty in let root_pkgs = [ OpamPackage.Name.of_string "mylib" ] in Printf.printf "=== Testing two-phase solve with fake packages ===\n%!"; - Printf.printf "Testing both {with-doc} filtered deps AND x-extra-doc-deps extension\n%!"; + Printf.printf + "Testing both {with-doc} filtered deps AND x-extra-doc-deps extension\n%!"; (* First solve: no doc deps *) let context = @@ -318,7 +330,7 @@ let test_fake () = | Error e -> Printf.printf "First solve failed: %s\n" (Solver.diagnostics e); exit 1 - | Ok sels -> + | Ok sels -> ( let pkgs = Solver.packages_of_result sels in Printf.printf "\n[1] First solve (no with-doc deps):\n%!"; List.iter (fun p -> Printf.printf " %s\n" (OpamPackage.to_string p)) pkgs; @@ -334,10 +346,13 @@ let test_fake () = List.exists (fun p -> OpamPackage.name_to_string p = "doc-helper") pkgs in let has_extra_helper = - List.exists (fun p -> OpamPackage.name_to_string p = "extra-helper") pkgs + List.exists + (fun p -> OpamPackage.name_to_string p = "extra-helper") + pkgs in if has_doc_helper || has_extra_helper then ( - Printf.printf "FAILURE: First solve should not include doc/extra helpers\n%!"; + Printf.printf + "FAILURE: First solve should not include doc/extra helpers\n%!"; exit 1); (* Use extended packages (processes x-extra-doc-deps) *) @@ -361,21 +376,23 @@ let test_fake () = ~constraints ~pins ~doc:true in let extended_result = Solver.solve extended_context root_pkgs in - (match extended_result with + match extended_result with | Error e -> - Printf.printf "Extended solve failed: %s\n%!" - (Solver.diagnostics e); + Printf.printf "Extended solve failed: %s\n%!" (Solver.diagnostics e); exit 1 | Ok extended_sels -> let extended_pkgs = Solver.packages_of_result extended_sels in - Printf.printf "\n[2] Extended solve (doc=true, post=true, with pins):\n%!"; + Printf.printf + "\n[2] Extended solve (doc=true, post=true, with pins):\n%!"; List.iter (fun p -> Printf.printf " %s\n" (OpamPackage.to_string p)) extended_pkgs; (* Verify base version is still the same (pinned) *) let extended_base_pkg = - List.find (fun p -> OpamPackage.name_to_string p = "base") extended_pkgs + List.find + (fun p -> OpamPackage.name_to_string p = "base") + extended_pkgs in let base_version_preserved = OpamPackage.Version.equal @@ -392,16 +409,23 @@ let test_fake () = extra; let has_doc_helper = - List.exists (fun p -> OpamPackage.name_to_string p = "doc-helper") extra + List.exists + (fun p -> OpamPackage.name_to_string p = "doc-helper") + extra in let has_extra_helper = - List.exists (fun p -> OpamPackage.name_to_string p = "extra-helper") extra + List.exists + (fun p -> OpamPackage.name_to_string p = "extra-helper") + extra in Printf.printf "\n[4] Results:\n%!"; - Printf.printf " Base version preserved (pinning works): %b\n%!" base_version_preserved; - Printf.printf " doc-helper added ({doc} filter works): %b\n%!" has_doc_helper; - Printf.printf " extra-helper added (x-extra-doc-deps works): %b\n%!" has_extra_helper; + Printf.printf " Base version preserved (pinning works): %b\n%!" + base_version_preserved; + Printf.printf " doc-helper added ({doc} filter works): %b\n%!" + has_doc_helper; + Printf.printf " extra-helper added (x-extra-doc-deps works): %b\n%!" + has_extra_helper; if base_version_preserved && has_doc_helper && has_extra_helper then ( Printf.printf "\nSUCCESS: Both mechanisms work!\n%!"; @@ -435,9 +459,7 @@ let test_real repo_path = (OpamPackage.Name.Map.cardinal packages); (* Test with odoc.3.1.0 which has x-extra-doc-deps *) - let root_pkgs = - List.map OpamPackage.Name.of_string [ "odoc" ] - in + let root_pkgs = List.map OpamPackage.Name.of_string [ "odoc" ] in let constraints = [ ("odoc", `Eq, "3.1.0"); ("ocaml", `Geq, "5.2.0") ] |> List.map (fun (name, rel, version) -> @@ -468,7 +490,9 @@ let test_real repo_path = result.compile_universes in let link_pkgs = - List.find_opt (fun (name, _, _) -> name = "odoc.3.1.0") result.link_universes + List.find_opt + (fun (name, _, _) -> name = "odoc.3.1.0") + result.link_universes in (match compile_pkgs with | Some (_, _, deps) -> @@ -492,17 +516,31 @@ let test_real repo_path = let extra_in_link = List.filter (fun name -> - List.exists (fun dep -> String.sub dep 0 (min (String.length name) (String.length dep)) = name) link_deps - && not (List.exists (fun dep -> String.sub dep 0 (min (String.length name) (String.length dep)) = name) compile_deps)) + List.exists + (fun dep -> + String.sub dep 0 (min (String.length name) (String.length dep)) + = name) + link_deps + && not + (List.exists + (fun dep -> + String.sub dep 0 + (min (String.length name) (String.length dep)) + = name) + compile_deps)) expected_extra in - Printf.printf "\nExtra packages in link but not compile (from x-extra-doc-deps):\n%!"; + Printf.printf + "\nExtra packages in link but not compile (from x-extra-doc-deps):\n%!"; List.iter (fun p -> Printf.printf " %s\n%!" p) extra_in_link; if List.length extra_in_link >= 2 then ( - Printf.printf "\nSUCCESS: x-extra-doc-deps packages found in link universe!\n%!"; + Printf.printf + "\nSUCCESS: x-extra-doc-deps packages found in link universe!\n%!"; exit 0) else ( - Printf.printf "\nNote: Some x-extra-doc-deps packages may not be available.\n%!"; - Printf.printf "Check if odoc-driver, sherlodoc, odig exist in the repo.\n%!"; + Printf.printf + "\nNote: Some x-extra-doc-deps packages may not be available.\n%!"; + Printf.printf + "Check if odoc-driver, sherlodoc, odig exist in the repo.\n%!"; exit 0) File "src/lib/prep.ml", line 1, characters 0-0: diff --git a/_build/default/src/lib/prep.ml b/_build/default/src/lib/.formatted/prep.ml index 89e1c0b..a6793be 100644 --- a/_build/default/src/lib/prep.ml +++ b/_build/default/src/lib/.formatted/prep.ml @@ -496,7 +496,9 @@ module Prep = struct in Hashtbl.hash (Buffer.contents buf) in - let tools_digest = Spec.to_spec tools_base |> Digest.string |> Digest.to_hex in + let tools_digest = + Spec.to_spec tools_base |> Digest.string |> Digest.to_hex + in Fmt.str "%s\n%s\n%s\n%s\n%d\n" prep_version (Package.digest prep) (Package.digest prep) tools_digest opamfiles_hash end dune build @fmt failed "/usr/bin/env" "bash" "-c" "opam exec -- dune build @fmt --ignore-promoted-rules || (echo "dune build @fmt failed"; exit 2)" failed with exit status 2 2026-01-24 21:25.18: Job failed: Failed: Build failed