mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-12-01 18:16:14 +02:00
05751de32b
Test the `run` and `shell` envs for stray variables
54 lines
1.9 KiB
Bash
Executable file
54 lines
1.9 KiB
Bash
Executable file
#!/usr/bin/env bash
|
||
|
||
source ../common.sh
|
||
|
||
TODO_NixOS
|
||
|
||
clearStore
|
||
rm -rf $TEST_HOME/.cache $TEST_HOME/.config $TEST_HOME/.local
|
||
cp ../shell-hello.nix ../config.nix $TEST_HOME
|
||
cd $TEST_HOME
|
||
|
||
cat <<EOF > flake.nix
|
||
{
|
||
outputs = {self}: {
|
||
packages.$system.pkgAsPkg = (import ./shell-hello.nix).hello;
|
||
packages.$system.appAsApp = self.packages.$system.appAsApp;
|
||
|
||
apps.$system.pkgAsApp = self.packages.$system.pkgAsPkg;
|
||
apps.$system.appAsApp = {
|
||
type = "app";
|
||
program = "\${(import ./shell-hello.nix).hello}/bin/hello";
|
||
};
|
||
};
|
||
}
|
||
EOF
|
||
nix run --no-write-lock-file .#appAsApp
|
||
nix run --no-write-lock-file .#pkgAsPkg
|
||
|
||
! nix run --no-write-lock-file .#pkgAsApp || fail "'nix run' shouldn’t accept an 'app' defined under 'packages'"
|
||
! nix run --no-write-lock-file .#appAsPkg || fail "elements of 'apps' should be of type 'app'"
|
||
|
||
# Test that we're not setting any more environment variables than necessary.
|
||
# For instance, we might set an environment variable temporarily to affect some
|
||
# initialization or whatnot, but this must not leak into the environment of the
|
||
# command being run.
|
||
env > $TEST_ROOT/expected-env
|
||
nix run -f shell-hello.nix env > $TEST_ROOT/actual-env
|
||
# Remove/reset variables we expect to be different.
|
||
# - PATH is modified by nix shell
|
||
# - _ is set by bash and is expected to differ because it contains the original command
|
||
# - __CF_USER_TEXT_ENCODING is set by macOS and is beyond our control
|
||
sed -i \
|
||
-e 's/PATH=.*/PATH=.../' \
|
||
-e 's/_=.*/_=.../' \
|
||
-e '/^__CF_USER_TEXT_ENCODING=.*$/d' \
|
||
$TEST_ROOT/expected-env $TEST_ROOT/actual-env
|
||
sort $TEST_ROOT/expected-env | uniq > $TEST_ROOT/expected-env.sorted
|
||
# nix run appears to clear _. I don't understand why. Is this ok?
|
||
echo "_=..." >> $TEST_ROOT/actual-env
|
||
sort $TEST_ROOT/actual-env | uniq > $TEST_ROOT/actual-env.sorted
|
||
diff $TEST_ROOT/expected-env.sorted $TEST_ROOT/actual-env.sorted
|
||
|
||
clearStore
|
||
|