diff --git a/doc/manual/rl-next/build-cores-auto-detect.md b/doc/manual/rl-next/build-cores-auto-detect.md deleted file mode 100644 index 67ab6995b4c..00000000000 --- a/doc/manual/rl-next/build-cores-auto-detect.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -synopsis: "`build-cores = 0` now auto-detects CPU cores" -prs: [13402] ---- - -When `build-cores` is set to `0`, nix now automatically detects the number of available CPU cores and passes this value via `NIX_BUILD_CORES`, instead of passing `0` directly. This matches the behavior when `build-cores` is unset. This prevents the builder from having to detect the number of cores. diff --git a/doc/manual/rl-next/git-lfs-ssh.md b/doc/manual/rl-next/git-lfs-ssh.md deleted file mode 100644 index c49addf1341..00000000000 --- a/doc/manual/rl-next/git-lfs-ssh.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -synopsis: "Fix Git LFS SSH issues" -prs: [13743] -issues: [13337] ---- - -Fixed some outstanding issues with Git LFS and SSH. - -* Added support for `NIX_SSHOPTS`. -* Properly use the parsed port from URL. -* Better use of the response of `git-lfs-authenticate` to determine API endpoint when the API is not exposed on port 443. diff --git a/doc/manual/rl-next/port-in-store-uris.md b/doc/manual/rl-next/port-in-store-uris.md deleted file mode 100644 index 8291c0fd159..00000000000 --- a/doc/manual/rl-next/port-in-store-uris.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -synopsis: "Add support for user@address:port syntax in store URIs" -prs: [3425] -issues: [7044] ---- - -It's now possible to specify the port used for the SSH stores directly in the store URL in accordance with [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986). Previously the only way to specify custom ports was via `ssh_config` or `NIX_SSHOPTS` environment variable, because Nix incorrectly passed the port number together with the host name to the SSH executable. This has now been fixed. - -This change affects [store references](@docroot@/store/types/index.md#store-url-format) passed via the `--store` and similar flags in CLI as well as in the configuration for [remote builders](@docroot@/command-ref/conf-file.md#conf-builders). For example, the following store URIs now work: - -- `ssh://127.0.0.1:2222` -- `ssh://[b573:6a48:e224:840b:6007:6275:f8f7:ebf3]:22` -- `ssh-ng://[b573:6a48:e224:840b:6007:6275:f8f7:ebf3]:22` diff --git a/doc/manual/rl-next/rfc4007-zone-id-in-uri-rfc6874.md b/doc/manual/rl-next/rfc4007-zone-id-in-uri-rfc6874.md deleted file mode 100644 index d5bc4736fb3..00000000000 --- a/doc/manual/rl-next/rfc4007-zone-id-in-uri-rfc6874.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -synopsis: "Represent IPv6 RFC4007 ZoneId literals in conformance with RFC6874" -prs: [13445] ---- - -Prior versions of Nix since [#4646](https://github.com/NixOS/nix/pull/4646) accepted [IPv6 scoped addresses](https://datatracker.ietf.org/doc/html/rfc4007) in URIs like [store references](@docroot@/store/types/index.md#store-url-format) in the textual representation with a literal percent character: `[fe80::1%18]`. This was ambiguous, because the the percent literal `%` is reserved by [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986), since it's used to indicate percent encoding. Nix now requires that the percent `%` symbol is percent-encoded as `%25`. This implements [RFC6874](https://datatracker.ietf.org/doc/html/rfc6874), which defines the representation of zone identifiers in URIs. The example from above now has to be specified as `[fe80::1%2518]`. diff --git a/doc/manual/source/SUMMARY.md.in b/doc/manual/source/SUMMARY.md.in index cc4748f56a6..8fed98c2c1b 100644 --- a/doc/manual/source/SUMMARY.md.in +++ b/doc/manual/source/SUMMARY.md.in @@ -138,6 +138,7 @@ - [Contributing](development/contributing.md) - [Releases](release-notes/index.md) {{#include ./SUMMARY-rl-next.md}} + - [Release 2.31 (2025-08-21)](release-notes/rl-2.31.md) - [Release 2.30 (2025-07-07)](release-notes/rl-2.30.md) - [Release 2.29 (2025-05-14)](release-notes/rl-2.29.md) - [Release 2.28 (2025-04-02)](release-notes/rl-2.28.md) diff --git a/doc/manual/source/release-notes/rl-2.31.md b/doc/manual/source/release-notes/rl-2.31.md new file mode 100644 index 00000000000..8b9d44c8370 --- /dev/null +++ b/doc/manual/source/release-notes/rl-2.31.md @@ -0,0 +1,96 @@ +# Release 2.31.0 (2025-08-21) + +- `build-cores = 0` now auto-detects CPU cores [#13402](https://github.com/NixOS/nix/pull/13402) + + When `build-cores` is set to `0`, Nix now automatically detects the number of available CPU cores and passes this value via `NIX_BUILD_CORES`, instead of passing `0` directly. This matches the behavior when `build-cores` is unset. This prevents the builder from having to detect the number of cores. + +- Fix Git LFS SSH issues [#13337](https://github.com/NixOS/nix/issues/13337) [#13743](https://github.com/NixOS/nix/pull/13743) + + Fixed some outstanding issues with Git LFS and SSH. + + * Added support for `NIX_SSHOPTS`. + * Properly use the parsed port from URL. + * Better use of the response of `git-lfs-authenticate` to determine API endpoint when the API is not exposed on port 443. + +- Add support for `user@address:port` syntax in store URIs [#7044](https://github.com/NixOS/nix/issues/7044) [#3425](https://github.com/NixOS/nix/pull/3425) + + It's now possible to specify the port used for SSH stores directly in the store URL in accordance with [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986). Previously the only way to specify custom ports was via `ssh_config` or the `NIX_SSHOPTS` environment variable, because Nix incorrectly passed the port number together with the host name to the SSH executable. + + This change affects [store references](@docroot@/store/types/index.md#store-url-format) passed via the `--store` and similar flags in CLI as well as in the configuration for [remote builders](@docroot@/command-ref/conf-file.md#conf-builders). For example, the following store URIs now work: + + - `ssh://127.0.0.1:2222` + - `ssh://[b573:6a48:e224:840b:6007:6275:f8f7:ebf3]:22` + - `ssh-ng://[b573:6a48:e224:840b:6007:6275:f8f7:ebf3]:22` + +- Represent IPv6 RFC4007 ZoneId literals in conformance with RFC6874 [#13445](https://github.com/NixOS/nix/pull/13445) + + Prior versions of Nix since [#4646](https://github.com/NixOS/nix/pull/4646) accepted [IPv6 scoped addresses](https://datatracker.ietf.org/doc/html/rfc4007) in URIs like [store references](@docroot@/store/types/index.md#store-url-format) in the textual representation with a literal percent character: `[fe80::1%18]`. This was ambiguous, because the the percent literal `%` is reserved by [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986), since it's used to indicate percent encoding. Nix now requires that the percent `%` symbol is percent-encoded as `%25`. This implements [RFC6874](https://datatracker.ietf.org/doc/html/rfc6874), which defines the representation of zone identifiers in URIs. The example from above now has to be specified as `[fe80::1%2518]`. + +- Use WAL mode for SQLite cache databases [#13800](https://github.com/NixOS/nix/pull/13800) + + Previously, Nix used SQLite's "truncate" mode for caches. However, this could cause a Nix process to block if another process was updating the cache. This was a problem for the flake evaluation cache in particular, since it uses long-running transactions. Thus, concurrent Nix commands operating on the same flake could be blocked for an unbounded amount of time. WAL mode avoids this problem. + + This change required updating the versions of the SQLite caches. For instance, `eval-cache-v5.sqlite` is now `eval-cache-v6.sqlite`. + +- Enable parallel marking in bdwgc [#13708](https://github.com/NixOS/nix/pull/13708) + + Previously marking was done by only one thread, which takes a long time if the heap gets big. Enabling parallel marking speeds up evaluation a lot, for example (on a Ryzen 9 5900X 12-Core): + + * `nix search nixpkgs` from 24.3s to 18.9s. + * Evaluating the `NixOS/nix/2.21.2` flake regression test from 86.1s to 71.2s. + +- New command `nix flake prefetch-inputs` [#13565](https://github.com/NixOS/nix/pull/13565) + + This command fetches all inputs of a flake in parallel. This can be a lot faster than the serialized on-demand fetching during regular flake evaluation. The downside is that it may fetch inputs that aren't normally used. + +- Add `warn-short-path-literals` setting [#13489](https://github.com/NixOS/nix/pull/13489) + + This setting, when enabled, causes Nix to emit warnings when encountering relative path literals that don't start with `.` or `/`, for instance suggesting that `foo/bar` should be rewritten to `./foo/bar`. + +- When updating a lock, respect the input's lock file [#13437](https://github.com/NixOS/nix/pull/13437) + + For example, if a flake has a lock for `a` and `a/b`, and we change the flakeref for `a`, previously Nix would fetch the latest version of `b` rather than using the lock for `b` from `a`. + +- Implement support for Git hashing with SHA-256 [#13543](https://github.com/NixOS/nix/pull/13543) + + The experimental support for [Git-hashing](@docroot@/development/experimental-features.md#xp-feature-git-hashing) store objects now also includes support for SHA-256, not just SHA-1, in line with upstream Git. + +## Contributors + +This release was made possible by the following 34 contributors: + +- John Soo [**(@jsoo1)**](https://github.com/jsoo1) +- Alan Urmancheev [**(@alurm)**](https://github.com/alurm) +- Manse [**(@PedroManse)**](https://github.com/PedroManse) +- Pol Dellaiera [**(@drupol)**](https://github.com/drupol) +- DavHau [**(@DavHau)**](https://github.com/DavHau) +- Leandro Emmanuel Reina Kiperman [**(@kip93)**](https://github.com/kip93) +- h0nIg [**(@h0nIg)**](https://github.com/h0nIg) +- Philip Taron [**(@philiptaron)**](https://github.com/philiptaron) +- Eelco Dolstra [**(@edolstra)**](https://github.com/edolstra) +- Connor Baker [**(@ConnorBaker)**](https://github.com/ConnorBaker) +- kenji [**(@a-kenji)**](https://github.com/a-kenji) +- Oleksandr Knyshuk [**(@k1gen)**](https://github.com/k1gen) +- Maciej Krüger [**(@mkg20001)**](https://github.com/mkg20001) +- Justin Bailey [**(@jgbailey-well)**](https://github.com/jgbailey-well) +- Emily [**(@emilazy)**](https://github.com/emilazy) +- Volker Diels-Grabsch [**(@vog)**](https://github.com/vog) +- gustavderdrache [**(@gustavderdrache)**](https://github.com/gustavderdrache) +- Elliot Cameron [**(@de11n)**](https://github.com/de11n) +- Alexander V. Nikolaev [**(@avnik)**](https://github.com/avnik) +- tomberek [**(@tomberek)**](https://github.com/tomberek) +- Matthew Kenigsberg [**(@mkenigs)**](https://github.com/mkenigs) +- Sergei Zimmerman [**(@xokdvium)**](https://github.com/xokdvium) +- Cosima Neidahl [**(@OPNA2608)**](https://github.com/OPNA2608) +- John Ericson [**(@Ericson2314)**](https://github.com/Ericson2314) +- m4dc4p [**(@m4dc4p)**](https://github.com/m4dc4p) +- Graham Christensen [**(@grahamc)**](https://github.com/grahamc) +- Jason Yundt [**(@Jayman2000)**](https://github.com/Jayman2000) +- Jens Petersen [**(@juhp)**](https://github.com/juhp) +- the-sun-will-rise-tomorrow [**(@the-sun-will-rise-tomorrow)**](https://github.com/the-sun-will-rise-tomorrow) +- Farid Zakaria [**(@fzakaria)**](https://github.com/fzakaria) +- AGawas [**(@aln730)**](https://github.com/aln730) +- Robert Hensing [**(@roberth)**](https://github.com/roberth) +- Dmitry Bogatov [**(@KAction)**](https://github.com/KAction) +- Jörg Thalheim [**(@Mic92)**](https://github.com/Mic92) +- Philipp Otterbein diff --git a/maintainers/data/release-credits-email-to-handle.json b/maintainers/data/release-credits-email-to-handle.json index 48e8685e6d9..ea37afb9052 100644 --- a/maintainers/data/release-credits-email-to-handle.json +++ b/maintainers/data/release-credits-email-to-handle.json @@ -185,5 +185,23 @@ "gwenn.lebihan7@gmail.com": "gwennlbh", "hey@ewen.works": "gwennlbh", "matt@sturgeon.me.uk": "MattSturgeon", - "pbsds@hotmail.com": "pbsds" + "pbsds@hotmail.com": "pbsds", + "sergei@zimmerman.foo": "xokdvium", + "v@njh.eu": "vog", + "pedro.manse@dmk3.com.br": "PedroManse", + "arnavgawas707@gmail.com": "aln730", + "mkg20001@gmail.com": "mkg20001", + "avn@avnik.info": "avnik", + "olk@disr.it": "k1gen", + "108410815+alurm@users.noreply.github.com": "alurm", + "kaction.cc@gmail.com": "KAction", + "juhpetersen@gmail.com": "juhp", + "opna2608@protonmail.com": "OPNA2608", + "jgbailey@gmail.com": "m4dc4p", + "justin.bailey@well.co": "jgbailey-well", + "130508846+de11n@users.noreply.github.com": "de11n", + "ConnorBaker01@Gmail.com": "ConnorBaker", + "jsoo1@asu.edu": "jsoo1", + "hsngrmpf+github@gmail.com": "DavHau", + "matthew@floxdev.com": "mkenigs" } \ No newline at end of file diff --git a/maintainers/data/release-credits-handle-to-name.json b/maintainers/data/release-credits-handle-to-name.json index a6352c44b22..e2510548d90 100644 --- a/maintainers/data/release-credits-handle-to-name.json +++ b/maintainers/data/release-credits-handle-to-name.json @@ -162,5 +162,20 @@ "pbsds": "Peder Bergebakken Sundt", "egorkonovalov": "Egor Konovalov", "jayeshv": "jayeshv", - "vcunat": "Vladim\u00edr \u010cun\u00e1t" + "vcunat": "Vladim\u00edr \u010cun\u00e1t", + "mkenigs": "Matthew Kenigsberg", + "alurm": "Alan Urmancheev", + "jgbailey-well": "Justin Bailey", + "k1gen": "Oleksandr Knyshuk", + "juhp": "Jens Petersen", + "de11n": "Elliot Cameron", + "jsoo1": "John Soo", + "m4dc4p": null, + "PedroManse": "Manse", + "OPNA2608": "Cosima Neidahl", + "mkg20001": "Maciej Kr\u00fcger", + "avnik": "Alexander V. Nikolaev", + "DavHau": null, + "aln730": "AGawas", + "vog": "Volker Diels-Grabsch" } \ No newline at end of file diff --git a/maintainers/release-process.md b/maintainers/release-process.md index 37b38fb9f7a..fa47bbb1d89 100644 --- a/maintainers/release-process.md +++ b/maintainers/release-process.md @@ -29,6 +29,7 @@ release: ```console $ export VERSION=X.YY $ git checkout -b release-notes + $ export GITHUB_TOKEN=... $ ./maintainers/release-notes ```