Skip to content

Tags: ocaml/dune

Tags

3.24.0

Toggle 3.24.0's commit message

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
Release 3.24.0

CHANGES:

- Fix promotion failure when a target changes from a directory to a file
  between builds, causing "Is a directory" errors.
  (#14371, fixes #5647, fixes #6575, @Alizter)

- Make `dune build @doc` pick up an odoc installed via `dune tools install
  odoc` even without `DUNE_CONFIG__LOCK_DEV_TOOL=enabled`, mirroring how
  `dune fmt` consumes a locked ocamlformat (#14426, fixes #14235, @mt-caret)

- Reject `(package ...)` inside a named dependency binding
  (`(deps (:name (package foo)))`). Previously this was silently accepted but
  `%{name}` would resolve to an empty path list. (#14499, @Alizter)

- Fix incorrect dependency in the `.cmxs` build for libraries with
  mode-dependent foreign stubs: the rule depended on the byte stubs archive
  instead of the native one, so parallel builds could fail to find
  `-l<lib>_stubs_native`. (#14500, fixes #12964, @Alizter)

- Fix `dune build` failing with "No rule found" when `lock_dir` paths in
  `dune-workspace` contain a subdirectory (e.g. `(path sub/dune.lock)`).
  (#14524, fixes #14523, @Alizter)

- Artifact substitution repairs executable bit if it's not set correctly in the workspace
  (#14556, @rgrinberg)

- Ignore `EINVAL` when accepting sockets on MacOS (#14612, fixes #12660, @rgrinberg)

- Validate profile names. Profile names must be non-empty and can only contain
  letters, digits, `_` and `-`. The name `_` is reserved as a wildcard in
  `(env ...)` stanzas. (#14657, fixes #14630, @rlepigre)

- Add `%{pkg:<package>:<section>:<path>}` pform for resolving package install
  files. Works with workspace packages, lock-file packages, and installed
  packages. (#14200, fixes #14193, fixes #3378, @Alizter)

- Enable the relocatable compiler by default for package management (#14357,
  fixes #14012, @Alizter)

- Add changed source files to the `build-start` trace event for watch-mode
  restarts, showing the paths that triggered the rebuild (#14396, @rgrinberg)

- Add dune's rusage information in start/finish build trace events (#14402, @rgrinberg)

- Add a status message for RPC clients that manage to connect (#14424, @rgrinberg)

- Allow blang expressions in the `runtest_alias` field in the `cram` stanza (#14425, @rgrinberg)

- Extend the stat based cache to cache the contents of directories and not just
  source files (#14469, @rgrinberg).

- Show the number of connected RPC clients in the watch mode status line
  (#14489, @rgrinberg)

- Promote directory targets from experimental to generally available in 3.24
  (#14579, @rgrinberg)

- Use `/` as directory separator when appending local paths to external paths,
  making path construction consistent across platforms. (#14278, @Alizter)
- On Windows, normalise process paths to `\` before passing them to
  `CreateProcessW` so that programs which scan `argv[0]` (notably `cmd.exe`)
  do not misparse mixed separators. (#14278, @Alizter)

- `%{bin:NAME}` now resolves to the build artifact path rather than
  the install staging path. Rules with `%{bin:NAME}` deps additionally
  get a per-rule `.binaries` directory prepended to the action's
  `PATH`, containing correctly-named symlinks for each declared bin
  pform dep. (#14432, fixes #3324, @Alizter)

- Replace the Rocq language field `(stdlib ...)` with the presence-only field
  `(no_corelib)` in Rocq language 0.14. (#14452, fixes #14358, @Durbatuluk1701)

- Throttle sandbox creation to 250 concurrent sandboxes. (#14464, @rgrinberg)

- The package solver now uses cached revision store lookups for improved
  performance. (#14494, fixes #12637, @Alizter, @rgrinberg)

- Remove the deprecated `(lang coq)` Coq Build Language. Use the
  Rocq Build Language (`(using rocq <version>)`) instead. Projects that
  still declare `(using coq <version>)` now get an error pointing them
  at Rocq. (#14525, fixes #12788, @Alizter)

3.24.0_alpha2

Toggle 3.24.0_alpha2's commit message

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
Release 3.24.0~alpha2

CHANGES:

- Fix promotion failure when a target changes from a directory to a file
  between builds, causing "Is a directory" errors.
  (#14371, fixes #5647, fixes #6575, @Alizter)

- Make `dune build @doc` pick up an odoc installed via `dune tools install
  odoc` even without `DUNE_CONFIG__LOCK_DEV_TOOL=enabled`, mirroring how
  `dune fmt` consumes a locked ocamlformat (#14426, fixes #14235, @mt-caret)

- Reject `(package ...)` inside a named dependency binding
  (`(deps (:name (package foo)))`). Previously this was silently accepted but
  `%{name}` would resolve to an empty path list. (#14499, @Alizter)

- Fix incorrect dependency in the `.cmxs` build for libraries with
  mode-dependent foreign stubs: the rule depended on the byte stubs archive
  instead of the native one, so parallel builds could fail to find
  `-l<lib>_stubs_native`. (#14500, fixes #12964, @Alizter)

- Fix `dune build` failing with "No rule found" when `lock_dir` paths in
  `dune-workspace` contain a subdirectory (e.g. `(path sub/dune.lock)`).
  (#14524, fixes #14523, @Alizter)

- Artifact substitution repairs executable bit if it's not set correctly in the workspace
  (#14556, @rgrinberg)

- Ignore `EINVAL` when accepting sockets on MacOS (#14612, fixes #12660, @rgrinberg)

- Validate profile names. Profile names must be non-empty and can only contain
  letters, digits, `_` and `-`. The name `_` is reserved as a wildcard in
  `(env ...)` stanzas. (#14657, fixes #14630, @rlepigre)

- Add `%{pkg:<package>:<section>:<path>}` pform for resolving package install
  files. Works with workspace packages, lock-file packages, and installed
  packages. (#14200, fixes #14193, fixes #3378, @Alizter)

- Enable the relocatable compiler by default for package management (#14357,
  fixes #14012, @Alizter)

- Add changed source files to the `build-start` trace event for watch-mode
  restarts, showing the paths that triggered the rebuild (#14396, @rgrinberg)

- Add dune's rusage information in start/finish build trace events (#14402, @rgrinberg)

- Add a status message for RPC clients that manage to connect (#14424, @rgrinberg)

- Allow blang expressions in the `runtest_alias` field in the `cram` stanza (#14425, @rgrinberg)

- Extend the stat based cache to cache the contents of directories and not just
  source files (#14469, @rgrinberg).

- Show the number of connected RPC clients in the watch mode status line
  (#14489, @rgrinberg)

- Promote directory targets from experimental to generally available in 3.24
  (#14579, @rgrinberg)

- Use `/` as directory separator when appending local paths to external paths,
  making path construction consistent across platforms. (#14278, @Alizter)
- On Windows, normalise process paths to `\` before passing them to
  `CreateProcessW` so that programs which scan `argv[0]` (notably `cmd.exe`)
  do not misparse mixed separators. (#14278, @Alizter)

- `%{bin:NAME}` now resolves to the build artifact path rather than
  the install staging path. Rules with `%{bin:NAME}` deps additionally
  get a per-rule `.binaries` directory prepended to the action's
  `PATH`, containing correctly-named symlinks for each declared bin
  pform dep. (#14432, fixes #3324, @Alizter)

- Replace the Rocq language field `(stdlib ...)` with the presence-only field
  `(no_corelib)` in Rocq language 0.14. (#14452, fixes #14358, @Durbatuluk1701)

- Throttle sandbox creation to 250 concurrent sandboxes. (#14464, @rgrinberg)

- The package solver now uses cached revision store lookups for improved
  performance. (#14494, fixes #12637, @Alizter, @rgrinberg)

- Remove the deprecated `(lang coq)` Coq Build Language. Use the
  Rocq Build Language (`(using rocq <version>)`) instead. Projects that
  still declare `(using coq <version>)` now get an error pointing them
  at Rocq. (#14525, fixes #12788, @Alizter)

3.24.0_alpha1

Toggle 3.24.0_alpha1's commit message

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
Release 3.24.0~alpha1

CHANGES:

- Fix promotion failure when a target changes from a directory to a file
  between builds, causing "Is a directory" errors.
  (#14371, fixes #5647, fixes #6575, @Alizter)

- Make `dune build @doc` pick up an odoc installed via `dune tools install
  odoc` even without `DUNE_CONFIG__LOCK_DEV_TOOL=enabled`, mirroring how
  `dune fmt` consumes a locked ocamlformat (#14426, fixes #14235, @mt-caret)

- Reject `(package ...)` inside a named dependency binding
  (`(deps (:name (package foo)))`). Previously this was silently accepted but
  `%{name}` would resolve to an empty path list. (#14499, @Alizter)

- Fix incorrect dependency in the `.cmxs` build for libraries with
  mode-dependent foreign stubs: the rule depended on the byte stubs archive
  instead of the native one, so parallel builds could fail to find
  `-l<lib>_stubs_native`. (#14500, fixes #12964, @Alizter)

- Fix `dune build` failing with "No rule found" when `lock_dir` paths in
  `dune-workspace` contain a subdirectory (e.g. `(path sub/dune.lock)`).
  (#14524, fixes #14523, @Alizter)

- Artifact substitution repairs executable bit if it's not set correctly in the workspace
  (#14556, @rgrinberg)

- Ignore `EINVAL` when accepting sockets on MacOS (#14612, fixes #12660, @rgrinberg)

- Validate profile names. Profile names must be non-empty and can only contain
  letters, digits, `_` and `-`. The name `_` is reserved as a wildcard in
  `(env ...)` stanzas. (#14657, fixes #14630, @rlepigre)

- Add `%{pkg:<package>:<section>:<path>}` pform for resolving package install
  files. Works with workspace packages, lock-file packages, and installed
  packages. (#14200, fixes #14193, fixes #3378, @Alizter)

- Enable the relocatable compiler by default for package management (#14357,
  fixes #14012, @Alizter)

- Add changed source files to the `build-start` trace event for watch-mode
  restarts, showing the paths that triggered the rebuild (#14396, @rgrinberg)

- Add dune's rusage information in start/finish build trace events (#14402, @rgrinberg)

- Add a status message for RPC clients that manage to connect (#14424, @rgrinberg)

- Allow blang expressions in the `runtest_alias` field in the `cram` stanza (#14425, @rgrinberg)

- Extend the stat based cache to cache the contents of directories and not just
  source files (#14469, @rgrinberg).

- Show the number of connected RPC clients in the watch mode status line
  (#14489, @rgrinberg)

- Promote directory targets from experimental to generally available in 3.24
  (#14579, @rgrinberg)

- Use `/` as directory separator when appending local paths to external paths,
  making path construction consistent across platforms. (#14278, @Alizter)
- On Windows, normalise process paths to `\` before passing them to
  `CreateProcessW` so that programs which scan `argv[0]` (notably `cmd.exe`)
  do not misparse mixed separators. (#14278, @Alizter)

- `%{bin:NAME}` now resolves to the build artifact path rather than
  the install staging path. Rules with `%{bin:NAME}` deps additionally
  get a per-rule `.binaries` directory prepended to the action's
  `PATH`, containing correctly-named symlinks for each declared bin
  pform dep. (#14432, fixes #3324, @Alizter)

- Replace the Rocq language field `(stdlib ...)` with the presence-only field
  `(no_corelib)` in Rocq language 0.14. (#14452, fixes #14358, @Durbatuluk1701)

- Throttle sandbox creation to 250 concurrent sandboxes. (#14464, @rgrinberg)

- The package solver now uses cached revision store lookups for improved
  performance. (#14494, fixes #12637, @Alizter, @rgrinberg)

- Remove the deprecated `(lang coq)` Coq Build Language. Use the
  Rocq Build Language (`(using rocq <version>)`) instead. Projects that
  still declare `(using coq <version>)` now get an error pointing them
  at Rocq. (#14525, fixes #12788, @Alizter)

3.24.0_alpha0

Toggle 3.24.0_alpha0's commit message

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
Release 3.24.0~alpha0

CHANGES:

- Fix promotion failure when a target changes from a directory to a file
  between builds, causing "Is a directory" errors.
  (#14371, fixes #5647, fixes #6575, @Alizter)

- Make `dune build @doc` pick up an odoc installed via `dune tools install
  odoc` even without `DUNE_CONFIG__LOCK_DEV_TOOL=enabled`, mirroring how
  `dune fmt` consumes a locked ocamlformat (#14426, fixes #14235, @mt-caret)

- Reject `(package ...)` inside a named dependency binding
  (`(deps (:name (package foo)))`). Previously this was silently accepted but
  `%{name}` would resolve to an empty path list. (#14499, @Alizter)

- Fix incorrect dependency in the `.cmxs` build for libraries with
  mode-dependent foreign stubs: the rule depended on the byte stubs archive
  instead of the native one, so parallel builds could fail to find
  `-l<lib>_stubs_native`. (#14500, fixes #12964, @Alizter)

- Fix `dune build` failing with "No rule found" when `lock_dir` paths in
  `dune-workspace` contain a subdirectory (e.g. `(path sub/dune.lock)`).
  (#14524, fixes #14523, @Alizter)

- Artifact substitution repairs executable bit if it's not set correctly in the workspace
  (#14556, @rgrinberg)

- Ignore `EINVAL` when accepting sockets on MacOS (#14612, fixes #12660, @rgrinberg)

- Validate profile names. Profile names must be non-empty and can only contain
  letters, digits, `_` and `-`. The name `_` is reserved as a wildcard in
  `(env ...)` stanzas. (#14657, fixes #14630, @rlepigre)

- Add `%{pkg:<package>:<section>:<path>}` pform for resolving package install
  files. Works with workspace packages, lock-file packages, and installed
  packages. (#14200, fixes #14193, fixes #3378, @Alizter)

- Enable the relocatable compiler by default for package management (#14357,
  fixes #14012, @Alizter)

- Add changed source files to the `build-start` trace event for watch-mode
  restarts, showing the paths that triggered the rebuild (#14396, @rgrinberg)

- Add dune's rusage information in start/finish build trace events (#14402, @rgrinberg)

- Add a status message for RPC clients that manage to connect (#14424, @rgrinberg)

- Allow blang expressions in the `runtest_alias` field in the `cram` stanza (#14425, @rgrinberg)

- Extend the stat based cache to cache the contents of directories and not just
  source files (#14469, @rgrinberg).

- Show the number of connected RPC clients in the watch mode status line
  (#14489, @rgrinberg)

- Promote directory targets from experimental to generally available in 3.24
  (#14579, @rgrinberg)

- Use `/` as directory separator when appending local paths to external paths,
  making path construction consistent across platforms. (#14278, @Alizter)
- On Windows, normalise process paths to `\` before passing them to
  `CreateProcessW` so that programs which scan `argv[0]` (notably `cmd.exe`)
  do not misparse mixed separators. (#14278, @Alizter)

- `%{bin:NAME}` now resolves to the build artifact path rather than
  the install staging path. Rules with `%{bin:NAME}` deps additionally
  get a per-rule `.binaries` directory prepended to the action's
  `PATH`, containing correctly-named symlinks for each declared bin
  pform dep. (#14432, fixes #3324, @Alizter)

- Replace the Rocq language field `(stdlib ...)` with the presence-only field
  `(no_corelib)` in Rocq language 0.14. (#14452, fixes #14358, @Durbatuluk1701)

- Throttle sandbox creation to 250 concurrent sandboxes. (#14464, @rgrinberg)

- The package solver now uses cached revision store lookups for improved
  performance. (#14494, fixes #12637, @Alizter, @rgrinberg)

- Remove the deprecated `(lang coq)` Coq Build Language. Use the
  Rocq Build Language (`(using rocq <version>)`) instead. Projects that
  still declare `(using coq <version>)` now get an error pointing them
  at Rocq. (#14525, fixes #12788, @Alizter)

3.23.1

Toggle 3.23.1's commit message

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
Release 3.23.1

CHANGES:

- Fix the `menhir` opam dependency injection introduced in 3.23. Dune
  now only fills in the lower bound `{>= "20180523"}` on an existing
  user-declared `menhir` dependency; it no longer adds `menhir` as a
  new dependency to packages that did not declare it themselves.
  (#14434, fixes #14428, @robinbb)

- Gate the `dune` version-bound deduplication in generated opam files
  (introduced in 3.23) on `(lang dune 3.23)`. Projects at earlier lang
  versions get the prior `And [...]` shape — e.g.
  `{>= "3.17" & >= "3.20"}` — restoring 3.22 behaviour and avoiding a
  silent change to opam output on dune-binary upgrade. (#14436,
  @robinbb)

- Preserve library order when building a shared jsoo standalone runtime.
  (#14438, @vouillon)

- Fix the fallback to the secondary compiler, allowing recovering of support for
  packages with upper bounds on OCaml less than 4.14. Packages depending on dune
  3.23.1 or later and with an upper bound on the OCaml compiler that is less
  than 4.14, will now be able to use the latest dune, but dune will be built
  with the secondary compiler at version 4.14. (#14443, @Alizter)

- Fix the bootstrap on NetBSD by including `<sys/wait.h>` in `lev_stubs.c`,
  matching the existing FreeBSD/OpenBSD guard.
  (#14512, fixes #14484, @0-wiz-0)

3.23.0

Toggle 3.23.0's commit message

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
Release 3.23.0

CHANGES:

- Auto-inject `"menhir" {>= "20180523"}` into generated opam files when the
  menhir extension is used. Dune's menhir rules rely on `--infer-write-query`
  and `--infer-read-reply`, which require at least this version; without the
  lower bound, builds fail with older menhir installations.
  (#10707, @robinbb)

- Fix `--display=quiet` not suppressing "Entering directory" and "Leaving
  directory" messages when using `--root`. These messages are now deferred
  until there is actual output, so silent builds produce no noise.
  (#12974, fixes #12854, @Alizter)

- Fix an internal error when a module is shared between a `rocq.theory` and
  `rocq.extraction` stanza. The error now includes a hint pointing to the
  conflicting stanza. (#13733, @Durbatuluk1701)

- Fix cookies defined on `ppx_rewriter` being lost when that rewriter was used
  as a dependency of another `ppx_rewriter`. (#13737, fixes #3426, @Alizter)

- Improve opam file generation for packages that set `(dir ..)`. Such packages
  will now have a test target that is limited to this directory. (#13778, @rgrinberg)

- Stop duplicating dune diagnostics to subscribers over RPC (#13816,
  @rgrinberg)

- Fix dependency cycle when using the `package` with a library
  conditionally enabled via `enabled_if`. (#13833, @toots)

- Fix underspecification of dependencies in the sandbox for modules with
  interfaces. (#13842, @anmonteiro)

- Honor sandbox settings specified inside `(:include ..)` expressions in the `deps` field
  (#13898, @rgrinberg)

- Fix `dune pkg lock` failing when a `pin` stanza contains a `file://` URL with
  a relative path outside the workspace (#13915, fixes #10254, @shunueda)

- Use all stat attributes to detect patch back source tree changes (#13986, @rgrinberg)

- Use device and inode number for invalidating cached digests (#13991, @rgrinberg)

- Stop trying to set SO_REUSEADDR on unix sockets when setting up dune rpc
  (#14056, @rgrinberg)

- Fix autolocking to correctly detect changes to `(depends)` in watch mode
  (#14066, fixes #13234, @Alizter)

- Fix incremental builds for libraries using `(wrapped (transition ...))`.
  The compat shim modules were never recompiled when the inner module's
  interface changed, causing "inconsistent assumptions" errors.
  (#14090, fixes #14089, @Alizter)

- Fix Rocq configuration detection to use `rocq c --config` subcommand
  instead of `rocq --config` (#14093, fixes #13774, @Durbatuluk1701)

- Bump dune rpc's request pending request limit 10 to 100 (#14094, @rginberg)

- Invalidate stale cached digests in all build commands (#14126, @rgrinberg)

- Fix `root_module` generating duplicate module definitions when a
  findlib sub-package shares a directory with its parent (e.g.,
  `logs.lwt` alongside `logs`). (#14135, fixes #6148, @robinbb)

- Fix `dune subst` prepending a duplicate `version:` field to opam
  files that already contain one, instead of replacing it in place.
  (#14136, fixes #878, @robinbb)

- Fix `@ocaml-index` alias being generated for all contexts, causing build
  errors in multi-context workspaces where some libraries are disabled in
  non-default contexts. The alias is now only generated for the merlin context.
  (#14137, fixes #12007, @robinbb)

- Remove the warning about the deprecation of the coq stanza for
  dune lang before 3.21 since it has been introduced in this
  version (#14187, @bobot)

- `$ dune init` now generates projects with correct .opam files (#14192, @rgrinberg)

- Send SIGTERM before SIGKILL when cancelling child processes in watch
  mode, giving cleanup handlers a chance to run before escalating.
  (#14224, #14170, fixes #2445, @robinbb)

- Correctly specify dependencies for `generate_runner` in inline tests (#14276, @rgrinberg)

- Fix duplicate dune version bounds in generated opam files. When users
  declare `(dune (>= X.Y))` matching or exceeding the `(lang dune X.Y)`
  version, the generated opam `depends` no longer contains redundant
  constraints like `{>= "2.7" & >= "2.7"}`. (#3916, #11106, @robinbb)

- Fix inline tests not being executed for byte-only libraries. When a library
  has `(modes byte)`, the inline test runner is now linked in byte mode so the
  library's test code is included. (#9757, @robinbb)

- Add support for `c_library_flags` in foreign_stubs (#13484, @madroach)

- Move the management of Jsoo config details out of dune (#13613, @vouillon)

- Js_of_ocaml: share standalone runtimes (#13621, @vouillon)

- Allow multiple `(dirs ..)` stanzas in the same Dune file. Starting with
  `(lang dune 3.23)`, Dune takes the union of the specified directories
  (#13734, fixes #6249, @anmonteiro)

- Sandboxed rules are now allowed to produce diff promotions when `(corrections
  produce)` is set on the rules. Whenever such an action produces `foo.corrected`, it will
  be automatically registered as a promotion for `foo` (#13813, @rgrinberg)

- `$ dune clean` now accepts arguments to only remove certain targets from the
  _build directory (#13875, @rgrinberg)

- `$ dune promote` now promotes all paths that are a prefix of the path provided.
  For example, `$ dune promote foo` will promote `foo`, `foo/bar`, `foo/bar/baz`
  (but not `foobar`). (#13876, @rgrinberg)

- Allow for the `diff` action to diff entire directories (#13880, fixes #3567, @rgrinberg)

- A hint is now emitted when trying to build a target inside a directory that
  was excluded by a `(dirs ...)` stanza (#13919, @mefyl).

- Add --debug-backtraces to `$ dune {promote,trace,cache}` (#13933, @rgrinberg)

- Actions are now able to observe their project directory via
  `DUNE_PROJECT_ROOT` (#13934, @rgrinberg)

- Support hardlink sandboxing on Windows. (#13987, addresses part of #4362, @Alizter)

- `rocq.extraction`: Add `extracted_files` field in `(rocq 0.13)`, replacing
  `extracted_modules`, supporting extraction to languages other than OCaml
  (#13997, @Durbatuluk1701).

- Infer source directories as dependencies when they're as reference
  directories in `diff` actions.

- Add trace events for build start/stop/restarts (#14163, #14166, @rgrinberg)

- Generate `compile_commands.json` for C/C++ foreign stubs when building
  `@check` with `(lang dune 3.23)`. This enables `clangd`, `ccls`, and other
  tools that consume compilation databases. (#14185, fixes #3531, @Alizter)

- Add trace events for accepting clients and shutting down RPC (#14232, @rgrinberg)

- Back up the default trace file as `trace.csexp.old` before each build,
  preserving the previous trace for comparison. This does not apply when
  `--trace-file` is used. (#14269, @Alizter)

- Dune digests target files and directories in background threads (#13341,
  @rgrinbreg)

- `Dyn.pp` now prints valid OCaml literals for more constructors:
  - `Char` is quoted (e.g., `'a'`)
  - `Int32`/`Int64`/`Nativeint` include literal suffixes (`l`/`L`/`n`)
  - `Float` handles `infinity`, `neg_infinity`, and `nan`
  (#13394, grants #13378, @Alizter)

- Bump the minimal OCaml version required to build Dune from 4.08 to 4.14.
  (#13533, @Alizter)

- Starting from 3.23, user rules are sandboxed by default (#13805, @rgrinberg)

- Dune will no longer stat paths in the _build directory. This was done as protection
  from user rules accidentally touching things in the _build directory. This is forbidden,
  and dune offers rule sandboxing to prevent this (#13875, @rgrinberg)

- Improve mtime precision by no longer approximating them with floats (#13962,
  @rgrinberg).

- Remove `--makefile` (or `-m`) in `$ dune rules`. The sexp output is the only
  supported way of reflecting dune rules (#14069, @rgrinberg)

- Do not automatically promote files. Now, opam files must be manually
  promoted with `$ dune promote`. Their generation is triggered by `@install`,
  `@runtest`, and `@opam`. In release mode, .opam files aren't generated at all
  and whatever is in the source is used (#14108, @rgrinberg)

- Inline test runner generation is now sandboxed (#14257, @rgrinberg)

3.23.0_alpha2

Toggle 3.23.0_alpha2's commit message

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
Release 3.23.0~alpha2

CHANGES:

- Auto-inject `"menhir" {>= "20180523"}` into generated opam files when the
  menhir extension is used. Dune's menhir rules rely on `--infer-write-query`
  and `--infer-read-reply`, which require at least this version; without the
  lower bound, builds fail with older menhir installations.
  (#10707, @robinbb)

- Fix `--display=quiet` not suppressing "Entering directory" and "Leaving
  directory" messages when using `--root`. These messages are now deferred
  until there is actual output, so silent builds produce no noise.
  (#12974, fixes #12854, @Alizter)

- Fix an internal error when a module is shared between a `rocq.theory` and
  `rocq.extraction` stanza. The error now includes a hint pointing to the
  conflicting stanza. (#13733, @Durbatuluk1701)

- Fix cookies defined on `ppx_rewriter` being lost when that rewriter was used
  as a dependency of another `ppx_rewriter`. (#13737, fixes #3426, @Alizter)

- Improve opam file generation for packages that set `(dir ..)`. Such packages
  will now have a test target that is limited to this directory. (#13778, @rgrinberg)

- Stop duplicating dune diagnostics to subscribers over RPC (#13816,
  @rgrinberg)

- Fix dependency cycle when using the `package` with a library
  conditionally enabled via `enabled_if`. (#13833, @toots)

- Fix underspecification of dependencies in the sandbox for modules with
  interfaces. (#13842, @anmonteiro)

- Honor sandbox settings specified inside `(:include ..)` expressions in the `deps` field
  (#13898, @rgrinberg)

- Fix `dune pkg lock` failing when a `pin` stanza contains a `file://` URL with
  a relative path outside the workspace (#13915, fixes #10254, @shunueda)

- Use all stat attributes to detect patch back source tree changes (#13986, @rgrinberg)

- Use device and inode number for invalidating cached digests (#13991, @rgrinberg)

- Stop trying to set SO_REUSEADDR on unix sockets when setting up dune rpc
  (#14056, @rgrinberg)

- Fix autolocking to correctly detect changes to `(depends)` in watch mode
  (#14066, fixes #13234, @Alizter)

- Fix incremental builds for libraries using `(wrapped (transition ...))`.
  The compat shim modules were never recompiled when the inner module's
  interface changed, causing "inconsistent assumptions" errors.
  (#14090, fixes #14089, @Alizter)

- Fix Rocq configuration detection to use `rocq c --config` subcommand
  instead of `rocq --config` (#14093, fixes #13774, @Durbatuluk1701)

- Bump dune rpc's request pending request limit 10 to 100 (#14094, @rginberg)

- Invalidate stale cached digests in all build commands (#14126, @rgrinberg)

- Fix `root_module` generating duplicate module definitions when a
  findlib sub-package shares a directory with its parent (e.g.,
  `logs.lwt` alongside `logs`). (#14135, fixes #6148, @robinbb)

- Fix `dune subst` prepending a duplicate `version:` field to opam
  files that already contain one, instead of replacing it in place.
  (#14136, fixes #878, @robinbb)

- Fix `@ocaml-index` alias being generated for all contexts, causing build
  errors in multi-context workspaces where some libraries are disabled in
  non-default contexts. The alias is now only generated for the merlin context.
  (#14137, fixes #12007, @robinbb)

- Remove the warning about the deprecation of the coq stanza for
  dune lang before 3.21 since it has been introduced in this
  version (#14187, @bobot)

- `$ dune init` now generates projects with correct .opam files (#14192, @rgrinberg)

- Send SIGTERM before SIGKILL when cancelling child processes in watch
  mode, giving cleanup handlers a chance to run before escalating.
  (#14224, #14170, fixes #2445, @robinbb)

- Correctly specify dependencies for `generate_runner` in inline tests (#14276, @rgrinberg)

- Fix duplicate dune version bounds in generated opam files. When users
  declare `(dune (>= X.Y))` matching or exceeding the `(lang dune X.Y)`
  version, the generated opam `depends` no longer contains redundant
  constraints like `{>= "2.7" & >= "2.7"}`. (#3916, #11106, @robinbb)

- Fix inline tests not being executed for byte-only libraries. When a library
  has `(modes byte)`, the inline test runner is now linked in byte mode so the
  library's test code is included. (#9757, @robinbb)

- Add support for `c_library_flags` in foreign_stubs (#13484, @madroach)

- Move the management of Jsoo config details out of dune (#13613, @vouillon)

- Js_of_ocaml: share standalone runtimes (#13621, @vouillon)

- Allow multiple `(dirs ..)` stanzas in the same Dune file. Starting with
  `(lang dune 3.23)`, Dune takes the union of the specified directories
  (#13734, fixes #6249, @anmonteiro)

- Sandboxed rules are now allowed to produce diff promotions when `(corrections
  produce)` is set on the rules. Whenever such an action produces `foo.corrected`, it will
  be automatically registered as a promotion for `foo` (#13813, @rgrinberg)

- `$ dune clean` now accepts arguments to only remove certain targets from the
  _build directory (#13875, @rgrinberg)

- `$ dune promote` now promotes all paths that are a prefix of the path provided.
  For example, `$ dune promote foo` will promote `foo`, `foo/bar`, `foo/bar/baz`
  (but not `foobar`). (#13876, @rgrinberg)

- Allow for the `diff` action to diff entire directories (#13880, fixes #3567, @rgrinberg)

- A hint is now emitted when trying to build a target inside a directory that
  was excluded by a `(dirs ...)` stanza (#13919, @mefyl).

- Add --debug-backtraces to `$ dune {promote,trace,cache}` (#13933, @rgrinberg)

- Actions are now able to observe their project directory via
  `DUNE_PROJECT_ROOT` (#13934, @rgrinberg)

- Support hardlink sandboxing on Windows. (#13987, addresses part of #4362, @Alizter)

- `rocq.extraction`: Add `extracted_files` field in `(rocq 0.13)`, replacing
  `extracted_modules`, supporting extraction to languages other than OCaml
  (#13997, @Durbatuluk1701).

- Infer source directories as dependencies when they're as reference
  directories in `diff` actions.

- Add trace events for build start/stop/restarts (#14163, #14166, @rgrinberg)

- Generate `compile_commands.json` for C/C++ foreign stubs when building
  `@check` with `(lang dune 3.23)`. This enables `clangd`, `ccls`, and other
  tools that consume compilation databases. (#14185, fixes #3531, @Alizter)

- Add trace events for accepting clients and shutting down RPC (#14232, @rgrinberg)

- Back up the default trace file as `trace.csexp.old` before each build,
  preserving the previous trace for comparison. This does not apply when
  `--trace-file` is used. (#14269, @Alizter)

- Dune digests target files and directories in background threads (#13341,
  @rgrinbreg)

- `Dyn.pp` now prints valid OCaml literals for more constructors:
  - `Char` is quoted (e.g., `'a'`)
  - `Int32`/`Int64`/`Nativeint` include literal suffixes (`l`/`L`/`n`)
  - `Float` handles `infinity`, `neg_infinity`, and `nan`
  (#13394, grants #13378, @Alizter)

- Bump the minimal OCaml version required to build Dune from 4.08 to 4.14.
  (#13533, @Alizter)

- Starting from 3.23, user rules are sandboxed by default (#13805, @rgrinberg)

- Dune will no longer stat paths in the _build directory. This was done as protection
  from user rules accidentally touching things in the _build directory. This is forbidden,
  and dune offers rule sandboxing to prevent this (#13875, @rgrinberg)

- Improve mtime precision by no longer approximating them with floats (#13962,
  @rgrinberg).

- Remove `--makefile` (or `-m`) in `$ dune rules`. The sexp output is the only
  supported way of reflecting dune rules (#14069, @rgrinberg)

- Do not automatically promote files. Now, opam files must be manually
  promoted with `$ dune promote`. Their generation is triggered by `@install`,
  `@runtest`, and `@opam`. In release mode, .opam files aren't generated at all
  and whatever is in the source is used (#14108, @rgrinberg)

- Inline test runner generation is now sandboxed (#14257, @rgrinberg)

3.23.0_alpha1

Toggle 3.23.0_alpha1's commit message

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
Release 3.23.0~alpha1

CHANGES:

- Revert the change in behavior of `--diff-command` back to 3.21. Non-existent
  files are now passed to this command instead of being replaced with /dev/null
  (#14098, fixes 13891, @rgrinberg)

3.23.0_alpha0

Toggle 3.23.0_alpha0's commit message

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
Release 3.23.0~alpha0

CHANGES:

- Auto-inject `"menhir" {>= "20180523"}` into generated opam files when the
  menhir extension is used. Dune's menhir rules rely on `--infer-write-query`
  and `--infer-read-reply`, which require at least this version; without the
  lower bound, builds fail with older menhir installations.
  (#10707, @robinbb)

- Fix `--display=quiet` not suppressing "Entering directory" and "Leaving
  directory" messages when using `--root`. These messages are now deferred
  until there is actual output, so silent builds produce no noise.
  (#12974, fixes #12854, @Alizter)

- Fix an internal error when a module is shared between a `rocq.theory` and
  `rocq.extraction` stanza. The error now includes a hint pointing to the
  conflicting stanza. (#13733, @Durbatuluk1701)

- Fix cookies defined on `ppx_rewriter` being lost when that rewriter was used
  as a dependency of another `ppx_rewriter`. (#13737, fixes #3426, @Alizter)

- Improve opam file generation for packages that set `(dir ..)`. Such packages
  will now have a test target that is limited to this directory. (#13778, @rgrinberg)

- Stop duplicating dune diagnostics to subscribers over RPC (#13816,
  @rgrinberg)

- Fix dependency cycle when using the `package` with a library
  conditionally enabled via `enabled_if`. (#13833, @toots)

- Fix underspecification of dependencies in the sandbox for modules with
  interfaces. (#13842, @anmonteiro)

- Honor sandbox settings specified inside `(:include ..)` expressions in the `deps` field
  (#13898, @rgrinberg)

- Fix `dune pkg lock` failing when a `pin` stanza contains a `file://` URL with
  a relative path outside the workspace (#13915, fixes #10254, @shunueda)

- Use all stat attributes to detect patch back source tree changes (#13986, @rgrinberg)

- Use device and inode number for invalidating cached digests (#13991, @rgrinberg)

- Stop trying to set SO_REUSEADDR on unix sockets when setting up dune rpc
  (#14056, @rgrinberg)

- Fix autolocking to correctly detect changes to `(depends)` in watch mode
  (#14066, fixes #13234, @Alizter)

- Fix incremental builds for libraries using `(wrapped (transition ...))`.
  The compat shim modules were never recompiled when the inner module's
  interface changed, causing "inconsistent assumptions" errors.
  (#14090, fixes #14089, @Alizter)

- Fix Rocq configuration detection to use `rocq c --config` subcommand
  instead of `rocq --config` (#14093, fixes #13774, @Durbatuluk1701)

- Bump dune rpc's request pending request limit 10 to 100 (#14094, @rginberg)

- Invalidate stale cached digests in all build commands (#14126, @rgrinberg)

- Fix `root_module` generating duplicate module definitions when a
  findlib sub-package shares a directory with its parent (e.g.,
  `logs.lwt` alongside `logs`). (#14135, fixes #6148, @robinbb)

- Fix `dune subst` prepending a duplicate `version:` field to opam
  files that already contain one, instead of replacing it in place.
  (#14136, fixes #878, @robinbb)

- Fix `@ocaml-index` alias being generated for all contexts, causing build
  errors in multi-context workspaces where some libraries are disabled in
  non-default contexts. The alias is now only generated for the merlin context.
  (#14137, fixes #12007, @robinbb)

- Remove the warning about the deprecation of the coq stanza for
  dune lang before 3.21 since it has been introduced in this
  version (#14187, @bobot)

- `$ dune init` now generates projects with correct .opam files (#14192, @rgrinberg)

- Send SIGTERM before SIGKILL when cancelling child processes in watch
  mode, giving cleanup handlers a chance to run before escalating.
  (#14224, #14170, fixes #2445, @robinbb)

- Correctly specify dependencies for `generate_runner` in inline tests (#14276, @rgrinberg)

- Fix duplicate dune version bounds in generated opam files. When users
  declare `(dune (>= X.Y))` matching or exceeding the `(lang dune X.Y)`
  version, the generated opam `depends` no longer contains redundant
  constraints like `{>= "2.7" & >= "2.7"}`. (#3916, #11106, @robinbb)

- Fix inline tests not being executed for byte-only libraries. When a library
  has `(modes byte)`, the inline test runner is now linked in byte mode so the
  library's test code is included. (#9757, @robinbb)

- Add support for `c_library_flags` in foreign_stubs (#13484, @madroach)

- Move the management of Jsoo config details out of dune (#13613, @vouillon)

- Js_of_ocaml: share standalone runtimes (#13621, @vouillon)

- Allow multiple `(dirs ..)` stanzas in the same Dune file. Starting with
  `(lang dune 3.23)`, Dune takes the union of the specified directories
  (#13734, fixes #6249, @anmonteiro)

- Sandboxed rules are now allowed to produce diff promotions when `(corrections
  produce)` is set on the rules. Whenever such an action produces `foo.corrected`, it will
  be automatically registered as a promotion for `foo` (#13813, @rgrinberg)

- `$ dune clean` now accepts arguments to only remove certain targets from the
  _build directory (#13875, @rgrinberg)

- `$ dune promote` now promotes all paths that are a prefix of the path provided.
  For example, `$ dune promote foo` will promote `foo`, `foo/bar`, `foo/bar/baz`
  (but not `foobar`). (#13876, @rgrinberg)

- Allow for the `diff` action to diff entire directories (#13880, fixes #3567, @rgrinberg)

- A hint is now emitted when trying to build a target inside a directory that
  was excluded by a `(dirs ...)` stanza (#13919, @mefyl).

- Add --debug-backtraces to `$ dune {promote,trace,cache}` (#13933, @rgrinberg)

- Actions are now able to observe their project directory via
  `DUNE_PROJECT_ROOT` (#13934, @rgrinberg)

- Support hardlink sandboxing on Windows. (#13987, addresses part of #4362, @Alizter)

- `rocq.extraction`: Add `extracted_files` field in `(rocq 0.13)`, replacing
  `extracted_modules`, supporting extraction to languages other than OCaml
  (#13997, @Durbatuluk1701).

- Infer source directories as dependencies when they're as reference
  directories in `diff` actions.

- Add trace events for build start/stop/restarts (#14163, #14166, @rgrinberg)

- Generate `compile_commands.json` for C/C++ foreign stubs when building
  `@check` with `(lang dune 3.23)`. This enables `clangd`, `ccls`, and other
  tools that consume compilation databases. (#14185, fixes #3531, @Alizter)

- Add `%{pkg:<package>:<section>:<path>}` pform for resolving package install
  files. Works with workspace packages, lock-file packages, and installed
  packages. (#14200, fixes #14193, fixes #3378, @Alizter)

- Add trace events for accepting clients and shutting down RPC (#14232, @rgrinberg)

- Back up the default trace file as `trace.csexp.old` before each build,
  preserving the previous trace for comparison. This does not apply when
  `--trace-file` is used. (#14269, @Alizter)

- Dune digests target files and directories in background threads (#13341,
  @rgrinbreg)

- `Dyn.pp` now prints valid OCaml literals for more constructors:
  - `Char` is quoted (e.g., `'a'`)
  - `Int32`/`Int64`/`Nativeint` include literal suffixes (`l`/`L`/`n`)
  - `Float` handles `infinity`, `neg_infinity`, and `nan`
  (#13394, grants #13378, @Alizter)

- Bump the minimal OCaml version required to build Dune from 4.08 to 4.14.
  (#13533, @Alizter)

- Starting from 3.23, user rules are sandboxed by default (#13805, @rgrinberg)

- Dune will no longer stat paths in the _build directory. This was done as protection
  from user rules accidentally touching things in the _build directory. This is forbidden,
  and dune offers rule sandboxing to prevent this (#13875, @rgrinberg)

- Improve mtime precision by no longer approximating them with floats (#13962,
  @rgrinberg).

- Remove `--makefile` (or `-m`) in `$ dune rules`. The sexp output is the only
  supported way of reflecting dune rules (#14069, @rgrinberg)

- Do not automatically promote files. Now, opam files must be manually
  promoted with `$ dune promote`. Their generation is triggered by `@install`,
  `@runtest`, and `@opam`. In release mode, .opam files aren't generated at all
  and whatever is in the source is used (#14108, @rgrinberg)

- Inline test runner generation is now sandboxed (#14257, @rgrinberg)

3.22.2

Toggle 3.22.2's commit message

Unverified

This tag is not signed, but one or more authors requires that any tag attributed to them is signed.
Release 3.22.2

CHANGES:

- Revert the change in behavior of `--diff-command` back to 3.21. Non-existent
  files are now passed to this command instead of being replaced with /dev/null
  (#14098, fixes 13891, @rgrinberg)