From 77d8b68ba54021532a47785b6f0a79f6d8774e61 Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Thu, 11 Dec 2025 11:55:43 +0100 Subject: [PATCH] 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 --- tests/e2e/test_nix_build_pkgmgr.py | 86 ++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 tests/e2e/test_nix_build_pkgmgr.py diff --git a/tests/e2e/test_nix_build_pkgmgr.py b/tests/e2e/test_nix_build_pkgmgr.py new file mode 100644 index 0000000..472d278 --- /dev/null +++ b/tests/e2e/test_nix_build_pkgmgr.py @@ -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()