Fix rpc not transferring promotion warnings to the client#12604
Fix rpc not transferring promotion warnings to the client#12604ElectreAAS merged 3 commits intoocaml:mainfrom
Conversation
| |> List.concat_map ~f:(fun (dst, srcs) -> | ||
| List.map srcs ~f:(fun (src, staging) -> { File.src; staging; dst })) | ||
| in | ||
| let sorted_missing = List.rev missing in |
There was a problem hiding this comment.
group_by_targets will sort all files, but the fold above reverses the list of missing files.
The absence of this reverse is what had lead to a swap in test-cases/promote/old-tests.t that was present in this PR before I noticed
There was a problem hiding this comment.
Can you add a CR to do this all in a single pass over the files. I don't want to hold up this PR any longer since this isn't code you introduced, but it would be good to get rid of the fragile reversal and needless set conversion at some point.
7346050 to
0d45f52
Compare
2b5ad52 to
c6e4024
Compare
|
I just rebased on main. |
rgrinberg
left a comment
There was a problem hiding this comment.
Haven't looked too closely, but everything seems sensible at first glance.
| dump_db db | ||
| ;; | ||
|
|
||
| (* Returns the list of files that were in [files_to_promote] |
There was a problem hiding this comment.
Thanks for adding the comments!
69ba843 to
3ad52a5
Compare
|
I think it would be better to split the two changes here. I'm fairly certain the promotion database clearing bug has been solved here, so I think that can be reviewed and merged quickly. The warning forwarding however has some potential issues and I think need a more careful review. |
6c4c3b8 to
2bd4cfe
Compare
|
I just did a pass, moving the warning state from a variant in I tested locally and it doesn't seem to be the fold problem mentionned above (#12604 (comment))... |
|
@ElectreAAS in that case it sounds like there is some racy behaviour. Could you intersperse some |
2bd4cfe to
b9e2d95
Compare
cce0ebf to
4c08842
Compare
|
The fact that it looked like we solved the promotion database clearing bug was due to weird races happening. I changed the test to make it clear that we are testing the warnings, not this other behaviour. |
04c7b19 to
80eb603
Compare
|
After some considerations, we decided that the alert parsing code didn't need to be in this PR. |
|
src/dune_rpc_impl/diagnostics.ml
Outdated
| (* CR-someday jeremiedimino: Use [Report_error.get_user_message] here. *) | ||
| User_message.make [ Pp.text (Printexc.to_string e.exn) ], [] | ||
| | `Diagnostic { Compound_user_error.main = message; related } -> message, related | ||
| User_message.make [ Pp.text (Printexc.to_string e.exn) ], [], Some Diagnostic.Error |
There was a problem hiding this comment.
Is that comment still relevant, I wonder?
There was a problem hiding this comment.
given that get_user_message doesn't exist anymore, I'm going to assume that no.
Some answers might be found in #2349, but it's so old and long that github struggles to display anything in the changes :(
bc2ec9f to
2f985e6
Compare
| ;; | ||
|
|
||
| let%expect_test "warning detection" = | ||
| (* Non-fatal warnings aren't transferred to the RPC client. *) |
2f985e6 to
7a86555
Compare
…rget Signed-off-by: Ambre Austen Suhamy <ambre@tarides.com>
7a86555 to
ae31dc3
Compare
Signed-off-by: Ambre Austen Suhamy <ambre@tarides.com>
Signed-off-by: Ambre Austen Suhamy <ambre@tarides.com>
ae31dc3 to
090dcdb
Compare
Fixes ocaml#12578 --------- Signed-off-by: Ambre Austen Suhamy <ambre@tarides.com>
CHANGES: ### Fixed - `Dyn.to_string` now uses a smarter way to convert floats. This ensures that floats are printed with enough precision to round-trip and are valid OCaml lexemes. (ocaml/dune#12982, fixes ocaml/dune#12980, @Alizter) - Fix `dune install --prefix` failing with relative paths outside the workspace like `../foo` (ocaml/dune#12993, fixes ocaml/dune#12241, @benodiwal) - Delete sandboxes with broken permissions (ocaml/dune#13511, @rgrinberg) - Fix compiling Menhir parsers that refer to sibling modules within a subdirectory of `(include_subdirs qualified)`. (ocaml/dune#13118, fixes ocaml/dune#11119, @anmonteiro) - Fixed the dependency specification of C stubs, which could result in C stubs not getting rebuilt when needed (which could in turn lead to segmentation faults and other hard-to-track bugs). (ocaml/dune#13652, fixes ocaml/dune#13651, @nojb) - Fix rpc not transferring promotion warnings to the client (ocaml/dune#12604, fixes ocaml/dune#12578, @ElectreAAS) - Fix issue where `dune exec -w` was unable to kill running programs on rebuild. (ocaml/dune#12360, fixes ocaml/dune#12323, @Alizter) - Resolve context and workspace binaries introduced by the respective `(env (binaries ..))` stanzas. (ocaml/dune#12952, fixes ocaml/dune#6220, @anmonteiro) - Fix `diff` promotions originating from sandboxed rules. Previously, they would be completely ignored as the sandbox with the promoted file would be destroyed if the promotion fired (ocaml/dune#13520, @rgrinberg) - Fix failure to digest installed directory targets, allowing them to be used as dependencies to other rules. (ocaml/dune#13045, @anmonteiro) - Fix handling of `(select ..)` field when used with `(include_subdirs ..)`. `(select <path> from ..)` modules now parse `path` as a relative path starting from the module group root (ocaml/dune#13175, fixes ocaml/dune#4383, ocaml/dune#12450, @anmonteiro) - Fix dune trying to kill processes that were already reaped due to race conditions (ocaml/dune#13245, @rgrinberg) - Add `O_CLOEXEC` to all files used for stdin/stdout/stderr (ocaml/dune#13385, @rgrinberg) - Fix `$ dune promote dir/foo` when `dir` does not exist (ocaml/dune#13493, @rgrinberg) - Fix `(select ..)` field evaluation when a transitive library has optional dependencies (fixes ocaml/dune#13299, ocaml/dune#13389, @anmonteiro) - Fix sandboxed builds of `library` stanzas that set `(stdlib (modules_before_stdlib ..))` (ocaml/dune#13624, @anmonteiro) - Fixed non-build caches not following `$DUNE_CACHE_ROOT` and instead only relying on `$XDG_CACHE_HOME`. This means the normal build cache moves: `$DUNE_CACHE_ROOT -> $DUNE_CACHE_ROOT/db` (no changes if that variable was unset). Affected users can prevent a full cache invalidation by moving previous contents: `cd $DUNE_CACHE_ROOT; mkdir db; mv <contents of directory> db`. (ocaml/dune#11612, fixes ocaml/dune#11584, @ElectreAAS) - `$ dune promotion list` writes output to stdout rather than stderr (ocaml/dune#13462) - Improve handling of empty files in the `diff` action. These are now correctly distinguished from *empty* files. (ocaml/dune#13696, @rgrinberg) - Pass `/dev/null` to `--diff-command` instead of non-existent files (ocaml/dune#13696, @rgrinberg) - Fix failure when multiple `rocq.extraction` stanzas existing in a directory (ocaml/dune#13531, fixes ocaml/dune#8042, @rlepigre-skylabs-ai) - Print `$ dune promotion show` output to stdout rather than stderr (ocaml/dune#13481, @rgrinberg) - Fix deadlock in the `memo` library in the presence of dependency cycles (ocaml/dune#13625, @anmonteiro) - Fix promotions that modify a directory into a file (ocaml/dune#13516, fixes ocaml/dune#4067, @rgrinberg) - Fix installation of implementations of virtual libraries. This failed when the implementation had no private modules, but the virtual library did (ocaml/dune#10635, @rgrinberg) - Respect the `(dir ..)` field on packages when setting up cram tests (ocaml/dune#13581, @rgrinberg) ### Added - Add support for generating `.cms` files using oxcaml and adding `.cms` or `.cmt` files as compilation dependencies (ocaml/dune#13397, @spiessimon) - Add trace events for custom actions (ocaml/dune#13265, @rgrinberg) - Allow enabling extensions with `(using ..)` in `dune-workspace` files (ocaml/dune#13395, @spiessimon) - Add sandbox extraction trace event (ocaml/dune#13544, @rgrinberg) - Add the initial cwd to the first config event (ocaml/dune#13026, @rgrinberg) - Dune produces trace events in `DUNE_ACTION_TRACE_DIR` if this variable is set. (ocaml/dune#13302, @rgrinberg) - Add file watching events to the trace file (ocaml/dune#13038, @rgrinberg) - Introduce the `$ dune trace cat` subcommand to view the trace file. (ocaml/dune#13055, @rgrinberg) - Add diagnostic events to the trace. (ocaml/dune#13041, @rgrinberg) - Add `DUNE_JOBS` environment variable for controlling concurrency of Dune from environment. The `INSIDE_DUNE` variable also now no longer controls concurrency (ocaml/dune#12800, @Alizter) - Support for Rocq expected output tests (ocaml/dune#13632, @rlepigre-skylabs-ai) - Add `rusage` information to completed processes in the trace (@rgrinberg, ocaml/dune#13241) - Add process start events to the trace (ocaml/dune#13261, rgrinberg) - Generate odoc documentation in markdown using the `@doc-markdown` alias (ocaml/dune#12581, @davesnx) - Add timing information for every command executed by cram (ocaml/dune#13092, @rgrinberg) - Add the workspace root to the config trace event (ocaml/dune#12922, @rgrinberg) - Introduce the `dune-action-trace` library. This public library is to be used by custom actions to emit trace events while executed as part of a dune build. The trace events emitted through this library will be incorporated into dune's own trace (ocaml/dune#13348, @rgrinberg) - Add `dune-find-dominating` to `dune.el`, a command to find the dominating dune file. (ocaml/dune#12696, @arvidj) - Add a `--no-recursive` flag to `$ dune describe workspace` (ocaml/dune#13590, @rgrinberg) - Trace events for files written directly by dune (ocaml/dune#13618, @rgrinberg) - Allow expansion of special forms like `(:include ..)` and `%{read-lines:..}` in the `modules` specification for the `ocamllex`, `ocamlyacc` and `menhir` stanzas. (ocaml/dune#13105, ocaml/dune#13135, ocaml/dune#13157, @anmonteiro) - Add a trace event for snapshotting the sandbox (ocaml/dune#13541, @rgrinberg) - Add signal send and receive events to the trace (ocaml/dune#13193, @rgrinberg) - Emit final trace event before exiting. (ocaml/dune#13018, @rgrinberg) - `dune runtest` can now run individual test executables from `(tests)` stanzas and inline tests from `(library (inline_tests))` stanzas by providing their source files as arguments. (ocaml/dune#13064, fixes ocaml/dune#870, @Alizter) - Add a `shell` field to the cram stanza. This field allows customizing the shell to be `bash` rather than `sh` (ocaml/dune#13083, @haochenx) ### Changed - Start sandboxing the execution of tests defined with the `test` and `tests` stanzas (ocaml/dune#13510, ocaml/dune#13617, @rgrinberg) - Disabled cram tests can now be run explicitly with `dune runtest disabled.t`. The `enabled_if` field now only controls whether a test is included in the `@runtest` alias. (ocaml/dune#13081, @Alizter) - Process categories in trace events are moved to their own field in `args` (ocaml/dune#13024, @rgrinberg) - Sandbox running `ocamllex` and `ocamlyacc` actions. (ocaml/dune#13098, @anmonteiro) - Sandboxing mdx test actions is now the default starting from `0.5` (ocaml/dune#13504, @rgrinberg) - Start sandboxing Melange rules by default in the `(library ..)` and `(melange.emit ..)` stanzas (ocaml/dune#13619, @anmonteiro) - Introduce a promotion trace event and remove the corresponding verbose log message. (ocaml/dune#12949, ocaml/dune#13444, @rgrinberg) - Change dune's trace format to emit canonical s-expressions. This improves performance and is better aligned with dune's usage of the format elsewhere. `$ dune trace cat` can also emit the trace in `--chrome-trace` for perfetto, or `--sexp` for regular s-expressions for interactive usage. (ocaml/dune#13059, @rgrinberg) - Move all logging statements to the trace file. All log statements now contain structured payloads (ocaml/dune#13015, fixes ocaml/dune#12904, @rgrinberg) - Add a target resolution event to replace the equivalent log message (ocaml/dune#12955, @rgrinberg)
CHANGES: ### Fixed - `Dyn.to_string` now uses a smarter way to convert floats. This ensures that floats are printed with enough precision to round-trip and are valid OCaml lexemes. (ocaml/dune#12982, fixes ocaml/dune#12980, @Alizter) - Fix `dune install --prefix` failing with relative paths outside the workspace like `../foo` (ocaml/dune#12993, fixes ocaml/dune#12241, @benodiwal) - Place the default trace file inside the build directory at the workspace root, rather than relative to the current directory. (ocaml/dune#13735, @vouillon) - Fixed interpreting relative paths in `%{bin:..}` and `%{bin-available:..}`. These are now interpreted correctly, relative to the dune file they're in. (ocaml/dune#13712, fixes ocaml/dune#9564, @anmonteiro) - Delete sandboxes with broken permissions (ocaml/dune#13511, @rgrinberg) - Fix compiling Menhir parsers that refer to sibling modules within a subdirectory of `(include_subdirs qualified)`. (ocaml/dune#13118, fixes ocaml/dune#11119, @anmonteiro) - Fixed the dependency specification of C stubs, which could result in C stubs not getting rebuilt when needed (which could in turn lead to segmentation faults and other hard-to-track bugs). (ocaml/dune#13652, fixes ocaml/dune#13651, @nojb) - Fix the Dune cache on Windows by correctly handling renames onto read-only files. Before this change, the Dune cache would be filled but the stored artifacts would not generally be usable by Dune. (ocaml/dune#13713, @Nevor) - Fix rpc not transferring promotion warnings to the client (ocaml/dune#12604, fixes ocaml/dune#12578, @ElectreAAS) - Fix issue where `dune exec -w` was unable to kill running programs on rebuild. (ocaml/dune#12360, fixes ocaml/dune#12323, @Alizter) - Fix package extraction on systems with tar implementations that don't auto-detect compression (e.g., OpenBSD). Dune now passes explicit decompression flags (-z for gzip, -j for bzip2) when needed, and provides clear error messages for unsupported formats like XZ and LZMA. (ocaml/dune#13688, fixes ocaml/dune#10123, @Alizter) - Resolve context and workspace binaries introduced by the respective `(env (binaries ..))` stanzas. (ocaml/dune#12952, fixes ocaml/dune#6220, @anmonteiro) - Fix `diff` promotions originating from sandboxed rules. Previously, they would be completely ignored as the sandbox with the promoted file would be destroyed if the promotion fired (ocaml/dune#13520, @rgrinberg) - Fix failure to digest installed directory targets, allowing them to be used as dependencies to other rules. (ocaml/dune#13045, @anmonteiro) - Fix handling of `(select ..)` field when used with `(include_subdirs ..)`. `(select <path> from ..)` modules now parse `path` as a relative path starting from the module group root (ocaml/dune#13175, fixes ocaml/dune#4383, ocaml/dune#12450, @anmonteiro) - Fix dune trying to kill processes that were already reaped due to race conditions (ocaml/dune#13245, @rgrinberg) - Add `O_CLOEXEC` to all files used for stdin/stdout/stderr (ocaml/dune#13385, @rgrinberg) - Fix `$ dune promote dir/foo` when `dir` does not exist (ocaml/dune#13493, @rgrinberg) - Fix `(select ..)` field evaluation when a transitive library has optional dependencies (fixes ocaml/dune#13299, ocaml/dune#13389, @anmonteiro) - Fix sandboxed builds of `library` stanzas that set `(stdlib (modules_before_stdlib ..))` (ocaml/dune#13624, @anmonteiro) - Dune cache: use of hard links under Windows. (ocaml/dune#13714, @Nevor) - Fixed non-build caches not following `$DUNE_CACHE_ROOT` and instead only relying on `$XDG_CACHE_HOME`. This means the normal build cache moves: `$DUNE_CACHE_ROOT -> $DUNE_CACHE_ROOT/db` (no changes if that variable was unset). Affected users can prevent a full cache invalidation by moving previous contents: `cd $DUNE_CACHE_ROOT; mkdir db; mv <contents of directory> db`. (ocaml/dune#11612, fixes ocaml/dune#11584, @ElectreAAS) - `$ dune promotion list` writes output to stdout rather than stderr (ocaml/dune#13462) - Improve handling of empty files in the `diff` action. These are now correctly distinguished from *empty* files. (ocaml/dune#13696, @rgrinberg) - Pass `/dev/null` to `--diff-command` instead of non-existent files (ocaml/dune#13696, @rgrinberg) - Fix failure when multiple `rocq.extraction` stanzas existing in a directory (ocaml/dune#13531, fixes ocaml/dune#8042, @rlepigre-skylabs-ai) - Print `$ dune promotion show` output to stdout rather than stderr (ocaml/dune#13481, @rgrinberg) - Fix deadlock in the `memo` library in the presence of dependency cycles (ocaml/dune#13625, @anmonteiro) - Fix promotions that modify a directory into a file (ocaml/dune#13516, fixes ocaml/dune#4067, @rgrinberg) - Fix installation of implementations of virtual libraries. This failed when the implementation had no private modules, but the virtual library did (ocaml/dune#10635, @rgrinberg) - Respect the `(dir ..)` field on packages when setting up cram tests (ocaml/dune#13581, @rgrinberg) ### Added - Add support for generating `.cms` files using oxcaml and adding `.cms` or `.cmt` files as compilation dependencies (ocaml/dune#13397, @spiessimon) - Add trace events for custom actions (ocaml/dune#13265, @rgrinberg) - Allow enabling extensions with `(using ..)` in `dune-workspace` files (ocaml/dune#13395, @spiessimon) - Add sandbox extraction trace event (ocaml/dune#13544, @rgrinberg) - Add the initial cwd to the first config event (ocaml/dune#13026, @rgrinberg) - Dune dune produces trace events in `DUNE_ACTION_TRACE_DIR` if this variable is set. (ocaml/dune#13302, @rgrinberg) - Add file watching events to the trace file (ocaml/dune#13038, @rgrinberg) - Introduce the `$ dune trace cat` subcommand to view the trace file. (ocaml/dune#13055, @rgrinberg) - Add diagnostic events to the trace. (ocaml/dune#13041, @rgrinberg) - Add `DUNE_JOBS` environment variable for controlling concurrency of Dune from environment. The `INSIDE_DUNE` variable also now no longer controls concurrency (ocaml/dune#12800, @Alizter) - Support for Rocq expected output tests (ocaml/dune#13632, @rlepigre-skylabs-ai) - Add `rusage` information to completed processes in the trace (@rgrinberg, ocaml/dune#13241) - Add process start events to the trace (ocaml/dune#13261, rgrinberg) - Generate odoc documentation in markdown using the `@doc-markdown` alias (ocaml/dune#12581, @davesnx) - Add timing information for every command executed by cram (ocaml/dune#13092, @rgrinberg) - Add the workspace root to the config trace event (ocaml/dune#12922, @rgrinberg) - Introduce the `dune-action-trace` library. This public library is to be used by custom actions to emit trace events while executed as part of a dune build. The trace events emitted through this library will be incorporated into dune's own trace (ocaml/dune#13348, @rgrinberg) - Add `dune-find-dominating` to `dune.el`, a command to find the dominating dune file. (ocaml/dune#12696, @arvidj) - Add a `--no-recursive` flag to `$ dune describe workspace` (ocaml/dune#13590, @rgrinberg) - Trace events for files written directly by dune (ocaml/dune#13618, @rgrinberg) - Allow expansion of special forms like `(:include ..)` and `%{read-lines:..}` in the `modules` specification for the `ocamllex`, `ocamlyacc` and `menhir` stanzas. (ocaml/dune#13105, ocaml/dune#13135, ocaml/dune#13157, @anmonteiro) - Add a trace event for snapshotting the asndbox (ocaml/dune#13541, @rgrinberg) - Add signal send and receive events to the trace (ocaml/dune#13193, @rgrinberg) - Emit final trace event before exiting. (ocaml/dune#13018, @rgrinberg) - `dune runtest` can now run individual test executables from `(tests)` stanzas and inline tests from `(library (inline_tests))` stanzas by providing their source files as arguments. (ocaml/dune#13064, fixes ocaml/dune#870, @Alizter) - Add a `shell` field to the cram stanza. This field allows customizing the shell to be `bash` rather than `sh` (ocaml/dune#13083, @haochenx) ### Changed - Start sandboxing the execution of tests defined with the `test` and `tests` stanzas (ocaml/dune#13510, ocaml/dune#13617, @rgrinberg) - Disabled cram tests can now be run explicitly with `dune runtest disabled.t`. The `enabled_if` field now only controls whether a test is included in the `@runtest` alias. (ocaml/dune#13081, @Alizter) - Process categories in trace events are moved to their own field in `args` (ocaml/dune#13024, @rgrinberg) - Sandbox running `ocamllex` and `ocamlyacc` actions. (ocaml/dune#13098, @anmonteiro) - Sandboxing mdx test actions is now the default starting from `0.5` (ocaml/dune#13504, @rgrinberg) - Start sandboxing Melange rules by default in the `(library ..)` and `(melange.emit ..)` stanzas (ocaml/dune#13619, @anmonteiro) - Introduce a promotion trace event and remove the corresponding verbose log message. (ocaml/dune#12949, ocaml/dune#13444, @rgrinberg) - Change dune's trace format to emit canonical s-expressions. This improves performance and is better aligned with dune's usage of the format elsewhere. `$ dune trace cat` can also emit the trace in `--chrome-trace` for perfetto, or `--sexp` for regular s-expressions for interactive usage. (ocaml/dune#13059, @rgrinberg) - Move all logging statements to the trace file. All log statements now contain structured payloads (ocaml/dune#13015, fixes ocaml/dune#12904, @rgrinberg) - Add a target resolution event to replace the equivalent log message (ocaml/dune#12955, @rgrinberg)
CHANGES: ### Fixed - `Dyn.to_string` now uses a smarter way to convert floats. This ensures that floats are printed with enough precision to round-trip and are valid OCaml lexemes. (ocaml/dune#12982, fixes ocaml/dune#12980, @Alizter) - Fix `dune install --prefix` failing with relative paths outside the workspace like `../foo` (ocaml/dune#12993, fixes ocaml/dune#12241, @benodiwal) - Place the default trace file inside the build directory at the workspace root, rather than relative to the current directory. (ocaml/dune#13735, @vouillon) - Fixed interpreting relative paths in `%{bin:..}` and `%{bin-available:..}`. These are now interpreted correctly, relative to the dune file they're in. (ocaml/dune#13712, fixes ocaml/dune#9564, @anmonteiro) - Delete sandboxes with broken permissions (ocaml/dune#13511, @rgrinberg) - Fix compiling Menhir parsers that refer to sibling modules within a subdirectory of `(include_subdirs qualified)`. (ocaml/dune#13118, fixes ocaml/dune#11119, @anmonteiro) - Fixed the dependency specification of C stubs, which could result in C stubs not getting rebuilt when needed (which could in turn lead to segmentation faults and other hard-to-track bugs). (ocaml/dune#13652, fixes ocaml/dune#13651, @nojb) - Fix the Dune cache on Windows by correctly handling renames onto read-only files. Before this change, the Dune cache would be filled but the stored artifacts would not generally be usable by Dune. (ocaml/dune#13713, @Nevor) - Fix rpc not transferring promotion warnings to the client (ocaml/dune#12604, fixes ocaml/dune#12578, @ElectreAAS) - Fix issue where `dune exec -w` was unable to kill running programs on rebuild. (ocaml/dune#12360, fixes ocaml/dune#12323, @Alizter) - Fix package extraction on systems with tar implementations that don't auto-detect compression (e.g., OpenBSD). Dune now passes explicit decompression flags (-z for gzip, -j for bzip2) when needed, and provides clear error messages for unsupported formats like XZ and LZMA. (ocaml/dune#13688, fixes ocaml/dune#10123, @Alizter) - Resolve context and workspace binaries introduced by the respective `(env (binaries ..))` stanzas. (ocaml/dune#12952, fixes ocaml/dune#6220, @anmonteiro) - Fix `diff` promotions originating from sandboxed rules. Previously, they would be completely ignored as the sandbox with the promoted file would be destroyed if the promotion fired (ocaml/dune#13520, @rgrinberg) - Fix failure to digest installed directory targets, allowing them to be used as dependencies to other rules. (ocaml/dune#13045, @anmonteiro) - Fix handling of `(select ..)` field when used with `(include_subdirs ..)`. `(select <path> from ..)` modules now parse `path` as a relative path starting from the module group root (ocaml/dune#13175, fixes ocaml/dune#4383, ocaml/dune#12450, @anmonteiro) - Fix dune trying to kill processes that were already reaped due to race conditions (ocaml/dune#13245, @rgrinberg) - Add `O_CLOEXEC` to all files used for stdin/stdout/stderr (ocaml/dune#13385, @rgrinberg) - Fix `$ dune promote dir/foo` when `dir` does not exist (ocaml/dune#13493, @rgrinberg) - Fix `(select ..)` field evaluation when a transitive library has optional dependencies (fixes ocaml/dune#13299, ocaml/dune#13389, @anmonteiro) - Fix sandboxed builds of `library` stanzas that set `(stdlib (modules_before_stdlib ..))` (ocaml/dune#13624, @anmonteiro) - Dune cache: use of hard links under Windows. (ocaml/dune#13714, @Nevor) - Fixed non-build caches not following `$DUNE_CACHE_ROOT` and instead only relying on `$XDG_CACHE_HOME`. This means the normal build cache moves: `$DUNE_CACHE_ROOT -> $DUNE_CACHE_ROOT/db` (no changes if that variable was unset). Affected users can prevent a full cache invalidation by moving previous contents: `cd $DUNE_CACHE_ROOT; mkdir db; mv <contents of directory> db`. (ocaml/dune#11612, fixes ocaml/dune#11584, @ElectreAAS) - `$ dune promotion list` writes output to stdout rather than stderr (ocaml/dune#13462) - Improve handling of empty files in the `diff` action. These are now correctly distinguished from *empty* files. (ocaml/dune#13696, @rgrinberg) - Pass `/dev/null` to `--diff-command` instead of non-existent files (ocaml/dune#13696, @rgrinberg) - Fix failure when multiple `rocq.extraction` stanzas existing in a directory (ocaml/dune#13531, fixes ocaml/dune#8042, @rlepigre-skylabs-ai) - Print `$ dune promotion show` output to stdout rather than stderr (ocaml/dune#13481, @rgrinberg) - Fix deadlock in the `memo` library in the presence of dependency cycles (ocaml/dune#13625, @anmonteiro) - Fix promotions that modify a directory into a file (ocaml/dune#13516, fixes ocaml/dune#4067, @rgrinberg) - Fix installation of implementations of virtual libraries. This failed when the implementation had no private modules, but the virtual library did (ocaml/dune#10635, @rgrinberg) - Respect the `(dir ..)` field on packages when setting up cram tests (ocaml/dune#13581, @rgrinberg) ### Added - Add support for generating `.cms` files using oxcaml and adding `.cms` or `.cmt` files as compilation dependencies (ocaml/dune#13397, @spiessimon) - Add trace events for custom actions (ocaml/dune#13265, @rgrinberg) - Allow enabling extensions with `(using ..)` in `dune-workspace` files (ocaml/dune#13395, @spiessimon) - Add sandbox extraction trace event (ocaml/dune#13544, @rgrinberg) - Add the initial cwd to the first config event (ocaml/dune#13026, @rgrinberg) - Dune dune produces trace events in `DUNE_ACTION_TRACE_DIR` if this variable is set. (ocaml/dune#13302, @rgrinberg) - Add file watching events to the trace file (ocaml/dune#13038, @rgrinberg) - Introduce the `$ dune trace cat` subcommand to view the trace file. (ocaml/dune#13055, @rgrinberg) - Add diagnostic events to the trace. (ocaml/dune#13041, @rgrinberg) - Add `DUNE_JOBS` environment variable for controlling concurrency of Dune from environment. The `INSIDE_DUNE` variable also now no longer controls concurrency (ocaml/dune#12800, @Alizter) - Support for Rocq expected output tests (ocaml/dune#13632, @rlepigre-skylabs-ai) - Add `rusage` information to completed processes in the trace (@rgrinberg, ocaml/dune#13241) - Add process start events to the trace (ocaml/dune#13261, rgrinberg) - Generate odoc documentation in markdown using the `@doc-markdown` alias (ocaml/dune#12581, @davesnx) - Add timing information for every command executed by cram (ocaml/dune#13092, @rgrinberg) - Add the workspace root to the config trace event (ocaml/dune#12922, @rgrinberg) - Introduce the `dune-action-trace` library. This public library is to be used by custom actions to emit trace events while executed as part of a dune build. The trace events emitted through this library will be incorporated into dune's own trace (ocaml/dune#13348, @rgrinberg) - Add `dune-find-dominating` to `dune.el`, a command to find the dominating dune file. (ocaml/dune#12696, @arvidj) - Add a `--no-recursive` flag to `$ dune describe workspace` (ocaml/dune#13590, @rgrinberg) - Trace events for files written directly by dune (ocaml/dune#13618, @rgrinberg) - Allow expansion of special forms like `(:include ..)` and `%{read-lines:..}` in the `modules` specification for the `ocamllex`, `ocamlyacc` and `menhir` stanzas. (ocaml/dune#13105, ocaml/dune#13135, ocaml/dune#13157, @anmonteiro) - Add a trace event for snapshotting the asndbox (ocaml/dune#13541, @rgrinberg) - Add signal send and receive events to the trace (ocaml/dune#13193, @rgrinberg) - Emit final trace event before exiting. (ocaml/dune#13018, @rgrinberg) - `dune runtest` can now run individual test executables from `(tests)` stanzas and inline tests from `(library (inline_tests))` stanzas by providing their source files as arguments. (ocaml/dune#13064, fixes ocaml/dune#870, @Alizter) - Add a `shell` field to the cram stanza. This field allows customizing the shell to be `bash` rather than `sh` (ocaml/dune#13083, @haochenx) ### Changed - Start sandboxing the execution of tests defined with the `test` and `tests` stanzas (ocaml/dune#13510, ocaml/dune#13617, @rgrinberg) - Disabled cram tests can now be run explicitly with `dune runtest disabled.t`. The `enabled_if` field now only controls whether a test is included in the `@runtest` alias. (ocaml/dune#13081, @Alizter) - Process categories in trace events are moved to their own field in `args` (ocaml/dune#13024, @rgrinberg) - Sandbox running `ocamllex` and `ocamlyacc` actions. (ocaml/dune#13098, @anmonteiro) - Sandboxing mdx test actions is now the default starting from `0.5` (ocaml/dune#13504, @rgrinberg) - Start sandboxing Melange rules by default in the `(library ..)` and `(melange.emit ..)` stanzas (ocaml/dune#13619, @anmonteiro) - Introduce a promotion trace event and remove the corresponding verbose log message. (ocaml/dune#12949, ocaml/dune#13444, @rgrinberg) - Change dune's trace format to emit canonical s-expressions. This improves performance and is better aligned with dune's usage of the format elsewhere. `$ dune trace cat` can also emit the trace in `--chrome-trace` for perfetto, or `--sexp` for regular s-expressions for interactive usage. (ocaml/dune#13059, @rgrinberg) - Move all logging statements to the trace file. All log statements now contain structured payloads (ocaml/dune#13015, fixes ocaml/dune#12904, @rgrinberg) - Add a target resolution event to replace the equivalent log message (ocaml/dune#12955, @rgrinberg)
CHANGES: ### Fixed - `Dyn.to_string` now uses a smarter way to convert floats. This ensures that floats are printed with enough precision to round-trip and are valid OCaml lexemes. (ocaml/dune#12982, fixes ocaml/dune#12980, @Alizter) - Fix `dune install --prefix` failing with relative paths outside the workspace like `../foo` (ocaml/dune#12993, fixes ocaml/dune#12241, @benodiwal) - Place the default trace file inside the build directory at the workspace root, rather than relative to the current directory. (ocaml/dune#13735, @vouillon) - Fixed interpreting relative paths in `%{bin:..}` and `%{bin-available:..}`. These are now interpreted correctly, relative to the dune file they're in. (ocaml/dune#13712, fixes ocaml/dune#9564, @anmonteiro) - Delete sandboxes with broken permissions (ocaml/dune#13511, @rgrinberg) - Fix compiling Menhir parsers that refer to sibling modules within a subdirectory of `(include_subdirs qualified)`. (ocaml/dune#13118, fixes ocaml/dune#11119, @anmonteiro) - Fixed the dependency specification of C stubs, which could result in C stubs not getting rebuilt when needed (which could in turn lead to segmentation faults and other hard-to-track bugs). (ocaml/dune#13652, fixes ocaml/dune#13651, @nojb) - Fix the Dune cache on Windows by correctly handling renames onto read-only files. Before this change, the Dune cache would be filled but the stored artifacts would not generally be usable by Dune. (ocaml/dune#13713, @Nevor) - Fix rpc not transferring promotion warnings to the client (ocaml/dune#12604, fixes ocaml/dune#12578, @ElectreAAS) - Fix issue where `dune exec -w` was unable to kill running programs on rebuild. (ocaml/dune#12360, fixes ocaml/dune#12323, @Alizter) - Resolve context and workspace binaries introduced by the respective `(env (binaries ..))` stanzas. (ocaml/dune#12952, fixes ocaml/dune#6220, @anmonteiro) - Fix `diff` promotions originating from sandboxed rules. Previously, they would be completely ignored as the sandbox with the promoted file would be destroyed if the promotion fired (ocaml/dune#13520, @rgrinberg) - Fix failure to digest installed directory targets, allowing them to be used as dependencies to other rules. (ocaml/dune#13045, @anmonteiro) - Fix handling of `(select ..)` field when used with `(include_subdirs ..)`. `(select <path> from ..)` modules now parse `path` as a relative path starting from the module group root (ocaml/dune#13175, fixes ocaml/dune#4383, ocaml/dune#12450, @anmonteiro) - Fix dune trying to kill processes that were already reaped due to race conditions (ocaml/dune#13245, @rgrinberg) - Add `O_CLOEXEC` to all files used for stdin/stdout/stderr (ocaml/dune#13385, @rgrinberg) - Fix `$ dune promote dir/foo` when `dir` does not exist (ocaml/dune#13493, @rgrinberg) - Fix `(select ..)` field evaluation when a transitive library has optional dependencies (fixes ocaml/dune#13299, ocaml/dune#13389, @anmonteiro) - Fix sandboxed builds of `library` stanzas that set `(stdlib (modules_before_stdlib ..))` (ocaml/dune#13624, @anmonteiro) - Dune cache: use of hard links under Windows. (ocaml/dune#13714, @Nevor) - Fixed non-build caches not following `$DUNE_CACHE_ROOT` and instead only relying on `$XDG_CACHE_HOME`. This means the normal build cache moves: `$DUNE_CACHE_ROOT -> $DUNE_CACHE_ROOT/db` (no changes if that variable was unset). Affected users can prevent a full cache invalidation by moving previous contents: `cd $DUNE_CACHE_ROOT; mkdir db; mv <contents of directory> db`. (ocaml/dune#11612, fixes ocaml/dune#11584, @ElectreAAS) - `$ dune promotion list` writes output to stdout rather than stderr (ocaml/dune#13462) - Improve handling of empty files in the `diff` action. These are now correctly distinguished from *empty* files. (ocaml/dune#13696, @rgrinberg) - Pass `/dev/null` to `--diff-command` instead of non-existent files (ocaml/dune#13696, @rgrinberg) - Fix failure when multiple `rocq.extraction` stanzas existing in a directory (ocaml/dune#13531, fixes ocaml/dune#8042, @rlepigre-skylabs-ai) - Print `$ dune promotion show` output to stdout rather than stderr (ocaml/dune#13481, @rgrinberg) - Fix deadlock in the `memo` library in the presence of dependency cycles (ocaml/dune#13625, @anmonteiro) - Fix promotions that modify a directory into a file (ocaml/dune#13516, fixes ocaml/dune#4067, @rgrinberg) - Fix installation of implementations of virtual libraries. This failed when the implementation had no private modules, but the virtual library did (ocaml/dune#10635, @rgrinberg) - Respect the `(dir ..)` field on packages when setting up cram tests (ocaml/dune#13581, @rgrinberg) ### Added - Add support for generating `.cms` files using oxcaml and adding `.cms` or `.cmt` files as compilation dependencies (ocaml/dune#13397, @spiessimon) - Add trace events for custom actions (ocaml/dune#13265, @rgrinberg) - Allow enabling extensions with `(using ..)` in `dune-workspace` files (ocaml/dune#13395, @spiessimon) - Add sandbox extraction trace event (ocaml/dune#13544, @rgrinberg) - Add the initial cwd to the first config event (ocaml/dune#13026, @rgrinberg) - Dune dune produces trace events in `DUNE_ACTION_TRACE_DIR` if this variable is set. (ocaml/dune#13302, @rgrinberg) - Add file watching events to the trace file (ocaml/dune#13038, @rgrinberg) - Introduce the `$ dune trace cat` subcommand to view the trace file. (ocaml/dune#13055, @rgrinberg) - Add diagnostic events to the trace. (ocaml/dune#13041, @rgrinberg) - Add `DUNE_JOBS` environment variable for controlling concurrency of Dune from environment. The `INSIDE_DUNE` variable also now no longer controls concurrency (ocaml/dune#12800, @Alizter) - Support for Rocq expected output tests (ocaml/dune#13632, @rlepigre-skylabs-ai) - Add `rusage` information to completed processes in the trace (@rgrinberg, ocaml/dune#13241) - Add process start events to the trace (ocaml/dune#13261, rgrinberg) - Generate odoc documentation in markdown using the `@doc-markdown` alias (ocaml/dune#12581, @davesnx) - Add timing information for every command executed by cram (ocaml/dune#13092, @rgrinberg) - Add the workspace root to the config trace event (ocaml/dune#12922, @rgrinberg) - Introduce the `dune-action-trace` library. This public library is to be used by custom actions to emit trace events while executed as part of a dune build. The trace events emitted through this library will be incorporated into dune's own trace (ocaml/dune#13348, @rgrinberg) - Add `dune-find-dominating` to `dune.el`, a command to find the dominating dune file. (ocaml/dune#12696, @arvidj) - Add a `--no-recursive` flag to `$ dune describe workspace` (ocaml/dune#13590, @rgrinberg) - Trace events for files written directly by dune (ocaml/dune#13618, @rgrinberg) - Allow expansion of special forms like `(:include ..)` and `%{read-lines:..}` in the `modules` specification for the `ocamllex`, `ocamlyacc` and `menhir` stanzas. (ocaml/dune#13105, ocaml/dune#13135, ocaml/dune#13157, @anmonteiro) - Add a trace event for snapshotting the asndbox (ocaml/dune#13541, @rgrinberg) - Add signal send and receive events to the trace (ocaml/dune#13193, @rgrinberg) - Emit final trace event before exiting. (ocaml/dune#13018, @rgrinberg) - `dune runtest` can now run individual test executables from `(tests)` stanzas and inline tests from `(library (inline_tests))` stanzas by providing their source files as arguments. (ocaml/dune#13064, fixes ocaml/dune#870, @Alizter) - Add a `shell` field to the cram stanza. This field allows customizing the shell to be `bash` rather than `sh` (ocaml/dune#13083, @haochenx) ### Changed - Start sandboxing the execution of tests defined with the `test` and `tests` stanzas (ocaml/dune#13510, ocaml/dune#13617, @rgrinberg) - Disabled cram tests can now be run explicitly with `dune runtest disabled.t`. The `enabled_if` field now only controls whether a test is included in the `@runtest` alias. (ocaml/dune#13081, @Alizter) - Process categories in trace events are moved to their own field in `args` (ocaml/dune#13024, @rgrinberg) - Sandbox running `ocamllex` and `ocamlyacc` actions. (ocaml/dune#13098, @anmonteiro) - Sandboxing mdx test actions is now the default starting from `0.5` (ocaml/dune#13504, @rgrinberg) - Start sandboxing Melange rules by default in the `(library ..)` and `(melange.emit ..)` stanzas (ocaml/dune#13619, @anmonteiro) - Introduce a promotion trace event and remove the corresponding verbose log message. (ocaml/dune#12949, ocaml/dune#13444, @rgrinberg) - Change dune's trace format to emit canonical s-expressions. This improves performance and is better aligned with dune's usage of the format elsewhere. `$ dune trace cat` can also emit the trace in `--chrome-trace` for perfetto, or `--sexp` for regular s-expressions for interactive usage. (ocaml/dune#13059, @rgrinberg) - Move all logging statements to the trace file. All log statements now contain structured payloads (ocaml/dune#13015, fixes ocaml/dune#12904, @rgrinberg) - Add a target resolution event to replace the equivalent log message (ocaml/dune#12955, @rgrinberg)
Fixes #12578, and only looks like it fixes #12577, but doesn't, it was a red herring. See discussion on latter PR.
What was missing