A modern, delicious implementation of the Nix package manager, focused on correctness, usability, and growth — and committed to doing right by its community
Find a file
John Ericson c11836126b Harden tests' bash
Use `set -u` and `set -o pipefail` to catch accidental mistakes and
failures more strongly.

 - `set -u` catches the use of undefined variables
 - `set -o pipefail` catches failures (like `set -e`) earlier in the
   pipeline.

This makes the tests a bit more robust. It is nice to read code not
worrying about these spurious success paths (via uncaught) errors
undermining the tests. Indeed, I caught some bugs doing this.

There are a few tests where we run a command that should fail, and then
search its output to make sure the failure message is one that we
expect. Before, since the `grep` was the last command in the pipeline
the exit code of those failing programs was silently ignored. Now with
`set -o pipefail` it won't be, and we have to do something so the
expected failure doesn't accidentally fail the test.

To do that we use `expect` and a new `expectStderr` to check for the
exact failing exit code. See the comments on each for why.

`grep -q` is replaced with `grepQuiet`, see the comments on that
function for why.

`grep -v` when we just want the exit code is replaced with `grepInverse,
see the comments on that function for why.

`grep -q -v` together is, surprise surprise, replaced with
`grepQuietInverse`, which is both combined.

Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
2023-03-08 10:26:30 -05:00
.github Switch to cachix/install-nix-action@v20 2023-03-04 11:41:24 +01:00
config Run autoupdate 2021-06-01 11:42:38 +02:00
contrib function-trace: always show the trace 2019-09-18 23:23:21 +02:00
doc/manual clarify definition of "installable" 2023-03-05 01:46:17 +01:00
m4
maintainers Merge pull request #7580 from fricklerhandwerk/nix-team-add-john 2023-03-06 15:02:07 +01:00
misc Merge pull request #6645 from Artturin/limitinfinity 2022-12-09 13:36:13 +01:00
mk Harden tests' bash 2023-03-08 10:26:30 -05:00
perl Fix building with GCC 9 2023-02-10 18:38:57 +01:00
scripts Merge pull request #7925 from cole-h/fixup-xdg-nix-env 2023-03-01 23:01:42 +01:00
src Fix uninitialized readFromStdIn variable 2023-03-08 13:53:20 +01:00
tests Harden tests' bash 2023-03-08 10:26:30 -05:00
.dir-locals.el .dir-locals.el: Set c-block-comment-prefix 2020-07-10 11:21:06 +02:00
.editorconfig
.gitignore Clean up daemon handling 2023-02-23 11:31:44 -05:00
.version Bump version 2023-03-02 10:01:24 +01:00
boehmgc-coroutine-sp-fallback.diff Always disable GC in a coroutine unless the patch is applied 2023-03-01 15:07:00 +01:00
bootstrap.sh
configure.ac Add ./configure --disable-tests option 2023-02-24 09:50:21 +01:00
COPYING
default.nix Remove url literals 2022-01-24 13:28:21 +01:00
docker.nix Add nobody user/group to Nix docker image 2022-11-29 10:01:46 +00:00
flake.lock flake.lock: Update 2022-12-08 17:09:50 +01:00
flake.nix Fix coverage job 2023-03-08 14:20:10 +01:00
local.mk Remove 'dist' target 2020-12-03 16:17:58 +01:00
Makefile Add ./configure --disable-tests option 2023-02-24 09:50:21 +01:00
Makefile.config.in Add ./configure --disable-tests option 2023-02-24 09:50:21 +01:00
precompiled-headers.h Config: Use nlohmann/json 2020-08-20 11:02:16 +02:00
README.md Improve hacking.md 2023-02-13 12:00:00 +04:00
shell.nix Remove url literals 2022-01-24 13:28:21 +01:00

Nix

Open Collective supporters Test

Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible. Please refer to the Nix manual for more details.

Installation

On Linux and macOS the easiest way to install Nix is to run the following shell command (as a user other than root):

$ curl -L https://nixos.org/nix/install | sh

Information on additional installation methods is available on the Nix download page.

Building And Developing

See our Hacking guide in our manual for instruction on how to to set up a development environment and build Nix from source.

Additional Resources

License

Nix is released under the LGPL v2.1.