- Rename requirements.txt to _requirements.txt to avoid unintended self-install via PythonInstaller. - Update flake.nix to provide Python with pip in both devShell and runtime closure. - Generate a wrapper for pkgmgr that uses the pip-enabled interpreter. - Adjust NixFlakeInstaller to correctly handle old profile removal and install outputs. - Update run_command to support string commands and allow_failure. - Improve integration test by adding nix profile cleanup and debugging output. Reference: https://chatgpt.com/share/69345df2-a960-800f-8395-92a7c3a6629f
75 lines
2.0 KiB
Python
75 lines
2.0 KiB
Python
import runpy
|
|
import sys
|
|
import unittest
|
|
import subprocess
|
|
|
|
|
|
def nix_profile_list_debug(label: str) -> None:
|
|
"""
|
|
Print `nix profile list` for debugging inside the test container.
|
|
Never fails the test.
|
|
"""
|
|
print(f"\n--- NIX PROFILE LIST ({label}) ---")
|
|
proc = subprocess.run(
|
|
["nix", "profile", "list"],
|
|
capture_output=True,
|
|
text=True,
|
|
check=False,
|
|
)
|
|
stdout = proc.stdout.strip()
|
|
stderr = proc.stderr.strip()
|
|
|
|
if stdout:
|
|
print(stdout)
|
|
if stderr:
|
|
print("stderr:", stderr)
|
|
print("--- END ---\n")
|
|
|
|
|
|
def remove_pkgmgr_from_nix_profile() -> None:
|
|
"""
|
|
Best-effort cleanup before running the integration test.
|
|
|
|
We *do not* try to parse profile indices here, because modern `nix profile list`
|
|
prints a descriptive format without an index column inside the container.
|
|
|
|
Instead, we directly try to remove possible names:
|
|
- 'pkgmgr' (the actual name shown in `nix profile list`)
|
|
- 'package-manager' (the name mentioned in Nix's own error hints)
|
|
"""
|
|
for spec in ("pkgmgr", "package-manager"):
|
|
subprocess.run(
|
|
["nix", "profile", "remove", spec],
|
|
check=False, # never fail on cleanup
|
|
)
|
|
|
|
|
|
class TestIntegrationInstalPKGMGRShallow(unittest.TestCase):
|
|
def test_install_pkgmgr_self_install(self) -> None:
|
|
# Debug before cleanup
|
|
nix_profile_list_debug("BEFORE CLEANUP")
|
|
|
|
# Cleanup: aggressively try to drop any pkgmgr/profile entries
|
|
remove_pkgmgr_from_nix_profile()
|
|
|
|
# Debug after cleanup
|
|
nix_profile_list_debug("AFTER CLEANUP")
|
|
|
|
original_argv = sys.argv
|
|
try:
|
|
sys.argv = [
|
|
"python",
|
|
"install",
|
|
"pkgmgr",
|
|
"--clone-mode",
|
|
"shallow",
|
|
"--no-verification",
|
|
]
|
|
runpy.run_module("main", run_name="__main__")
|
|
finally:
|
|
sys.argv = original_argv
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|