65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
from testlib.fixtures.nix import Nix
|
|
from testlib.fixtures.file_helper import with_files, File
|
|
from testlib.environ import environ
|
|
from testlib.utils import get_global_asset_pack
|
|
from pathlib import Path
|
|
from textwrap import dedent
|
|
import pytest
|
|
|
|
system = environ.get("system")
|
|
|
|
files = get_global_asset_pack("simple-drv") | {
|
|
"flake.nix": File(f"""
|
|
{{
|
|
nixConfig.post-build-hook = ./echoing-post-hook.sh;
|
|
nixConfig.allow-dirty = false; # See #5621
|
|
|
|
outputs = a: {{
|
|
packages.{system}.default = import ./simple.nix;
|
|
}};
|
|
}}
|
|
""")
|
|
}
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def common_init(nix: Nix, files: Path):
|
|
nix.settings.add_xp_feature("nix-command", "flakes")
|
|
|
|
hook = files / "echoing-post-hook.sh"
|
|
hook.write_text(
|
|
dedent(f"""\
|
|
#!/bin/sh
|
|
|
|
echo "ThePostHookRan as $0" > {files}/post-hook-ran
|
|
""")
|
|
)
|
|
hook.chmod(0o755)
|
|
|
|
|
|
@with_files(files)
|
|
class TestFlakeConfig:
|
|
def test_post_hook_ignored_without_accept_config(self, nix: Nix, files: Path):
|
|
nix.nix(["build"]).run().ok()
|
|
assert not (files / "post-hook-ran").exists()
|
|
|
|
def test_post_hook_ignored_with_no_accept_config(self, nix: Nix, files: Path):
|
|
nix.nix(["build", "--no-accept-flake-config"]).run().ok()
|
|
assert not (files / "post-hook-ran").exists()
|
|
|
|
def test_post_hook_runs_with_accept_config(self, nix: Nix, files: Path):
|
|
nix.nix(["build", "--accept-flake-config"]).run().ok()
|
|
|
|
hook_output = files / "post-hook-ran"
|
|
assert hook_output.exists()
|
|
first_output = hook_output.read_text()
|
|
|
|
# Make sure that the path to the post hook doesn't change if we change
|
|
# something in the flake.
|
|
# Otherwise the user would have to re-validate the setting each time.
|
|
flake = files / "flake.nix"
|
|
flake.write_text(flake.read_text() + "# comment\n")
|
|
nix.clear_store()
|
|
nix.nix(["build", "--accept-flake-config"]).run().ok()
|
|
assert hook_output.read_text() == first_output
|