Skip to content

Conversation

DavHau
Copy link
Member

@DavHau DavHau commented Jun 16, 2025

This improves the implementation of dumpVars by removing a call to install.

This improves performance when sourcing setup.sh by more than 10%
It should also improve the performance when transitioning between build phases significantly as no process executions are issued anymore,

A test is added, which ensures that no extra execve calls are issued while sourcing setup.sh.
This test can also be used to benchmark the sourcing of different implementations of setup.sh.

Things done

  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)
    • sandbox = relaxed
    • sandbox = true
  • Tested, as applicable:
  • Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
  • Tested basic functionality of all binary files (usually in ./result/bin/)
  • Nixpkgs 25.11 Release Notes (or backporting 24.11 and 25.05 Nixpkgs Release notes)
    • (Package updates) Added a release notes entry if the change is major or breaking
  • NixOS 25.11 Release Notes (or backporting 24.11 and 25.05 NixOS Release notes)
    • (Module updates) Added a release notes entry if the change is significant
    • (Module addition) Added a release notes entry if adding a new NixOS module
  • Fits CONTRIBUTING.md, pkgs/README.md, maintainers/README.md and other contributing documentation in corresponding paths.

Add a 👍 reaction to pull requests you find important.

@DavHau DavHau force-pushed the generic-builder branch 3 times, most recently from 18fcc19 to dba8df4 Compare June 16, 2025 05:14
@github-actions github-actions bot added 10.rebuild-darwin: 501+ This PR causes many rebuilds on Darwin and should normally target the staging branches. 10.rebuild-darwin: 5001+ This PR causes many rebuilds on Darwin and must target the staging branches. 10.rebuild-linux: 501+ This PR causes many rebuilds on Linux and should normally target the staging branches. 10.rebuild-linux: 5001+ This PR causes many rebuilds on Linux and must target the staging branches. 6.topic: stdenv Standard environment labels Jun 16, 2025
Copy link
Contributor

@philiptaron philiptaron left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I love this!

One request: please put this new test in tests.stdenv, as that's what I run in order to see whether all parts of the stdenv work. The generic builder is an integral part of the stdenv in my view.

For the performance test, consider using hyperfine.

For the non-performance section of the test, please extract it into its own test. It's not performance testing -- it's correctness!

@github-project-automation github-project-automation bot moved this to In Progress in Stdenv Jun 16, 2025
@DavHau DavHau force-pushed the generic-builder branch from dba8df4 to f9e76c8 Compare June 16, 2025 15:18
This improves the implementation of `dumpVars` by removing a call to `install`.

This improves performance when sourcing setup.sh by more than 10%
It should also improve the performance when transitioning between build phases significantly as no process executions are issued anymore,

A test is added, which ensures that no extra execve calls are issued while sourcing setup.sh.
@DavHau DavHau force-pushed the generic-builder branch from f9e76c8 to 4a42314 Compare June 16, 2025 15:21
@DavHau
Copy link
Member Author

DavHau commented Jun 16, 2025

Maybe having the benchmark in tree is a bit too noisy anyways. What's important is the test that counts the execve calls. I factored it out and put it in tests.stdenv.

It can now be built via tests.stdenv.ensure-no-execve-in-setup-sh

@DavHau DavHau requested a review from philiptaron June 16, 2025 15:22
@philiptaron
Copy link
Contributor

nixpkgs-review result

Generated using nixpkgs-review.

Command: nixpkgs-review pr 417132 --package tests.stdenv.rejectedHashes --package tests.stdenv.hooks --package tests.stdenv.test-inputDerivation-fixed-output --package tests.stdenv.test-concat-to --package tests.stdenv.override --package tests.stdenv.test-cc-wrapper-substitutions --package tests.stdenv.test-inputDerivation --package tests.stdenv.recurseForDerivations --package tests.stdenv.test-concat-strings-sep --package tests.stdenv.test-prepend-append-to-var --package tests.stdenv.test-env-derivation --package tests.stdenv.overrideDerivation --package tests.stdenv.test-structured-env-attrset --package tests.stdenv.test-env-attrset --package tests.stdenv.structuredAttrsByDefault --package tests.stdenv.outputs-no-out
Commit: 4a42314f724525d77499f3d6be39bcd5db3fdd6b


x86_64-linux

✅ 80 packages built:
  • tests.stdenv.hooks.compress-man-pages
  • tests.stdenv.hooks.make-symlinks-relative
  • tests.stdenv.hooks.make-symlinks-relative.man (tests.stdenv.hooks.make-symlinks-relative.man.man)
  • tests.stdenv.hooks.move-docs
  • tests.stdenv.hooks.move-lib64
  • tests.stdenv.hooks.move-sbin
  • tests.stdenv.hooks.no-broken-symlinks.fail-broken-symlinks-absolute
  • tests.stdenv.hooks.no-broken-symlinks.fail-broken-symlinks-relative
  • tests.stdenv.hooks.no-broken-symlinks.fail-dangling-symlink-absolute
  • tests.stdenv.hooks.no-broken-symlinks.fail-dangling-symlink-relative
  • tests.stdenv.hooks.no-broken-symlinks.fail-reflexive-symlink-absolute
  • tests.stdenv.hooks.no-broken-symlinks.fail-reflexive-symlink-relative
  • tests.stdenv.hooks.no-broken-symlinks.pass-all-broken-symlinks-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-all-broken-symlinks-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-broken-symlinks-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-broken-symlinks-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-dangling-symlink-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-dangling-symlink-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-reflexive-symlink-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-reflexive-symlink-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-unreadable-symlink-absolute-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-unreadable-symlink-relative-allowed
  • tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-absolute
  • tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-absolute
  • tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-relative
  • tests.stdenv.hooks.no-broken-symlinks.pass-valid-symlink-relative
  • tests.stdenv.hooks.patch-shebangs
  • tests.stdenv.hooks.prune-libtool-files
  • tests.stdenv.hooks.reproducible-builds
  • tests.stdenv.hooks.set-source-date-epoch-to-latest
  • tests.stdenv.outputs-no-out
  • tests.stdenv.structuredAttrsByDefault.hooks.compress-man-pages
  • tests.stdenv.structuredAttrsByDefault.hooks.make-symlinks-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.make-symlinks-relative.man (tests.stdenv.structuredAttrsByDefault.hooks.make-symlinks-relative.man.man)
  • tests.stdenv.structuredAttrsByDefault.hooks.move-docs
  • tests.stdenv.structuredAttrsByDefault.hooks.move-lib64
  • tests.stdenv.structuredAttrsByDefault.hooks.move-sbin
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-broken-symlinks-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-broken-symlinks-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-dangling-symlink-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-dangling-symlink-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-reflexive-symlink-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.fail-reflexive-symlink-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-all-broken-symlinks-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-all-broken-symlinks-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-broken-symlinks-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-broken-symlinks-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-dangling-symlink-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-dangling-symlink-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-reflexive-symlink-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-reflexive-symlink-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-unreadable-symlink-absolute-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-unreadable-symlink-relative-allowed
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-absolute
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-outside-nix-store-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.no-broken-symlinks.pass-valid-symlink-relative
  • tests.stdenv.structuredAttrsByDefault.hooks.patch-shebangs
  • tests.stdenv.structuredAttrsByDefault.hooks.prune-libtool-files
  • tests.stdenv.structuredAttrsByDefault.hooks.reproducible-builds
  • tests.stdenv.structuredAttrsByDefault.hooks.set-source-date-epoch-to-latest
  • tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions
  • tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info (tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info.info, tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.info.man)
  • tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man (tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man.info, tests.stdenv.structuredAttrsByDefault.test-cc-wrapper-substitutions.man.man)
  • tests.stdenv.structuredAttrsByDefault.test-concat-strings-sep
  • tests.stdenv.structuredAttrsByDefault.test-concat-to
  • tests.stdenv.structuredAttrsByDefault.test-golden-example-structuredAttrs
  • tests.stdenv.structuredAttrsByDefault.test-prepend-append-to-var
  • tests.stdenv.structuredAttrsByDefault.test-structured-env-attrset
  • tests.stdenv.test-cc-wrapper-substitutions
  • tests.stdenv.test-cc-wrapper-substitutions.info (tests.stdenv.test-cc-wrapper-substitutions.info.info, tests.stdenv.test-cc-wrapper-substitutions.info.man)
  • tests.stdenv.test-cc-wrapper-substitutions.man (tests.stdenv.test-cc-wrapper-substitutions.man.info, tests.stdenv.test-cc-wrapper-substitutions.man.man)
  • tests.stdenv.test-concat-strings-sep
  • tests.stdenv.test-concat-to
  • tests.stdenv.test-env-attrset
  • tests.stdenv.test-env-derivation
  • tests.stdenv.test-inputDerivation
  • tests.stdenv.test-inputDerivation-fixed-output
  • tests.stdenv.test-prepend-append-to-var
  • tests.stdenv.test-structured-env-attrset

@philiptaron philiptaron merged commit 26b1b38 into NixOS:staging Jun 16, 2025
25 of 27 checks passed
@github-project-automation github-project-automation bot moved this from In Progress to Done in Stdenv Jun 16, 2025
@terlar
Copy link
Contributor

terlar commented Jul 23, 2025

I bisected that this broke dockerTools.streamLayeredImage when used together with enableFakechroot = true.

error: builder for '/nix/store/i9bhsplyphjw7nwl0wgppy9wzlr41lgp-debug-stream-layered-image-customisation-layer.drv' failed with exit code 1;
       last 2 log lines:
       > proot warning: can't sanitize binding "/sys/": No such file or directory
       > proot warning: can't sanitize binding "/nix/store/a75phllwjkp9jgmf6fkhw7qqkyy97idk-debug-stream-layered-image-customisation-layer/layer.tar": No such file or directory
       For full logs, run 'nix log /nix/store/i9bhsplyphjw7nwl0wgppy9wzlr41lgp-debug-stream-layered-image-customisation-layer.drv'.
4a42314f724525d77499f3d6be39bcd5db3fdd6b is the first bad commit
commit 4a42314f724525d77499f3d6be39bcd5db3fdd6b
Author: DavHau <hsngrmpf+github@gmail.com>
Date:   Mon Jun 16 11:56:12 2025 +0700

    generic-builder: optimize - reduce execve calls when sourcing

    This improves the implementation of `dumpVars` by removing a call to `install`.

    This improves performance when sourcing setup.sh by more than 10%
    It should also improve the performance when transitioning between build phases significantly as no process executions are issued anymore,

    A test is added, which ensures that no extra execve calls are issued while sourcing setup.sh.

 pkgs/stdenv/generic/setup.sh | 19 ++++++++++++-------
 pkgs/test/stdenv/default.nix | 45 +++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 56 insertions(+), 8 deletions(-)
bisect found first bad commit

Here is the minimal reproducible nix file docker-tools-test.nix:

{
  system ? builtins.currentSystem,
  nixpkgs ? ./.,
}:

let
  pkgs = import nixpkgs { inherit system; };
in

builtins.elemAt (pkgs.dockerTools.streamLayeredImage {
  name = "debug-stream-layered-image";
  enableFakechroot = true;
  fakeRootCommands = ''
    echo Is it working?
  '';
}).conf.layersJsonFile.exclude_paths 1

With this file I could run:

git bisect run nix build -f docker-tools-test.nix

The hoops is there to reduce the build time during bisecting as the error occurs inside the customisationLayer (https://github.com/NixOS/nixpkgs/blob/4a42314f724525d77499f3d6be39bcd5db3fdd6b/pkgs/build-support/docker/default.nix#L1059C7-L1059C26) and adding the other parts greatly increases the build scope.

I'm currently investigating what part of this caused the issue. Perhaps it could be:

export 2>/dev/null > "$NIX_BUILD_TOP/env-vars"

being changed from:

export 2>/dev/null >| "$NIX_BUILD_TOP/env-vars"

However every iteration of this takes massive amount of time.

@terlar
Copy link
Contributor

terlar commented Jul 23, 2025

This patch solved the issue, mainly the || true part:

diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh
index 8941c134f6fc..6d4dcad62f01 100644
--- a/pkgs/stdenv/generic/setup.sh
+++ b/pkgs/stdenv/generic/setup.sh
@@ -1189,7 +1189,7 @@ dumpVars() {
         umask 0077

         # Dump all environment variables to the env-vars file
-        export 2>/dev/null > "$NIX_BUILD_TOP/env-vars"
+        export 2>/dev/null >| "$NIX_BUILD_TOP/env-vars" || true

         # Restore original umask
         umask "$old_umask"

So seems somehow export is failing and that wreaks havoc.

@terlar
Copy link
Contributor

terlar commented Jul 24, 2025

@DavHau and @philiptaron what do you think? Would this fix be correct, or does this need more investigation?

@philiptaron
Copy link
Contributor

I don't think it's correct. I don't have enough information from your problem report to understand why it's failing...

  1. What's different about dockerTools.streamLayeredImage setting enableFakechroot = true that causes this to error?
  2. Is $NIX_BUILD_TOP set to a directory that exists?
  3. Is $NIX_BUILD_TOP set to a directory that's writable?
  4. Is export remapped to something else?

I don't think I'd merge a change to setup.sh for this usecase specifically, especially if there were workarounds available in that specific derivation.

@terlar
Copy link
Contributor

terlar commented Jul 28, 2025

@philiptaron

  1. The main difference between these two is that enableFakechroot = true uses proot while the other does not:
            if enableFakechroot then
              ''
                proot -r $PWD/old_out ${bind-paths} --pwd=/ fakeroot bash -e -c '
                  if [ -e "$NIX_ATTRS_SH_FILE" ]; then . "$NIX_ATTRS_SH_FILE"; fi
                  source $stdenv/setup
                  eval "$fakeRootCommands"
                  tar \
                    --sort name \
                    --exclude=./dev \
                    --exclude=./proc \
                    --exclude=./sys \
                    --exclude=.${builtins.storeDir} \
                    --numeric-owner --mtime "@$SOURCE_DATE_EPOCH" \
                    --hard-dereference \
                    -cf $out/layer.tar .
                '
              ''
            else
              ''
                fakeroot bash -e -c '
                  if [ -e "$NIX_ATTRS_SH_FILE" ]; then . "$NIX_ATTRS_SH_FILE"; fi
                  source $stdenv/setup
                  cd old_out
                  eval "$fakeRootCommands"
                  tar \
                    --sort name \
                    --numeric-owner --mtime "@$SOURCE_DATE_EPOCH" \
                    --hard-dereference \
                    -cf $out/layer.tar .
                '
              ''
  1. Seems the $NIX_BUILD_TOP directory doesn't exist.
  2. and therefore is not accessible.
  3. export is a shell builtin.

Adding a mkdir -p $NIX_BUILD_TOP above the source $stdenv/setup seems to solve it. Does that make sense? In that case I can prepare a PR, good thing is that then we do not need to touch the generic builder.

Alternatively add it to bind-paths and exclude (which it probably should be anyways):

diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix
index 14b952424ca0..de4a466b4882 100644
--- a/pkgs/build-support/docker/default.nix
+++ b/pkgs/build-support/docker/default.nix
@@ -1048,6 +1048,7 @@ rec {
           "/dev/"
           "/proc/"
           "/sys/"
+          "$NIX_BUILD_TOP"
           "${builtins.storeDir}/"
           "$out/layer.tar"
         ]
@@ -1085,6 +1086,7 @@ rec {
                     --exclude=./proc \
                     --exclude=./sys \
                     --exclude=.${builtins.storeDir} \
+                    --exclude=.$NIX_BUILD_TOP \
                     --numeric-owner --mtime "@$SOURCE_DATE_EPOCH" \
                     --hard-dereference \
                     -cf $out/layer.tar .

@deliciouslytyped
Copy link
Contributor

Assuming I bisected correctly, for some reason this breaks nix-shell for me, maybe I have an old version of Nix?

$  nix-shell -I nixpkgs=$(realpath .) -vp signal-desktop --run "signal-desktop"

$
$ nix-shell --version
nix-shell (Nix) 2.18.5

terlar added a commit to terlar/nixpkgs that referenced this pull request Jul 30, 2025
This broke with NixOS#417132 where the previous behaviour of suppressing
errors of the export into $NIX_BUILD_TOP/env-vars when dumping env vars.

This error seems to stem from the non-existance of $NIX_BUILD_TOP. This
fix ensures the NIX_BUILD_TOP propagates into the proot environment.
@terlar
Copy link
Contributor

terlar commented Jul 30, 2025

@deliciouslytyped Your nix-shell probably also doesn't have $NIX_BUILD_TOP set? This is a regression in behavior where this was previously suppressed. I guess there are a few non-standard places where $stdenv/setup is sourced where we run into this.

Edit: I don't seem to be able to reproduce an error with your command. What error do you get?

terlar added a commit to terlar/nixpkgs that referenced this pull request Jul 30, 2025
This broke with NixOS#417132 where the previous behaviour of suppressing
errors of the export into $NIX_BUILD_TOP/env-vars when dumping env vars.

This error seems to stem from the non-existance of $NIX_BUILD_TOP. This
fix ensures the NIX_BUILD_TOP propagates into the proot environment.
@deliciouslytyped
Copy link
Contributor

There is no visible error, what I see is what I posted.

$ nix-shell -vvvvvv -p hello -I nixpkgs=channel:nixos-unstable --run "hello"
...
substitution of '/nix/store/vj1c3wf9c11a0qs6p3ymfvrnsdgsdcbq-source-stdenv.sh': goal destroyed
substitution of '/nix/store/shkw4qm9qcw5sc5n1k5jznc83ny02r39-default-builder.sh': goal destroyed
performing daemon worker op: 41
Sourcing nix-shell with file /tmp/nix-shell-398061-0/rc and contents:
_nix_shell_clean_tmpdir() { command rm -rf '/tmp/nix-shell-398061-0'; }; trap _nix_shell_clean_tmpdir EXIT; exitHooks+=(_nix_shell_clean_tmpdir); failureHooks+=(_nix_shell_clean_tmpdir); [ -n "$PS1" ] && [ -e ~/.bashrc ] && source ~/.bashrc;p=$PATH; unset PATH;dontAddDisableDepTrack=1;

[ -e $stdenv/setup ] && source $stdenv/setup; PATH=$PATH:$p; unset p; PATH='/nix/store/lb33m49aslmvkx5l4xrkiy7m6nbh2kqf-bash-interactive-5.3p0/bin':"$PATH"; SHELL='/nix/store/lb33m49aslmvkx5l4xrkiy7m6nbh2kqf-bash-interactive-5.3p0/bin/bash'; BASH='/nix/store/lb33m49aslmvkx5l4xrkiy7m6nbh2kqf-bash-interactive-5.3p0/bin/bash'; set +e; [ -n "$PS1" -a -z "$NIX_SHELL_PRESERVE_PROMPT" ] && PS1='\n\[\033[1;32m\][nix-shell:\w]\$\[\033[0m\] '; if [ "$(type -t runHook)" = function ]; then runHook shellHook; fi; unset NIX_ENFORCE_PURITY; shopt -u nullglob; unset TZ; shopt -s execfail;hello
exit

$

@deliciouslytyped
Copy link
Contributor

deliciouslytyped commented Aug 2, 2025

I forgot NIX_DEBUG can have a higher value set and thought it wasn't working. Indeed the failure hook seems to be triggered in dumpVars at export 2>/dev/null > "$NIX_BUILD_TOP/env-vars".

This is a regression in behavior where this was previously suppressed.

I don't understand what you mean by this.

@deliciouslytyped
Copy link
Contributor

deliciouslytyped commented Aug 2, 2025

Ok yeah, @philiptaron @DavHau the code before the patch had an || true on the export block. Why was that removed? (And why doesn't this fail in whatever other case?)

Edit: It exists since 2015

export > "$NIX_BUILD_TOP/env-vars" || true

@deliciouslytyped
Copy link
Contributor

@terlar I was probably unclear about this, the issue is that the failure hook is called and nix-shell immediately exits, the shell environment isn't entered.

philiptaron added a commit to philiptaron/nixpkgs that referenced this pull request Aug 2, 2025
This resolves the spate of user reports about strange failures in various derivations.

See NixOS#417132 (comment) and related.
philiptaron added a commit to philiptaron/nixpkgs that referenced this pull request Aug 2, 2025
This resolves the spate of user reports about strange failures in various derivations.

See NixOS#417132 (comment) and related.
@philiptaron
Copy link
Contributor

I proposed a fix for $NIX_BUILD_TOP not being a directory in the dumpVars function.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
6.topic: stdenv Standard environment 10.rebuild-darwin: 501+ This PR causes many rebuilds on Darwin and should normally target the staging branches. 10.rebuild-darwin: 5001+ This PR causes many rebuilds on Darwin and must target the staging branches. 10.rebuild-linux: 501+ This PR causes many rebuilds on Linux and should normally target the staging branches. 10.rebuild-linux: 5001+ This PR causes many rebuilds on Linux and must target the staging branches.
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

4 participants