2024-05-28 19:43:04 +03:00
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
2022-07-13 15:09:35 +03:00
|
|
|
|
source ../common.sh
|
2022-03-25 19:36:41 +02:00
|
|
|
|
|
2024-06-16 13:51:46 +03:00
|
|
|
|
TODO_NixOS
|
|
|
|
|
|
2022-03-25 19:36:41 +02:00
|
|
|
|
clearStore
|
|
|
|
|
rm -rf $TEST_HOME/.cache $TEST_HOME/.config $TEST_HOME/.local
|
2024-11-01 15:56:50 +02:00
|
|
|
|
|
|
|
|
|
cp ../shell-hello.nix "${config_nix}" $TEST_HOME
|
|
|
|
|
# `config.nix` cannot be gotten via build dir / env var (runs afoul pure eval). Instead get from flake.
|
|
|
|
|
removeBuildDirRef "$TEST_HOME"/*.nix
|
2022-03-25 19:36:41 +02:00
|
|
|
|
cd $TEST_HOME
|
|
|
|
|
|
|
|
|
|
cat <<EOF > flake.nix
|
|
|
|
|
{
|
|
|
|
|
outputs = {self}: {
|
2022-04-19 13:09:12 +03:00
|
|
|
|
packages.$system.pkgAsPkg = (import ./shell-hello.nix).hello;
|
|
|
|
|
packages.$system.appAsApp = self.packages.$system.appAsApp;
|
2022-03-25 19:36:41 +02:00
|
|
|
|
|
2022-04-19 13:09:12 +03:00
|
|
|
|
apps.$system.pkgAsApp = self.packages.$system.pkgAsPkg;
|
|
|
|
|
apps.$system.appAsApp = {
|
2022-03-25 19:36:41 +02:00
|
|
|
|
type = "app";
|
|
|
|
|
program = "\${(import ./shell-hello.nix).hello}/bin/hello";
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
EOF
|
2022-04-19 13:09:12 +03:00
|
|
|
|
nix run --no-write-lock-file .#appAsApp
|
|
|
|
|
nix run --no-write-lock-file .#pkgAsPkg
|
2022-03-25 19:36:41 +02:00
|
|
|
|
|
2022-04-19 13:09:12 +03:00
|
|
|
|
! 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'"
|
2022-03-25 19:36:41 +02:00
|
|
|
|
|
2024-06-10 12:39:06 +03:00
|
|
|
|
# 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
|
2024-09-30 14:02:51 +03:00
|
|
|
|
# - we unset TMPDIR on macOS if it contains /var/folders. bad. https://github.com/NixOS/nix/issues/7731
|
2024-06-10 12:39:06 +03:00
|
|
|
|
# - _ 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/_=.*/_=.../' \
|
2024-09-27 12:07:50 +03:00
|
|
|
|
-e '/^TMPDIR=\/var\/folders\/.*/d' \
|
2024-06-10 12:39:06 +03:00
|
|
|
|
-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
|
|
|
|
|
|
2022-03-25 19:36:41 +02:00
|
|
|
|
clearStore
|
|
|
|
|
|