Add E2E Nix flake build test across all distro containers

- Introduce tests/e2e/test_nix_build_pkgmgr.py to inspect the Nix environment
  and build the pkgmgr flake inside the container started by test-e2e.sh
- Run the same commands in every distro container: nix --version, sandbox
  config, id, and nix build .#pkgmgr -L
- Print stdout/stderr and assert the flake build succeeds for easier
  cross-distro Nix debugging

https://chatgpt.com/share/693aa33f-4e3c-800f-86ec-99c38a07eacb
This commit is contained in:
Kevin Veen-Birkenbach
2025-12-11 11:55:43 +01:00
parent bb0a801396
commit 77d8b68ba5

View File

@@ -0,0 +1,86 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
E2E test to inspect the Nix environment and build the pkgmgr flake
in *every* distro container.
Commands executed inside the container (for all distros):
nix --version
nix show-config | grep sandbox
id
nix build .#pkgmgr -L
No docker is called from here the outer test harness
(scripts/test/test-e2e.sh) is responsible for starting the container.
"""
from __future__ import annotations
import os
import subprocess
import unittest
# Resolve project root (the repo where flake.nix lives, e.g. /src)
PROJECT_ROOT = os.path.abspath(
os.path.join(os.path.dirname(__file__), "..", "..")
)
def _run_cmd(cmd: list[str]) -> subprocess.CompletedProcess:
"""
Run a command in a subprocess, capture stdout/stderr and print them.
Does NOT raise by itself the caller checks returncode.
"""
print("\n[TEST] Running command:", " ".join(cmd))
proc = subprocess.run(
cmd,
text=True,
capture_output=True,
)
print("[STDOUT]\n", proc.stdout)
print("[STDERR]\n", proc.stderr)
print("[RETURN CODE]", proc.returncode)
return proc
class TestNixBuildPkgmgrAllDistros(unittest.TestCase):
"""
E2E test that runs the same Nix diagnostics + flake build
in all distro containers.
"""
def test_nix_env_and_build_pkgmgr(self) -> None:
# Ensure we are in the project root (where flake.nix resides)
original_cwd = os.getcwd()
try:
os.chdir(PROJECT_ROOT)
# --- Nix version ---
_run_cmd(["nix", "--version"])
# --- Nix sandbox setting ---
_run_cmd(["sh", "-c", "nix show-config | grep sandbox || true"])
# --- Current user ---
_run_cmd(["id"])
# --- nix build .#pkgmgr -L ---
proc = _run_cmd(["nix", "build", ".#pkgmgr", "-L"])
if proc.returncode != 0:
raise AssertionError(
"nix build .#pkgmgr -L failed inside the test container.\n"
f"Exit code: {proc.returncode}\n"
"See STDOUT/STDERR above for Nix diagnostics."
)
finally:
os.chdir(original_cwd)
if __name__ == "__main__":
unittest.main()