testing: migrate flakes/flakes.sh (part 16)

input overrides during locking

Change-Id: I20e8e8bc2579f2f9bbaf7b522647a520d010ec43
This commit is contained in:
eldritch horrors
2026-02-26 13:11:25 +00:00
parent cbe4d1b339
commit b92f1aa865
2 changed files with 35 additions and 68 deletions
-68
View File
@@ -180,71 +180,3 @@ nix flake lock $flake3Dir
nix flake update --flake "$flake3Dir" --override-flake flake2 nixpkgs
[[ ! -z $(git -C "$flake3Dir" diff master || echo failed) ]]
# Make branch "removeXyzzy" where flake3 doesn't have xyzzy anymore
git -C $flake3Dir checkout -b removeXyzzy
rm $flake3Dir/flake.nix
cat > $flake3Dir/flake.nix <<EOF
{
inputs = {
nonFlake = {
url = "$nonFlakeDir";
flake = false;
};
};
description = "Fnord";
outputs = { self, flake1, flake2, nonFlake }: rec {
packages.$system.sth = flake1.packages.$system.foo;
packages.$system.fnord =
with import ./config.nix;
mkDerivation {
inherit system;
name = "fnord";
buildCommand = ''
cat \${nonFlake}/README.md > \$out
'';
};
};
}
EOF
nix flake lock $flake3Dir
git -C $flake3Dir add flake.nix flake.lock
git -C $flake3Dir commit -m 'Remove packages.xyzzy'
git -C $flake3Dir checkout master
# Test overriding inputs of inputs.
writeTrivialFlake $flake7Dir
git -C $flake7Dir add flake.nix
git -C $flake7Dir commit -m 'Initial'
cat > $flake3Dir/flake.nix <<EOF
{
inputs.flake2.inputs.flake1 = {
type = "git";
url = "file://$flake7Dir";
};
outputs = { self, flake2 }: {
};
}
EOF
nix flake lock $flake3Dir
[[ $(jq .nodes.flake1.locked.url $flake3Dir/flake.lock) =~ flake7 ]]
cat > $flake3Dir/flake.nix <<EOF
{
inputs.flake2.inputs.flake1.follows = "foo";
inputs.foo.url = "git+file://$flake7Dir";
outputs = { self, flake2 }: {
};
}
EOF
nix flake update --flake "$flake3Dir"
[[ $(jq -c .nodes.flake2.inputs.flake1 "$flake3Dir/flake.lock") =~ '["foo"]' ]]
[[ $(jq .nodes.foo.locked.url "$flake3Dir/flake.lock") =~ flake7 ]]
+35
View File
@@ -56,6 +56,10 @@ flake3_files = {
}
}
flake5_files = {"flake5": dependent_flake()}
flake7_files = {
"flake7": get_global_asset_pack(".git")
| {"flake.nix": File("{ outputs = { self }: { expr = 123; }; }")}
}
nonflake_files = {"nonFlake": get_global_asset_pack(".git") | {"README.md": File("FNORD")}}
@@ -144,6 +148,11 @@ def flake5_locked_tarball(env: ManagedEnv, flake5: Path, nix: Nix) -> Path:
return path
@pytest.fixture
def flake7(git: Git, env: ManagedEnv, request: pytest.FixtureRequest) -> Path:
return _make_flake_repo("flake7", flake7_files, git, env, request)
@pytest.fixture
def nonflake(env: ManagedEnv, request: pytest.FixtureRequest) -> Path:
_init_files(nonflake_files, env.dirs.test_root, request.path.parent, env)
@@ -612,6 +621,32 @@ class TestLock:
lock = json.loads((flake3 / "flake.lock").read_text())
assert lock["nodes"]["root"]["inputs"]["bar"] == ["flake2"]
class TestInputOverrides:
def test_simple_explicit(self, nix: Nix, flake3: Path, flake7: Path):
(flake3 / "flake.nix").write_text(f"""{{
inputs.flake2.inputs.flake1 = {{
type = "git";
url = "file://{flake7}";
}};
outputs = {{ self, flake2 }}: {{}};
}}""")
nix.nix(["flake", "lock", flake3]).run().ok()
lock = json.loads((flake3 / "flake.lock").read_text())
assert lock["nodes"]["flake1"]["locked"]["url"] == f"file://{flake7}"
def test_simple_follows(self, nix: Nix, flake3: Path, flake7: Path):
(flake3 / "flake.nix").write_text(f"""{{
inputs.flake2.inputs.flake1.follows = "foo";
inputs.foo.url = "git+file://{flake7}";
outputs = {{ self, flake2 }}: {{}};
}}""")
nix.nix(["flake", "lock", flake3]).run().ok()
lock = json.loads((flake3 / "flake.lock").read_text())
assert lock["nodes"]["flake2"]["inputs"]["flake1"] == ["foo"]
assert lock["nodes"]["foo"]["locked"]["url"] == f"file://{flake7}"
@pytest.mark.usefixtures("registry")
class TestMetadata: