vars: make all python tests work in nix sandbox
- generate a flake.lock file for each template by copying the clan-core flake.lock and modifying it - call nix build with --store for tests inside the sandbox
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
from clan_cli.clan_uri import FlakeId
|
||||
@@ -16,6 +17,10 @@ def get_all_machines(flake: FlakeId, nix_options: list[str]) -> list[Machine]:
|
||||
nix_build([f'{flake}#clanInternals.all-machines-json."{system}"'])
|
||||
).stdout
|
||||
|
||||
tmp_store = os.environ.get("TMP_STORE", None)
|
||||
if tmp_store:
|
||||
json_path = f"{tmp_store}/{json_path}"
|
||||
|
||||
machines_json = json.loads(Path(json_path.rstrip()).read_text())
|
||||
|
||||
machines = []
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import importlib
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
from dataclasses import dataclass, field
|
||||
from functools import cached_property
|
||||
from pathlib import Path
|
||||
@@ -329,6 +330,10 @@ class Machine:
|
||||
return self._build_cache[attr]
|
||||
|
||||
output = self.nix("build", attr, extra_config, nix_options)
|
||||
assert isinstance(output, Path), "Nix build did not result in a single path"
|
||||
tmp_store = os.environ.get("TMP_STORE", None)
|
||||
if tmp_store is not None:
|
||||
output = Path(f"{tmp_store}/{output!s}")
|
||||
if isinstance(output, Path):
|
||||
self._build_cache[attr] = output
|
||||
return output
|
||||
|
||||
@@ -10,7 +10,11 @@ from clan_cli.errors import ClanError
|
||||
|
||||
|
||||
def nix_command(flags: list[str]) -> list[str]:
|
||||
return ["nix", "--extra-experimental-features", "nix-command flakes", *flags]
|
||||
args = ["nix", "--extra-experimental-features", "nix-command flakes", *flags]
|
||||
store = os.environ.get("TMP_STORE", None)
|
||||
if store:
|
||||
args += ["--store", store]
|
||||
return args
|
||||
|
||||
|
||||
def nix_flake_show(flake_url: str | Path) -> list[str]:
|
||||
|
||||
Reference in New Issue
Block a user