From d5225ae41c0b5c902af2aec4c3e420ec61f4c909 Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Thu, 25 Aug 2022 14:35:35 +0200 Subject: [PATCH 01/11] Build: add opam/octez-dev-deps.opam --- manifest/main.ml | 3 +++ opam/octez-dev-deps.opam | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 opam/octez-dev-deps.opam diff --git a/manifest/main.ml b/manifest/main.ml index 96ed62832224..353e52dcf631 100644 --- a/manifest/main.ml +++ b/manifest/main.ml @@ -5737,6 +5737,9 @@ let exclude filename = | ["opam"; "mandatory-for-make.opam"] -> true (* opam-repository is used by scripts/opam-release.sh *) | "opam-repository" :: _ -> true + (* opam/octez-dev-deps.opam is not released, it's used to make an opam lock file + for developement dependencies. There is no use to generate it. *) + | [ "opam"; "octez-dev-deps.opam" ] -> true (* Tezt is only partially managed by the manifest. There is no real good reason for that but only the core Tezt library is released. *) | "tezt" :: "long_tests" :: _ -> true diff --git a/opam/octez-dev-deps.opam b/opam/octez-dev-deps.opam new file mode 100644 index 000000000000..f59c22e2693b --- /dev/null +++ b/opam/octez-dev-deps.opam @@ -0,0 +1,21 @@ +opam-version: "2.0" +maintainer: "contact@tezos.com" +authors: ["Tezos devteam"] +homepage: "https://www.tezos.com/" +bug-reports: "https://gitlab.com/tezos/tezos/issues" +dev-repo: "git+https://gitlab.com/tezos/tezos.git" +license: "MIT" +depends: [ + "utop" + "merlin" + "ocamlformat" + "ometrics" { = "0.2.1" } + "odoc" + "ocp-indent" + "ocaml-lsp-server" { >= "1.6.1" } + "js_of_ocaml-compiler" + "merge-fmt" +] +build: [] +synopsis: "Virtual package depending on all Octez development-only dependencies" +description: "Install this package to install some dependencies which are useful to develop Octez." -- GitLab From 2283a6bdb9cf72d11a75cf57da8d7206573b9d6e Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Wed, 20 Jul 2022 15:15:36 +0200 Subject: [PATCH 02/11] Manifest: generate opam/octez-{,tps-}deps.opam --- manifest/main.ml | 2 +- manifest/manifest.ml | 112 ++++++++++++++++++++++++++++-- manifest/manifest.mli | 23 +++++- opam/octez-deps.opam | 109 +++++++++++++++++++++++++++++ scripts/install_build_deps.raw.sh | 2 +- scripts/opam-check.sh | 2 +- scripts/update_opam_repo.sh | 2 +- 7 files changed, 242 insertions(+), 10 deletions(-) create mode 100644 opam/octez-deps.opam diff --git a/manifest/main.ml b/manifest/main.ml index 353e52dcf631..764672fa8702 100644 --- a/manifest/main.ml +++ b/manifest/main.ml @@ -5771,7 +5771,7 @@ let () = in test "main" ~alias:"" ~path:"tezt/tests" ~opam:"" ~deps:(deps @ test_libs) in - generate ~make_tezt_exe + generate ~make_tezt_exe ~default_profile:"octez-deps" (* Generate a dunw-workspace file at the root of the repo *) let () = diff --git a/manifest/manifest.ml b/manifest/manifest.ml index 99dd0dd84248..b92640f2a36a 100644 --- a/manifest/manifest.ml +++ b/manifest/manifest.ml @@ -26,6 +26,8 @@ module String_map = Map.Make (String) module String_set = Set.Make (String) +let list_iter l f = List.iter f l + let ( // ) = Filename.concat let has_error = ref false @@ -998,6 +1000,7 @@ module Target = struct preprocess : preprocessor list; preprocessor_deps : preprocessor_dep list; private_modules : string list; + profile : string option; opam_only_deps : t list; release : bool; static : bool; @@ -1157,6 +1160,7 @@ module Target = struct ?preprocess:preprocessor list -> ?preprocessor_deps:preprocessor_dep list -> ?private_modules:string list -> + ?profile:string -> ?opam_only_deps:t option list -> ?release:bool -> ?static:bool -> @@ -1228,8 +1232,8 @@ module Target = struct ?modules ?(modules_without_implementation = []) ?(npm_deps = []) ?ocaml ?opam ?opam_bug_reports ?opam_doc ?opam_homepage ?(opam_with_test = Always) ?(optional = false) ?(preprocess = []) - ?(preprocessor_deps = []) ?(private_modules = []) ?(opam_only_deps = []) - ?(release = false) ?static ?synopsis ?description + ?(preprocessor_deps = []) ?(private_modules = []) ?profile + ?(opam_only_deps = []) ?(release = false) ?static ?synopsis ?description ?(time_measurement_ppx = false) ?(virtual_modules = []) ?default_implementation ?(cram = false) ?license ?(extra_authors = []) ~path names = @@ -1529,6 +1533,7 @@ module Target = struct preprocess; preprocessor_deps; private_modules; + profile; opam_only_deps; release; static; @@ -2740,7 +2745,6 @@ let check_js_of_ocaml () = [B0 .. Bn] do not belong to Package A. If such paths exist, we report one path with the minimum length. *) let check_circular_opam_deps () = - let list_iter l f = List.iter f l in let name i = Target.name_for_errors (Internal i) in let deps_of (t : Target.internal) = List.filter_map Target.get_internal (Target.all_internal_deps t) @@ -3043,7 +3047,106 @@ let generate_opam_ci () = delayed_by package_name) -let generate ~make_tezt_exe = +let generate_profiles ~default_profile = + let deps : Version.constraints String_map.t String_map.t ref = + (* [!deps |> String_map.find profile |> String_map.find pkg] + are the version constraints for package [pkg] in profile [profile]. *) + ref String_map.empty + in + let conflicts : Version.constraints String_map.t String_map.t ref = + ref String_map.empty + in + let rec add_target_to deps profile = function + | Target.Internal _ -> + (* No need to recurse on dependencies because we'll iterate on all internal + dependencies anyway. *) + () + | Vendored _ -> + (* It is the developer's duty to integrate the dependencies of + vendored libraries, manually, into the generated .opam / lock file. *) + () + | External {opam = Some name; version; _} | Opam_only {name; version; _} -> + let profile_deps = + String_map.find_opt profile !deps + |> Option.value ~default:String_map.empty + in + let version = + match String_map.find_opt name profile_deps with + | None -> version + | Some old_version -> + if old_version <> version then Version.(version && old_version) + else version + in + let profile_deps = String_map.add name version profile_deps in + deps := String_map.add profile profile_deps !deps + | External {opam = None; _} -> + (* This corresponds to libs from the stdlib, like dynlink, compiler-libs etc. + There is no opam package to add to the lock file. *) + () + | Optional target | Select {package = target; _} | Open (target, _) -> + add_target_to deps profile target + in + ( Target.iter_internal_by_path @@ fun _ internals -> + list_iter internals @@ fun internal -> + let profile = internal.profile |> Option.value ~default:default_profile in + list_iter (Target.all_internal_deps internal) (add_target_to deps profile) ; + list_iter internal.conflicts (add_target_to conflicts profile) ) ; + let generate_profile profile (profile_deps, profile_conflicts) = + let depends = + String_map.bindings profile_deps + |> List.map @@ fun (package, version) -> + {Opam.package; version; with_test = Never; optional = false} + in + let conflicts = + String_map.bindings profile_conflicts + |> List.map @@ fun (package, version) -> + {Opam.package; version; with_test = Never; optional = false} + in + let opam : Opam.t = + { + maintainer = "contact@tezos.com"; + authors = ["Tezos devteam"]; + homepage = "https://www.tezos.com/"; + doc = ""; + bug_reports = "https://gitlab.com/tezos/tezos/issues"; + dev_repo = "git+https://gitlab.com/tezos/tezos.git"; + licenses = ["MIT"]; + depends; + conflicts; + build = []; + synopsis = + Printf.sprintf + "Virtual package depending on Octez dependencies (profile: %s)" + profile; + url = None; + description = + Some + "Install this package to install all dependencies needed to build \ + Octez."; + x_opam_monorepo_opam_provided = []; + } + in + write ("opam/" ^ profile ^ ".opam") @@ fun fmt -> + Format.fprintf + fmt + "# This file was automatically generated, do not edit.@.# Edit file \ + manifest/main.ml instead.@.%a" + Opam.pp + opam + in + let merged = + let merge _profile m1 m2 = + match (m1, m2) with + | None, None -> None + | None, Some m -> Some (String_map.empty, m) + | Some m, None -> Some (m, String_map.empty) + | Some m1, Some m2 -> Some (m1, m2) + in + String_map.merge merge !deps !conflicts + in + String_map.iter generate_profile merged + +let generate ~make_tezt_exe ~default_profile = Printexc.record_backtrace true ; try register_tezt_targets ~make_tezt_exe ; @@ -3054,6 +3157,7 @@ let generate ~make_tezt_exe = generate_static_packages () ; generate_opam_ci () ; generate_binaries_for_release () ; + generate_profiles ~default_profile ; Option.iter (generate_opam_files_for_release packages_dir) release with exn -> Printexc.print_backtrace stderr ; diff --git a/manifest/manifest.mli b/manifest/manifest.mli index e03651424b16..7934e4ad0d69 100644 --- a/manifest/manifest.mli +++ b/manifest/manifest.mli @@ -641,6 +641,20 @@ type with_test = Always | Never | Only_on_64_arch - [private_modules]: similar to [modules], but those modules are not part of the library interface. They are not part of the toplevel module of the library. + - [profile]: the name of the profile to which the target belongs. + For each profile, a file [opam/.opam] is generated. + This file depends on all external dependencies on which targets that belong + to this profile depend on, and contains no build instructions. + It is thus a good basis for [opam lock] to generate a [.opam.locked] file. + Running [opam install .opam.locked] will then install all dependencies + needed to build targets belonging to this profile. + + Targets for which no profile is specified will belong to the default profile + given to {!generate}. Most of the time you do not need to specify a profile: + the default profile is fine. But if your target depends on packages that users + would most likely not want to install, it may be a good idea to separate it + into its own profile. + - [opam_only_deps]: dependencies to add to the [.opam] file but not to the [dune] file. Typical use cases are runtime dependencies and build dependencies for users of the target (but not the target itself). @@ -710,6 +724,7 @@ type 'a maker = ?preprocess:preprocessor list -> ?preprocessor_deps:preprocessor_dep list -> ?private_modules:string list -> + ?profile:string -> ?opam_only_deps:target list -> ?release:bool -> ?static:bool -> @@ -1042,8 +1057,12 @@ val name_for_errors : target -> string [public_lib], [test], etc. [make_tezt_exe] is given the list of libraries that register Tezt tests - and shall create a test executable that links all of them. *) -val generate : make_tezt_exe:(target list -> target) -> unit + and shall create a test executable that links all of them. + + [default_profile] is the name of the profile to use for targets that + were declared without [?profile]. See the documentation of the [?profile] + argument of type ['a maker]. *) +val generate : make_tezt_exe:(target list -> target) -> default_profile:string -> unit (** Run various checks. diff --git a/opam/octez-deps.opam b/opam/octez-deps.opam new file mode 100644 index 000000000000..1163d630de28 --- /dev/null +++ b/opam/octez-deps.opam @@ -0,0 +1,109 @@ +# This file was automatically generated, do not edit. +# Edit file manifest/main.ml instead. +opam-version: "2.0" +maintainer: "contact@tezos.com" +authors: ["Tezos devteam"] +homepage: "https://www.tezos.com/" +bug-reports: "https://gitlab.com/tezos/tezos/issues" +dev-repo: "git+https://gitlab.com/tezos/tezos.git" +license: "MIT" +depends: [ + "alcotest" { >= "1.5.0" } + "alcotest-lwt" { >= "1.5.0" } + "astring" + "base-unix" + "bigstring" + "bigstringaf" { >= "0.2.0" } + "bisect_ppx" { >= "2.7.0" } + "bls12-381" { >= "5.0.0" & < "5.1.0" } + "bls12-381-signature" { = "1.0.0" } + "camlzip" { >= "1.11" & < "1.12" } + "caqti" + "caqti-dynload" + "caqti-lwt" + "class_group_vdf" { >= "0.0.4" } + "cmdliner" { >= "1.1.0" } + "cohttp-lwt-unix" { >= "2.2.0" } + "conf-libev" + "conf-rust" + "ctypes" { >= "0.18.0" } + "ctypes_stubs_js" + "data-encoding" { >= "0.6" & < "0.7" } + "digestif" { >= "0.7.3" } + "dune-configurator" + "ezjsonm" { >= "1.1.0" } + "fmt" { >= "0.8.7" } + "hacl-star" { >= "0.4.2" & < "0.5" } + "hacl-star-raw" + "hashcons" + "hex" { >= "1.3.0" } + "index" { >= "1.6.0" & < "1.7.0" } + "integers" + "integers_stubs_js" + "ipaddr" { >= "5.0.0" & < "6.0.0" } + "irmin" { >= "3.4.0" & < "3.5.0" } + "irmin-pack" { >= "3.4.0" & < "3.5.0" } + "js_of_ocaml" { >= "4.0.0" & < "5.0.0" } + "js_of_ocaml-lwt" { >= "4.0.0" & < "5.0.0" } + "json-data-encoding" { >= "0.11" & < "0.13" } + "ledgerwallet-tezos" { >= "0.2.1" } + "logs" + "lwt" { >= "5.6.0" } + "lwt-canceler" { >= "0.3" & < "0.4" } + "lwt-exit" + "lwt-watcher" { = "0.2" } + "lwt_log" + "mtime" { >= "1.0.0" } + "num" + "ocaml-migrate-parsetree" + "ocamlformat" { = "0.21.0" } + "ocamlgraph" + "ocp-ocamlres" { >= "0.4" } + "ocplib-endian" + "ometrics" { >= "0.2.1" } + "ppx_deriving" + "ppx_expect" + "ppx_import" + "prbnmcn-cgrph" { = "0.0.2" } + "prbnmcn-dagger" { = "0.0.2" } + "prbnmcn-dagger-stats" { = "0.0.2" } + "prbnmcn-stats" { = "0.0.4" } + "pringo" { >= "1.3" & < "1.4" } + "prometheus" { >= "1.2" } + "prometheus-app" { >= "1.2" } + "ptime" { >= "1.0.0" } + "pure-splitmix" { = "0.3" } + "pyml" + "qcheck-alcotest" { >= "0.18" } + "qcheck-core" + "re" { >= "1.7.2" } + "resto" { >= "1.0" } + "resto-acl" { >= "1.0" } + "resto-cohttp" { >= "1.0" } + "resto-cohttp-client" { >= "1.0" } + "resto-cohttp-self-serving-client" { >= "1.0" } + "resto-cohttp-server" { >= "1.0" } + "resto-directory" { >= "1.0" } + "ringo" { >= "0.9" } + "ringo-lwt" { >= "0.9" } + "secp256k1-internal" { >= "0.3.0" } + "tar" + "tar-unix" { = "2.0.0" } + "tezos-bls12-381-polynomial" { >= "0.1.0" } + "tezos-plompiler" { >= "0.1.2" } + "tezos-plonk" { >= "0.1.2" } + "tezos-rust-libs" { = "1.1" } + "tls" { >= "0.10" } + "uri" { >= "2.2.0" } + "utop" { >= "2.8" } + "uutf" + "zarith" { >= "1.12" & < "1.13" } + "zarith_stubs_js" +] +conflicts: [ + "hacl_x25519" + "result" { < "1.5" } +] +build: [] +synopsis: "Virtual package depending on Octez dependencies (profile: octez-deps)" +description: "Install this package to install all dependencies needed to build Octez." diff --git a/scripts/install_build_deps.raw.sh b/scripts/install_build_deps.raw.sh index 4203478e86af..97fee24e8daa 100755 --- a/scripts/install_build_deps.raw.sh +++ b/scripts/install_build_deps.raw.sh @@ -8,7 +8,7 @@ src_dir="$(dirname "$script_dir")" #shellcheck source=scripts/version.sh . "$script_dir"/version.sh -opams=$(find "$src_dir/vendors" "$src_dir/src" "$src_dir/tezt" "$src_dir/opam" -name \*.opam -print) +opams=$(find "$src_dir/vendors" "$src_dir/src" "$src_dir/tezt" "$src_dir/opam" -name \*.opam \! -name octez\*-deps.opam\* -print) export OPAMYES="${OPAMYES:=true}" diff --git a/scripts/opam-check.sh b/scripts/opam-check.sh index 681a43cb8160..c363ceeff1b1 100755 --- a/scripts/opam-check.sh +++ b/scripts/opam-check.sh @@ -5,7 +5,7 @@ src_dir="$(dirname "$script_dir")" . "$script_dir"/version.sh -opams=$(find "$src_dir/vendors" "$src_dir/src" "$src_dir/tezt" "$src_dir/opam" -name \*.opam -print) +opams=$(find "$src_dir/vendors" "$src_dir/src" "$src_dir/tezt" "$src_dir/opam" -name \*.opam \! -name octez\*-deps.opam\* -print) echo "## Checking installed dependencies..." echo diff --git a/scripts/update_opam_repo.sh b/scripts/update_opam_repo.sh index 7c7c4376eb1f..4ec24d0dcaf1 100755 --- a/scripts/update_opam_repo.sh +++ b/scripts/update_opam_repo.sh @@ -49,7 +49,7 @@ src_dir="$(dirname "$script_dir")" . "$script_dir"/version.sh -opams=$(find "$src_dir/vendors" "$src_dir/src" "$src_dir/tezt" "$src_dir/opam" -name \*.opam -print | LC_COLLATE=C sort -u) +opams=$(find "$src_dir/vendors" "$src_dir/src" "$src_dir/tezt" "$src_dir/opam" -name \*.opam \! -name octez\*-deps.opam\* -print | LC_COLLATE=C sort -u) ## Shallow clone of opam repository (requires git protocol version 2) export GIT_WORK_TREE="$tmp_dir" -- GitLab From a774c61743c4d818e7983528f21697e807b84c5f Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Fri, 7 Oct 2022 17:48:47 +0200 Subject: [PATCH 03/11] Manifest: add_dep_to_profile --- manifest/manifest.ml | 14 ++++++++++++++ manifest/manifest.mli | 13 ++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/manifest/manifest.ml b/manifest/manifest.ml index b92640f2a36a..844357efecd4 100644 --- a/manifest/manifest.ml +++ b/manifest/manifest.ml @@ -1838,6 +1838,16 @@ let register_tezt_targets ~make_tezt_exe = String_map.iter register_path !tezt_targets_by_path ; make_tezt_exe !tezt_test_libs +let profile_deps : Target.t list String_map.t ref = ref String_map.empty + +let add_dep_to_profile profile = function + | None -> () + | Some dep -> + let old = + String_map.find_opt profile !profile_deps |> Option.value ~default:[] + in + profile_deps := String_map.add profile (dep :: old) !profile_deps + (*****************************************************************************) (* GENERATOR *) (*****************************************************************************) @@ -3086,6 +3096,10 @@ let generate_profiles ~default_profile = | Optional target | Select {package = target; _} | Open (target, _) -> add_target_to deps profile target in + String_map.iter + (fun profile deps_to_add -> + List.iter (add_target_to deps profile) deps_to_add) + !profile_deps ; ( Target.iter_internal_by_path @@ fun _ internals -> list_iter internals @@ fun internal -> let profile = internal.profile |> Option.value ~default:default_profile in diff --git a/manifest/manifest.mli b/manifest/manifest.mli index 7934e4ad0d69..06a62e4d3bf2 100644 --- a/manifest/manifest.mli +++ b/manifest/manifest.mli @@ -1045,6 +1045,16 @@ val open_ : ?m:string -> target -> target Example: [tezos_base |> open_if protocol_is_recent_enough] *) val open_if : ?m:string -> bool -> target -> target +(** Add a dependency to a profile. + + See the documentation of the [?profile] argument of target makers for + more information about profiles. + + Use [add_dep_to_profile profile dep] to add [dep] as a dependency to the + [opam/profile.opam] file without having to add it as a dependency of an + actual package. *) +val add_dep_to_profile : string -> target -> unit + (** Get a name for a given target, to display in errors. If a target has multiple names, one is chosen arbitrarily. @@ -1062,7 +1072,8 @@ val name_for_errors : target -> string [default_profile] is the name of the profile to use for targets that were declared without [?profile]. See the documentation of the [?profile] argument of type ['a maker]. *) -val generate : make_tezt_exe:(target list -> target) -> default_profile:string -> unit +val generate : + make_tezt_exe:(target list -> target) -> default_profile:string -> unit (** Run various checks. -- GitLab From 5c1143e06a6aac4e765f52f5b2e530e446260a0b Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Fri, 7 Oct 2022 17:49:09 +0200 Subject: [PATCH 04/11] Manifest: use add_dep_to_profile to generate octez-dev-deps.opam --- manifest/main.ml | 18 +++++++++++++++--- opam/octez-deps.opam | 1 - opam/octez-dev-deps.opam | 18 +++++++++--------- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/manifest/main.ml b/manifest/main.ml index 764672fa8702..6395c9e53d61 100644 --- a/manifest/main.ml +++ b/manifest/main.ml @@ -363,6 +363,20 @@ let zarith_stubs_js = external_lib ~js_compatible:true "zarith_stubs_js" V.True let ledgerwallet_tezos = external_lib "ledgerwallet-tezos" V.(at_least "0.2.1") +(* DEVELOPMENT-ONLY DEPENDENCIES *) + +let () = + List.iter + (add_dep_to_profile "octez-dev-deps") + [ + external_lib "merlin" V.True; + external_lib "odoc" V.True; + external_lib "ocp-indent" V.True; + external_lib "ocaml-lsp-server" V.(at_least "1.6.1"); + external_lib "js_of_ocaml-compiler" V.True; + external_lib "merge-fmt" V.True; + ] + (* INTERNAL LIBS *) let octez_test_helpers = @@ -5562,6 +5576,7 @@ let _tztop = ~modes:[Byte] ~bisect_ppx:false ~static:false + ~profile:"octez-dev-deps" ~deps: [ (* The following deps come from the original dune file. *) @@ -5737,9 +5752,6 @@ let exclude filename = | ["opam"; "mandatory-for-make.opam"] -> true (* opam-repository is used by scripts/opam-release.sh *) | "opam-repository" :: _ -> true - (* opam/octez-dev-deps.opam is not released, it's used to make an opam lock file - for developement dependencies. There is no use to generate it. *) - | [ "opam"; "octez-dev-deps.opam" ] -> true (* Tezt is only partially managed by the manifest. There is no real good reason for that but only the core Tezt library is released. *) | "tezt" :: "long_tests" :: _ -> true diff --git a/opam/octez-deps.opam b/opam/octez-deps.opam index 1163d630de28..8406d0cdef3e 100644 --- a/opam/octez-deps.opam +++ b/opam/octez-deps.opam @@ -95,7 +95,6 @@ depends: [ "tezos-rust-libs" { = "1.1" } "tls" { >= "0.10" } "uri" { >= "2.2.0" } - "utop" { >= "2.8" } "uutf" "zarith" { >= "1.12" & < "1.13" } "zarith_stubs_js" diff --git a/opam/octez-dev-deps.opam b/opam/octez-dev-deps.opam index f59c22e2693b..e00161a895f1 100644 --- a/opam/octez-dev-deps.opam +++ b/opam/octez-dev-deps.opam @@ -1,3 +1,5 @@ +# This file was automatically generated, do not edit. +# Edit file manifest/main.ml instead. opam-version: "2.0" maintainer: "contact@tezos.com" authors: ["Tezos devteam"] @@ -6,16 +8,14 @@ bug-reports: "https://gitlab.com/tezos/tezos/issues" dev-repo: "git+https://gitlab.com/tezos/tezos.git" license: "MIT" depends: [ - "utop" - "merlin" - "ocamlformat" - "ometrics" { = "0.2.1" } - "odoc" - "ocp-indent" - "ocaml-lsp-server" { >= "1.6.1" } "js_of_ocaml-compiler" "merge-fmt" + "merlin" + "ocaml-lsp-server" { >= "1.6.1" } + "ocp-indent" + "odoc" + "utop" { >= "2.8" } ] build: [] -synopsis: "Virtual package depending on all Octez development-only dependencies" -description: "Install this package to install some dependencies which are useful to develop Octez." +synopsis: "Virtual package depending on Octez dependencies (profile: octez-dev-deps)" +description: "Install this package to install all dependencies needed to build Octez." -- GitLab From 054db4bbe4f78bd207ccfeb70c422af7dd7987f7 Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Fri, 7 Oct 2022 17:51:01 +0200 Subject: [PATCH 05/11] Build: use octez-deps.opam in make build-deps --- scripts/install_build_deps.raw.sh | 6 +----- scripts/install_build_deps.sh | 3 ++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/scripts/install_build_deps.raw.sh b/scripts/install_build_deps.raw.sh index 97fee24e8daa..74087cc33ed2 100755 --- a/scripts/install_build_deps.raw.sh +++ b/scripts/install_build_deps.raw.sh @@ -3,14 +3,10 @@ set -e script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")" -src_dir="$(dirname "$script_dir")" #shellcheck source=scripts/version.sh . "$script_dir"/version.sh -opams=$(find "$src_dir/vendors" "$src_dir/src" "$src_dir/tezt" "$src_dir/opam" -name \*.opam \! -name octez\*-deps.opam\* -print) - - export OPAMYES="${OPAMYES:=true}" ## In another ideal world, this list should be extracted from the pinned @@ -45,7 +41,7 @@ OPAMASSUMEDEPEXTS=true opam install conf-rust # will be intepreted as a string and not as a list of strings leading to # an error. # shellcheck disable=SC2086 -opam install $opams --deps-only --with-test --criteria="-notuptodate,-changed,-removed" +opam install opam/octez-deps.opam --deps-only --criteria="-notuptodate,-changed,-removed" if [ "$1" = "--tps" ]; then opam install caqti-driver-postgresql diff --git a/scripts/install_build_deps.sh b/scripts/install_build_deps.sh index 157806bef64f..6ab267109421 100755 --- a/scripts/install_build_deps.sh +++ b/scripts/install_build_deps.sh @@ -102,7 +102,8 @@ if [ -n "$dev" ]; then # enough (for [ppx_yojson_conv_lib] in particular), so we add a # minimal bound to ensure it won’t be picked by opam. # utop is constrained to avoid reinstalling in all the times. - opam install --yes merlin ometrics.0.2.1 utop.2.9.0 odoc ocp-indent "ocaml-lsp-server>=1.6.1" js_of_ocaml-compiler merge-fmt --criteria="-changed,-removed" + opam install --yes opam/octez-deps.opam opam/octez-dev-deps.opam --deps-only --criteria="-changed,-removed" fi "$script_dir"/install_sapling_parameters.sh + -- GitLab From d65eb9cdd5ba1ea7862f8ce1b0973a319d9517a6 Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Fri, 7 Oct 2022 18:01:40 +0200 Subject: [PATCH 06/11] Build: use octez-deps.opam in update_opam_repo.sh --- scripts/update_opam_repo.sh | 37 +++++-------------------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/scripts/update_opam_repo.sh b/scripts/update_opam_repo.sh index 4ec24d0dcaf1..60d500a084e4 100755 --- a/scripts/update_opam_repo.sh +++ b/scripts/update_opam_repo.sh @@ -49,8 +49,6 @@ src_dir="$(dirname "$script_dir")" . "$script_dir"/version.sh -opams=$(find "$src_dir/vendors" "$src_dir/src" "$src_dir/tezt" "$src_dir/opam" -name \*.opam \! -name octez\*-deps.opam\* -print | LC_COLLATE=C sort -u) - ## Shallow clone of opam repository (requires git protocol version 2) export GIT_WORK_TREE="$tmp_dir" export GIT_DIR="$GIT_WORK_TREE/.git" @@ -60,30 +58,9 @@ git remote add origin https://github.com/ocaml/opam-repository git fetch --depth 1 origin "$full_opam_repository_tag" ## Adding the various tezos packages -packages= -for opam in $opams; do - - file=$(basename $opam) - package=${file%.opam} - packages=$packages,$package.dev - mkdir -p "$tmp_dir"/packages/$package/$package.dev - - ## HACK: For some reason, `opam admin list/filter` do not follow - ## `--with-test/doc` for 'toplevel' package, only for their - ## 'dependencies. We want the exact opposite (like for `opam - ## install`), so we manually remove the tag in the most - ## ugliest-possible way... - - sed -e "s/{ *with-test *}//" \ - -e "s/with-test \& //" \ - -e "s/\& with-test//" \ - -e "s/{ *with-doc *}//" \ - -e "s/with-doc \& //" \ - -e "s/\& with-doc//" \ - $opam > "$tmp_dir"/packages/$package/$package.dev/opam - -done +mkdir -p "$tmp_dir"/packages/octez-deps/octez-deps.dev +cp opam/octez-deps.opam "$tmp_dir"/packages/octez-deps/octez-deps.dev/opam ## Filtering unrequired packages cd $tmp_dir @@ -123,7 +100,7 @@ case $(opam --version) in esac #shellcheck disable=SC2086 OPAMSOLVERTIMEOUT=600 opam admin filter --yes --resolve \ - $packages,ocaml,ocaml-base-compiler,odoc,${opam_depext_dep}ledgerwallet-tezos,caqti-driver-postgresql,js_of_ocaml-lwt,$dummy_pkg + octez-deps,ocaml,ocaml-base-compiler,odoc,${opam_depext_dep}ledgerwallet-tezos,caqti-driver-postgresql,js_of_ocaml-lwt,$dummy_pkg ## - ocaml-base-compiler has to be explicitely listed for the solver ## to not prefer the "variant" `system` of the compiler ## - odoc is used by the CI to generate the doc @@ -139,12 +116,8 @@ for variant in afl flambda fp ; do git checkout packages/ocaml-option-$variant/ocaml-option-$variant.1 done -## Removing the various tezos packages -for opam in $opams; do - file=$(basename $opam) - package=${file%.opam} - rm -r "$tmp_dir"/packages/$package -done +## Removing temporary hacks +rm -r "$tmp_dir"/packages/octez-deps rm -r "$tmp_dir"/packages/$dummy_pkg ## Generating the diff! -- GitLab From 3dd8d7723035d2302678befe27931fa74a406e78 Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Fri, 7 Oct 2022 18:06:19 +0200 Subject: [PATCH 07/11] Build: use octez-dev.opam in opam-check.sh --- scripts/opam-check.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/scripts/opam-check.sh b/scripts/opam-check.sh index c363ceeff1b1..036dfd6ab5bc 100755 --- a/scripts/opam-check.sh +++ b/scripts/opam-check.sh @@ -1,20 +1,17 @@ #!/bin/sh script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")" -src_dir="$(dirname "$script_dir")" . "$script_dir"/version.sh -opams=$(find "$src_dir/vendors" "$src_dir/src" "$src_dir/tezt" "$src_dir/opam" -name \*.opam \! -name octez\*-deps.opam\* -print) - echo "## Checking installed dependencies..." echo -if ! opam install $opams --deps-only --with-test --show-actions | grep "Nothing to do." > /dev/null 2>&1 ; then +if ! opam install opam/octez-deps.opam --deps-only --with-test --show-actions | grep "Nothing to do." > /dev/null 2>&1 ; then echo echo 'Failure! Missing actions:' echo - opam install $opams --deps-only --with-test --show-actions + opam install opam/octez-deps.opam --deps-only --with-test --show-actions echo echo 'Failed! Please read the doc in `./scripts/update_opam_repo.sh` and act accordingly.' echo -- GitLab From 05c1f4142aa85d4edb672cecd9f4b51902228a62 Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Mon, 7 Nov 2022 14:42:48 +0100 Subject: [PATCH 08/11] Manifest: move virtual packages in opam/virtual --- manifest/manifest.ml | 2 +- manifest/manifest.mli | 4 ++-- opam/{ => virtual}/octez-deps.opam | 3 ++- opam/{ => virtual}/octez-dev-deps.opam | 0 scripts/install_build_deps.raw.sh | 2 +- scripts/install_build_deps.sh | 2 +- scripts/opam-check.sh | 4 ++-- scripts/update_opam_repo.sh | 2 +- 8 files changed, 10 insertions(+), 9 deletions(-) rename opam/{ => virtual}/octez-deps.opam (97%) rename opam/{ => virtual}/octez-dev-deps.opam (100%) diff --git a/manifest/manifest.ml b/manifest/manifest.ml index 844357efecd4..cdd1d86584c1 100644 --- a/manifest/manifest.ml +++ b/manifest/manifest.ml @@ -3140,7 +3140,7 @@ let generate_profiles ~default_profile = x_opam_monorepo_opam_provided = []; } in - write ("opam/" ^ profile ^ ".opam") @@ fun fmt -> + write ("opam/virtual/" ^ profile ^ ".opam") @@ fun fmt -> Format.fprintf fmt "# This file was automatically generated, do not edit.@.# Edit file \ diff --git a/manifest/manifest.mli b/manifest/manifest.mli index 06a62e4d3bf2..f24885ac56d9 100644 --- a/manifest/manifest.mli +++ b/manifest/manifest.mli @@ -642,7 +642,7 @@ type with_test = Always | Never | Only_on_64_arch library interface. They are not part of the toplevel module of the library. - [profile]: the name of the profile to which the target belongs. - For each profile, a file [opam/.opam] is generated. + For each profile, a file [opam/virtual/.opam] is generated. This file depends on all external dependencies on which targets that belong to this profile depend on, and contains no build instructions. It is thus a good basis for [opam lock] to generate a [.opam.locked] file. @@ -1051,7 +1051,7 @@ val open_if : ?m:string -> bool -> target -> target more information about profiles. Use [add_dep_to_profile profile dep] to add [dep] as a dependency to the - [opam/profile.opam] file without having to add it as a dependency of an + [opam/virtual/profile.opam] file without having to add it as a dependency of an actual package. *) val add_dep_to_profile : string -> target -> unit diff --git a/opam/octez-deps.opam b/opam/virtual/octez-deps.opam similarity index 97% rename from opam/octez-deps.opam rename to opam/virtual/octez-deps.opam index 8406d0cdef3e..86f909ebbc40 100644 --- a/opam/octez-deps.opam +++ b/opam/virtual/octez-deps.opam @@ -27,6 +27,7 @@ depends: [ "conf-libev" "conf-rust" "ctypes" { >= "0.18.0" } + "ctypes-foreign" { >= "0.18.0" } "ctypes_stubs_js" "data-encoding" { >= "0.6" & < "0.7" } "digestif" { >= "0.7.3" } @@ -92,7 +93,7 @@ depends: [ "tezos-bls12-381-polynomial" { >= "0.1.0" } "tezos-plompiler" { >= "0.1.2" } "tezos-plonk" { >= "0.1.2" } - "tezos-rust-libs" { = "1.1" } + "tezos-rust-libs" { = "1.2" } "tls" { >= "0.10" } "uri" { >= "2.2.0" } "uutf" diff --git a/opam/octez-dev-deps.opam b/opam/virtual/octez-dev-deps.opam similarity index 100% rename from opam/octez-dev-deps.opam rename to opam/virtual/octez-dev-deps.opam diff --git a/scripts/install_build_deps.raw.sh b/scripts/install_build_deps.raw.sh index 74087cc33ed2..20aedc4eee63 100755 --- a/scripts/install_build_deps.raw.sh +++ b/scripts/install_build_deps.raw.sh @@ -41,7 +41,7 @@ OPAMASSUMEDEPEXTS=true opam install conf-rust # will be intepreted as a string and not as a list of strings leading to # an error. # shellcheck disable=SC2086 -opam install opam/octez-deps.opam --deps-only --criteria="-notuptodate,-changed,-removed" +opam install opam/virtual/octez-deps.opam --deps-only --criteria="-notuptodate,-changed,-removed" if [ "$1" = "--tps" ]; then opam install caqti-driver-postgresql diff --git a/scripts/install_build_deps.sh b/scripts/install_build_deps.sh index 6ab267109421..9de6275ffc25 100755 --- a/scripts/install_build_deps.sh +++ b/scripts/install_build_deps.sh @@ -102,7 +102,7 @@ if [ -n "$dev" ]; then # enough (for [ppx_yojson_conv_lib] in particular), so we add a # minimal bound to ensure it won’t be picked by opam. # utop is constrained to avoid reinstalling in all the times. - opam install --yes opam/octez-deps.opam opam/octez-dev-deps.opam --deps-only --criteria="-changed,-removed" + opam install --yes opam/virtual/octez-deps.opam opam/virtual/octez-dev-deps.opam --deps-only --criteria="-changed,-removed" fi "$script_dir"/install_sapling_parameters.sh diff --git a/scripts/opam-check.sh b/scripts/opam-check.sh index 036dfd6ab5bc..e4b7a0652bd6 100755 --- a/scripts/opam-check.sh +++ b/scripts/opam-check.sh @@ -7,11 +7,11 @@ script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")" echo "## Checking installed dependencies..." echo -if ! opam install opam/octez-deps.opam --deps-only --with-test --show-actions | grep "Nothing to do." > /dev/null 2>&1 ; then +if ! opam install opam/virtual/octez-deps.opam --deps-only --with-test --show-actions | grep "Nothing to do." > /dev/null 2>&1 ; then echo echo 'Failure! Missing actions:' echo - opam install opam/octez-deps.opam --deps-only --with-test --show-actions + opam install opam/virtual/octez-deps.opam --deps-only --with-test --show-actions echo echo 'Failed! Please read the doc in `./scripts/update_opam_repo.sh` and act accordingly.' echo diff --git a/scripts/update_opam_repo.sh b/scripts/update_opam_repo.sh index 60d500a084e4..80949c961753 100755 --- a/scripts/update_opam_repo.sh +++ b/scripts/update_opam_repo.sh @@ -60,7 +60,7 @@ git fetch --depth 1 origin "$full_opam_repository_tag" ## Adding the various tezos packages mkdir -p "$tmp_dir"/packages/octez-deps/octez-deps.dev -cp opam/octez-deps.opam "$tmp_dir"/packages/octez-deps/octez-deps.dev/opam +cp opam/virtual/octez-deps.opam "$tmp_dir"/packages/octez-deps/octez-deps.dev/opam ## Filtering unrequired packages cd $tmp_dir -- GitLab From 69cb5f4919066c852897c925b33395b94b539076 Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Mon, 7 Nov 2022 16:05:31 +0100 Subject: [PATCH 09/11] Manifest: add and use pp_do_not_edit --- .gitlab/ci/opam-ci.yml | 2 +- dune-project | 2 +- dune-workspace | 2 +- manifest/manifest.ml | 46 ++++++++++++++++++------------------------ 4 files changed, 23 insertions(+), 29 deletions(-) diff --git a/.gitlab/ci/opam-ci.yml b/.gitlab/ci/opam-ci.yml index 5e31af2dfb19..4a3039b1f174 100644 --- a/.gitlab/ci/opam-ci.yml +++ b/.gitlab/ci/opam-ci.yml @@ -1,5 +1,5 @@ # This file was automatically generated, do not edit. -# Edit file manifest/manifest.ml instead. +# Edit file manifest/main.ml instead. # Ignoring package internal-devtools, it only contains tests or private targets diff --git a/dune-project b/dune-project index c7ebb8021228..e01443e0bf35 100644 --- a/dune-project +++ b/dune-project @@ -216,4 +216,4 @@ (package (name tezt-self-tests)) (package (name tezt-tezos)) ; This file was automatically generated, do not edit. -; Edit file manifest/manifest.ml instead. +; Edit file manifest/main.ml instead. diff --git a/dune-workspace b/dune-workspace index 5fc118bee8ce..160f6a6537e6 100644 --- a/dune-workspace +++ b/dune-workspace @@ -15,4 +15,4 @@ (context (default (paths (ORIGINAL_PATH :standard)))) ; This file was automatically generated, do not edit. -; Edit file manifest/manifest.ml instead. +; Edit file manifest/main.ml instead. diff --git a/manifest/manifest.ml b/manifest/manifest.ml index cdd1d86584c1..6269584f777f 100644 --- a/manifest/manifest.ml +++ b/manifest/manifest.ml @@ -41,6 +41,14 @@ let error fmt = Format.eprintf "Error: %s" s) fmt +let pp_do_not_edit ~comment_start fmt () = + Format.fprintf + fmt + "%s This file was automatically generated, do not edit.@.%s Edit file \ + manifest/main.ml instead.@." + comment_start + comment_start + (*****************************************************************************) (* DUNE *) (*****************************************************************************) @@ -1843,10 +1851,10 @@ let profile_deps : Target.t list String_map.t ref = ref String_map.empty let add_dep_to_profile profile = function | None -> () | Some dep -> - let old = - String_map.find_opt profile !profile_deps |> Option.value ~default:[] - in - profile_deps := String_map.add profile (dep :: old) !profile_deps + let old = + String_map.find_opt profile !profile_deps |> Option.value ~default:[] + in + profile_deps := String_map.add profile (dep :: old) !profile_deps (*****************************************************************************) (* GENERATOR *) @@ -2153,10 +2161,7 @@ let generate_dune_files () = in let dunes = List.map generate_dune internals in write (path // "dune") @@ fun fmt -> - Format.fprintf - fmt - "; This file was automatically generated, do not edit.@.; Edit file \ - manifest/main.ml instead.@.@." ; + Format.fprintf fmt "%a@." (pp_do_not_edit ~comment_start:";") () ; let env = Env.empty in let env = match node_preload with @@ -2459,12 +2464,8 @@ let generate_opam_files () = Target.iter_internal_by_opam @@ fun package internals -> let opam = generate_opam package internals in write ("opam/" ^ package ^ ".opam") @@ fun fmt -> - Format.fprintf - fmt - "# This file was automatically generated, do not edit.@.# Edit file \ - manifest/main.ml instead.@.%a" - Opam.pp - opam + pp_do_not_edit ~comment_start:"#" fmt () ; + Opam.pp fmt opam let generate_opam_files_for_release packages_dir release = Target.iter_internal_by_opam @@ fun package internal_pkgs -> @@ -2499,8 +2500,7 @@ let generate_dune_project_files () = in let allow_empty = if not has_public_target then "(allow_empty)" else "" in Format.fprintf fmt "(package (name %s)%s)@." package allow_empty ) ; - Format.fprintf fmt "; This file was automatically generated, do not edit.@." ; - Format.fprintf fmt "; Edit file manifest/manifest.ml instead.@." + pp_do_not_edit ~comment_start:";" fmt () let generate_package_json_file () = let l = ref [] in @@ -2622,8 +2622,7 @@ let generate_workspace env dune = pp_dune fmt Dune.[Env.to_s_expr env] ; pp_dune fmt dune ; Format.fprintf fmt "@." ; - Format.fprintf fmt "; This file was automatically generated, do not edit.@." ; - Format.fprintf fmt "; Edit file manifest/manifest.ml instead.@." + pp_do_not_edit ~comment_start:";" fmt () let find_opam_and_dune_files = let root = "." in @@ -2960,8 +2959,7 @@ let generate_opam_ci () = let (_ : int) = compute_rank package_name in ()) ; write ".gitlab/ci/opam-ci.yml" @@ fun fmt -> - Format.fprintf fmt "# This file was automatically generated, do not edit.@." ; - Format.fprintf fmt "# Edit file manifest/manifest.ml instead.@." ; + pp_do_not_edit ~comment_start:"#" fmt () ; (* Decide whether an opam package should be tested in the CI or not. If not, remove it from [rank] so that we do not consider it in the later stage. *) @@ -3141,12 +3139,8 @@ let generate_profiles ~default_profile = } in write ("opam/virtual/" ^ profile ^ ".opam") @@ fun fmt -> - Format.fprintf - fmt - "# This file was automatically generated, do not edit.@.# Edit file \ - manifest/main.ml instead.@.%a" - Opam.pp - opam + pp_do_not_edit ~comment_start:"#" fmt () ; + Opam.pp fmt opam in let merged = let merge _profile m1 m2 = -- GitLab From b714dbebe6a92a478aa2970df9424be79fe8c930 Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Tue, 8 Nov 2022 10:57:28 +0100 Subject: [PATCH 10/11] Manifest: improve description of profile packages --- manifest/manifest.ml | 6 ++++-- opam/virtual/octez-deps.opam | 2 +- opam/virtual/octez-dev-deps.opam | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/manifest/manifest.ml b/manifest/manifest.ml index 6269584f777f..8a0671449af0 100644 --- a/manifest/manifest.ml +++ b/manifest/manifest.ml @@ -3133,8 +3133,10 @@ let generate_profiles ~default_profile = url = None; description = Some - "Install this package to install all dependencies needed to build \ - Octez."; + (Printf.sprintf + "Install this package to install all dependencies needed to \ + build the subset of Octez denoted by profile %s." + profile); x_opam_monorepo_opam_provided = []; } in diff --git a/opam/virtual/octez-deps.opam b/opam/virtual/octez-deps.opam index 86f909ebbc40..1217c558c49f 100644 --- a/opam/virtual/octez-deps.opam +++ b/opam/virtual/octez-deps.opam @@ -106,4 +106,4 @@ conflicts: [ ] build: [] synopsis: "Virtual package depending on Octez dependencies (profile: octez-deps)" -description: "Install this package to install all dependencies needed to build Octez." +description: "Install this package to install all dependencies needed to build the subset of Octez denoted by profile octez-deps." diff --git a/opam/virtual/octez-dev-deps.opam b/opam/virtual/octez-dev-deps.opam index e00161a895f1..fcbbe1341037 100644 --- a/opam/virtual/octez-dev-deps.opam +++ b/opam/virtual/octez-dev-deps.opam @@ -18,4 +18,4 @@ depends: [ ] build: [] synopsis: "Virtual package depending on Octez dependencies (profile: octez-dev-deps)" -description: "Install this package to install all dependencies needed to build Octez." +description: "Install this package to install all dependencies needed to build the subset of Octez denoted by profile octez-dev-deps." -- GitLab From 8e7e2cedb8afe068532e3c3e649771aec54689b8 Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Tue, 29 Nov 2022 10:31:24 +0100 Subject: [PATCH 11/11] Manifest: generate --- opam/virtual/octez-deps.opam | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/opam/virtual/octez-deps.opam b/opam/virtual/octez-deps.opam index 1217c558c49f..a229aa732d5d 100644 --- a/opam/virtual/octez-deps.opam +++ b/opam/virtual/octez-deps.opam @@ -27,7 +27,6 @@ depends: [ "conf-libev" "conf-rust" "ctypes" { >= "0.18.0" } - "ctypes-foreign" { >= "0.18.0" } "ctypes_stubs_js" "data-encoding" { >= "0.6" & < "0.7" } "digestif" { >= "0.7.3" } @@ -42,8 +41,8 @@ depends: [ "integers" "integers_stubs_js" "ipaddr" { >= "5.0.0" & < "6.0.0" } - "irmin" { >= "3.4.0" & < "3.5.0" } - "irmin-pack" { >= "3.4.0" & < "3.5.0" } + "irmin" { >= "3.4.3" & < "3.5.0" } + "irmin-pack" { >= "3.4.3" & < "3.5.0" } "js_of_ocaml" { >= "4.0.0" & < "5.0.0" } "js_of_ocaml-lwt" { >= "4.0.0" & < "5.0.0" } "json-data-encoding" { >= "0.11" & < "0.13" } @@ -85,15 +84,15 @@ depends: [ "resto-cohttp-self-serving-client" { >= "1.0" } "resto-cohttp-server" { >= "1.0" } "resto-directory" { >= "1.0" } - "ringo" { >= "0.9" } + "ringo" { >= "0.9" & < "1.0.0" } "ringo-lwt" { >= "0.9" } "secp256k1-internal" { >= "0.3.0" } "tar" "tar-unix" { = "2.0.0" } - "tezos-bls12-381-polynomial" { >= "0.1.0" } + "tezos-bls12-381-polynomial" { >= "0.1.3" } "tezos-plompiler" { >= "0.1.2" } "tezos-plonk" { >= "0.1.2" } - "tezos-rust-libs" { = "1.2" } + "tezos-rust-libs" { = "1.1" } "tls" { >= "0.10" } "uri" { >= "2.2.0" } "uutf" -- GitLab