-
Notifications
You must be signed in to change notification settings - Fork 1.1k
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
[new release] mirage (2 packages) (4.5.0) #25651
Merged
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
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)
@mseri I think this is ready this time. I'll quickly double-check the revdeps later today |
I don't see anything unexpected in the revdeps. Feel free to merge if you are fine with what you see |
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.
The MirageOS library operating system
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 moduledependencies 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 forcustomizing deployments without altering the dependencies of the
unikernels. (refactor: remove some complexity about handling of required keys mirage/mirage#1449, refactor: remove unused arguments from Key.context mirage/mirage#1450, Move runtime keys to the `Run stage mirage/mirage#1451, Keep a single way to define runtime keys (using Cmdliner) mirage/mirage#1455 @samoht, review by @hannesm)
API changes:
~stage
parameter forKey.Arg.info
.Key
now define command-line arguments for the configuration tool.Runtime_arg
to define command-line argumentsfor the unikernel.
'Both
, users are now expected to createtwo 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
):target (hvt, xen, etc.) and whether to use DHCP or a fixed IP address.
specific target runtime environments and dedicated network and
storage stacks.
repositories like Docker Hub or https://builds.robur.coop/.
Intended use of command-line runtime arguments (values of type
a runtime_arg
):configuration, like IP addresses, secrets, block device names,
etc., post downloading of binaries.
key_gen.ml
is not generated anymore, so users cannot refer toKey_gen.<key_name>
directy.runtime_arg
andregistered on the device (using
~runtime_args
). The value of thatargument will then be passed as an extra parameter of the
connect
function of that device.
instance,
Key_gen.target
has been removed.Code migration:
becomes:
becomes:
error (bump min ocaml-solo5 to avoid fast memory usage error mirage/mirage#1507, @palainp)
functoria
andfunctoria-runtime
are removed. Therespectives libraries became
mirage.functoria
andmirage-runtime.functoria
(Remove functoria and functoria-runtime packages mirage/mirage#1509, @samoht)
Mirage.keys
is renamed toMirage.runtime_args
(Rename DSL.keys to DSL.runtime_args mirage/mirage#1506, @samoht)Mirage.foreign. Use
Mirage.main` instead (Remove DSL.foreign mirage/mirage#1505, @samoht)Mirage.main
does not take a?extra_deps
parameter anymore(Remove DSL.foreign mirage/mirage#1505, @samoht)
Mirage.connect
functions passed to create devices(with
Mirage.impl
) now take values of type'a Mirage.code
insteadof
string
. Value of typecode
are created using a newMirage.code
function, that takes
~pos:__POS__
as parameter. This is used to generatebetter locations in the generated code, leading to better error messages
(Add line locations to device connect functions mirage/mirage#1504, @samoht)
mirage describe
output (Fixmirage describe
display bug mirage/mirage#1446 @samoht), add test (Add a test formirage describe
mirage/mirage#1458 @samoht)Mirage.register
no longer have?packages
and?keys
arguments(Mirage.register and Functoria.foreign/main duplicated arguments mirage/mirage#1433, Slim register function arguments mirage/mirage#1434 @hannesm)
mirage build
subcommand, usedune build
in Makefile(Deprecate build mirage/mirage#1404 @hannesm), put
--profile release
in Makefile instead ofdune-workspace (Move profile release to makefile mirage/mirage#1470 @hannesm)