New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor: remove some complexity about handling of required keys #1449
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
In practice none is using those required keys anyway.
The failure in the CI should be addressed by mirage/mirage-skeleton#371 and mirage/mirage-skeleton#372 |
samoht
added a commit
to samoht/opam-repository
that referenced
this pull request
Apr 9, 2024
CHANGES: - This release introduces a significant change in the Mirage tool by splitting the definition of command-line arguments used at configure-time and runtime. Command-line arguments used in the configure script (also called 'configuration keys' and defined in the `Key` module) are essential during the setup of module dependencies for the unikernel, allowing for a specialized production of a unikernel for a given target runtime environment. On the other hand, command-line arguments that the unikernel can use at runtime (defined in the `Runtime_arg` module) are useful for customizing deployments without altering the dependencies of the unikernels. (mirage/mirage#1449, mirage/mirage#1450, mirage/mirage#1451, mirage/mirage#1455 @samoht, review by @hannesm) * API changes: - There is no more `~stage` parameter for `Key.Arg.info`. - `Key` now define command-line arguments for the configuration tool. - There is a new module `Runtime_arg` to define command-line arguments for the unikernel. - As there are no more keys type `'Both`, users are now expected to create two separated keys in that case (one for configure-time, one for runtime) or decide if the key is useful at runtime of configure-time. * Intended use of configuration keys (values of type `'a key`): - Used to set up module dependencies of the unikernel, such as the target (hvt, xen, etc.) and whether to use DHCP or a fixed IP address. - Enable the production of specialized unikernels suitable for specific target runtime environments and dedicated network and storage stacks. - Similar keys will produce reproducible binaries to be uploaded to artifact repositories like Docker Hub or https://builds.robur.coop/. * Intended use of command-line runtime arguments (values of type `a runtime_arg`): - Allow users to customize deployments by changing device configuration, like IP addresses, secrets, block device names, etc., post downloading of binaries. - These keys don’t alter the dependencies of the unikernels. - A runtime keys is just a reference to a normal Cmdliner term. * `key_gen.ml` is not generated anymore, so users cannot refer to `Key_gen.<key_name>` directy. - Any runtime argument has to be declared (using `runtime_arg` and registered on the device (using `~runtime_args`). The value of that argument will then be passed as an extra parameter of the `connect` function of that device. - Configuration keys are not available at runtime anymore. For instance, `Key_gen.target` has been removed. * Code migration: ```ocaml (* in config.ml *) let key = let doc = Key.Arg.info ~doc:"A Key." ~stage:`Run [ "key" ] in Key.(create "key" Arg.(opt_all ~stage:`Run string doc)) ``` becomes: ```ocaml (* in unikernel.ml *) open Cmdliner let key = let doc = Arg.info ~doc:"A Key." [ "key" ] in Arg.(value & opt_all string [] doc) ``` ```ocaml (* in unikernel.ml *) let start _ = let key = Key_gen.hello () in ... ``` becomes: ```ocaml (* in config.ml *) let hello = runtime_arg ~pos:__POS__ "Unikernel.hello" let main = main ~runtime_args:[hello] ... ``` ``` (* in unikernel.ml *) let hello = let open Cmdliner in let doc = Arg.info ~doc:"How to say hello." [ "hello" ] in Arg.(value & opt string "Hello World!" doc) let start _ hello = ... ``` - bump minimal ocaml-solo5 version bound to 0.8.2 to avoid fast memory usage error (mirage/mirage#1507, @palainp) - BREAKING: the packages `functoria` and `functoria-runtime` are removed. The respectives libraries became `mirage.functoria` and `mirage-runtime.functoria` (mirage/mirage#1509, @samoht) - BREAKING: `Mirage.keys` is renamed to `Mirage.runtime_args` (mirage/mirage#1506, @samoht) - BREAKING: remove `Mirage.foreign. Use `Mirage.main` instead (mirage/mirage#1505, @samoht) - BREAKING: `Mirage.main` does not take a `?extra_deps` parameter anymore (mirage/mirage#1505, @samoht) - BREAKING: the `Mirage.connect` functions passed to create devices (with `Mirage.impl`) now take values of type `'a Mirage.code` instead of `string`. Value of type `code` are created using a new `Mirage.code` function, that takes `~pos:__POS__` as parameter. This is used to generate better locations in the generated code, leading to better error messages (mirage/mirage#1504, @samoht) - BUGFIX: fix `mirage describe` output (mirage/mirage#1446 @samoht), add test (mirage/mirage#1458 @samoht) - Remove ipaddr from runtime (mirage/mirage#1437 @samoht, mirage/mirage#1465 @hannesm) - BREAKING: `Mirage.register` no longer have `?packages` and `?keys` arguments (mirage/mirage#1433, mirage/mirage#1434 @hannesm) - BREAKING: Remove deprecated bindings and types (mirage/mirage#1461 @hannesm) - BREAKING: Remove `mirage build` subcommand, use `dune build` in Makefile (mirage/mirage#1404 @hannesm), put `--profile release` in Makefile instead of dune-workspace (mirage/mirage#1470 @hannesm) - Increase dune version to 2.9 in generated dune-project (mirage/mirage#1443 @samoht)
samoht
added a commit
to samoht/opam-repository
that referenced
this pull request
Apr 10, 2024
CHANGES: - This release introduces a significant change in the Mirage tool by splitting the definition of command-line arguments used at configure-time and runtime. Command-line arguments used in the configure script (also called 'configuration keys' and defined in the `Key` module) are essential during the setup of module dependencies for the unikernel, allowing for a specialized production of a unikernel for a given target runtime environment. On the other hand, command-line arguments that the unikernel can use at runtime (defined in the `Runtime_arg` module) are useful for customizing deployments without altering the dependencies of the unikernels. (mirage/mirage#1449, mirage/mirage#1450, mirage/mirage#1451, mirage/mirage#1455 @samoht, review by @hannesm) * API changes: - There is no more `~stage` parameter for `Key.Arg.info`. - `Key` now define command-line arguments for the configuration tool. - There is a new module `Runtime_arg` to define command-line arguments for the unikernel. - As there are no more keys type `'Both`, users are now expected to create two separated keys in that case (one for configure-time, one for runtime) or decide if the key is useful at runtime of configure-time. * Intended use of configuration keys (values of type `'a key`): - Used to set up module dependencies of the unikernel, such as the target (hvt, xen, etc.) and whether to use DHCP or a fixed IP address. - Enable the production of specialized unikernels suitable for specific target runtime environments and dedicated network and storage stacks. - Similar keys will produce reproducible binaries to be uploaded to artifact repositories like Docker Hub or https://builds.robur.coop/. * Intended use of command-line runtime arguments (values of type `a runtime_arg`): - Allow users to customize deployments by changing device configuration, like IP addresses, secrets, block device names, etc., post downloading of binaries. - These keys don’t alter the dependencies of the unikernels. - A runtime keys is just a reference to a normal Cmdliner term. * `key_gen.ml` is not generated anymore, so users cannot refer to `Key_gen.<key_name>` directy. - Any runtime argument has to be declared (using `runtime_arg` and registered on the device (using `~runtime_args`). The value of that argument will then be passed as an extra parameter of the `connect` function of that device. - Configuration keys are not available at runtime anymore. For instance, `Key_gen.target` has been removed. * Code migration: ```ocaml (* in config.ml *) let key = let doc = Key.Arg.info ~doc:"A Key." ~stage:`Run [ "key" ] in Key.(create "key" Arg.(opt_all ~stage:`Run string doc)) ``` becomes: ```ocaml (* in unikernel.ml *) open Cmdliner let key = let doc = Arg.info ~doc:"A Key." [ "key" ] in Arg.(value & opt_all string [] doc) ``` ```ocaml (* in unikernel.ml *) let start _ = let key = Key_gen.hello () in ... ``` becomes: ```ocaml (* in config.ml *) let hello = runtime_arg ~pos:__POS__ "Unikernel.hello" let main = main ~runtime_args:[hello] ... ``` ``` (* in unikernel.ml *) let hello = let open Cmdliner in let doc = Arg.info ~doc:"How to say hello." [ "hello" ] in Arg.(value & opt string "Hello World!" doc) let start _ hello = ... ``` - bump minimal ocaml-solo5 version bound to 0.8.2 to avoid fast memory usage error (mirage/mirage#1507, @palainp) - BREAKING: the packages `functoria` and `functoria-runtime` are removed. The respectives libraries became `mirage.functoria` and `mirage-runtime.functoria` (mirage/mirage#1509, @samoht) - BREAKING: `Mirage.keys` is renamed to `Mirage.runtime_args` (mirage/mirage#1506, @samoht) - BREAKING: remove `Mirage.foreign. Use `Mirage.main` instead (mirage/mirage#1505, @samoht) - BREAKING: `Mirage.main` does not take a `?extra_deps` parameter anymore (mirage/mirage#1505, @samoht) - BREAKING: the `Mirage.connect` functions passed to create devices (with `Mirage.impl`) now take values of type `'a Mirage.code` instead of `string`. Value of type `code` are created using a new `Mirage.code` function, that takes `~pos:__POS__` as parameter. This is used to generate better locations in the generated code, leading to better error messages (mirage/mirage#1504, @samoht) - BUGFIX: fix `mirage describe` output (mirage/mirage#1446 @samoht), add test (mirage/mirage#1458 @samoht) - Remove ipaddr from runtime (mirage/mirage#1437 @samoht, mirage/mirage#1465 @hannesm) - BREAKING: `Mirage.register` no longer have `?packages` and `?keys` arguments (mirage/mirage#1433, mirage/mirage#1434 @hannesm) - BREAKING: Remove deprecated bindings and types (mirage/mirage#1461 @hannesm) - BREAKING: Remove `mirage build` subcommand, use `dune build` in Makefile (mirage/mirage#1404 @hannesm), put `--profile release` in Makefile instead of dune-workspace (mirage/mirage#1470 @hannesm) - Increase dune version to 2.9 in generated dune-project (mirage/mirage#1443 @samoht)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In practice none is using those required keys anyway.