python3.14-nixbot-tests
checks.aarch64-linux.nixbot-tests
· build #392
· raw
1tribuchet: building on eliza2Sourcing python-remove-tests-dir-hook3Sourcing python-catch-conflicts-hook.sh4Sourcing python-remove-bin-bytecode-hook.sh5Sourcing pypa-build-hook6Using pypaBuildPhase7Sourcing python-runtime-deps-check-hook8Using pythonRuntimeDepsCheckHook9Sourcing pypa-install-hook10Using pypaInstallPhase11Sourcing python-imports-check-hook.sh12Using pythonImportsCheckPhase13Sourcing python-namespaces-hook14Sourcing python-catch-conflicts-hook.sh15Sourcing pytest-check-hook16Using pytestCheckPhase
unpackPhase
17unpacking source archive /nix/store/z0k5i2qscw8lsdl7528sb1k01a0asxdq-nixbot18source root is nixbot19setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "nixbot/pyproject.toml"configurePhase
20no configure script, doing nothingbuildPhase
21Executing pypaBuildPhase22Creating a wheel...23pypa build flags: --no-isolation --outdir dist/ --wheel24* Getting build dependencies for wheel...25* Building wheel...26Successfully built nixbot-0.0.1-py3-none-any.whl27Finished creating a wheel...28Finished executing pypaBuildPhasepythonRuntimeDepsCheckHook
29Executing pythonRuntimeDepsCheck30Checking runtime dependencies for nixbot-0.0.1-py3-none-any.whl31Finished executing pythonRuntimeDepsCheckinstallPhase
32Executing pypaInstallPhase33Successfully installed nixbot-0.0.1-py3-none-any.whl34Finished executing pypaInstallPhasepythonOutputDistPhase
35Executing pythonOutputDistPhase36Finished executing pythonOutputDistPhasefixupPhase
37shrinking RPATHs of ELF executables and libraries in /nix/store/bsqgiravy19l2n0x49wvh5nm7qcxpjby-python3.14-nixbot-tests38checking for references to /build/ in /nix/store/bsqgiravy19l2n0x49wvh5nm7qcxpjby-python3.14-nixbot-tests...39patching script interpreter paths in /nix/store/bsqgiravy19l2n0x49wvh5nm7qcxpjby-python3.14-nixbot-tests40stripping (with command strip and flags -S -p) in /nix/store/bsqgiravy19l2n0x49wvh5nm7qcxpjby-python3.14-nixbot-tests/lib /nix/store/bsqgiravy19l2n0x49wvh5nm7qcxpjby-python3.14-nixbot-tests/bin41shrinking RPATHs of ELF executables and libraries in /nix/store/ix3c73i72lgwsbdjpn939dpi7gpx61v4-python3.14-nixbot-tests-dist42checking for references to /build/ in /nix/store/ix3c73i72lgwsbdjpn939dpi7gpx61v4-python3.14-nixbot-tests-dist...43patching script interpreter paths in /nix/store/ix3c73i72lgwsbdjpn939dpi7gpx61v4-python3.14-nixbot-tests-dist44Rewriting #!/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 to #!/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.645wrapping `/nix/store/bsqgiravy19l2n0x49wvh5nm7qcxpjby-python3.14-nixbot-tests/bin/nixbot'...46Executing pythonRemoveTestsDir47Finished executing pythonRemoveTestsDirinstallCheckPhase
48no Makefile or custom installCheckPhase, doing nothingpythonImportsCheckPhase
49Executing pythonImportsCheckPhasepytestCheckPhase
50Executing pytestCheckPhase51pytest flags: -m pytest --numprocesses=2452/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.53 warner(PytestBenchmarkWarning(text))54/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.55 warner(PytestBenchmarkWarning(text))56/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.57 warner(PytestBenchmarkWarning(text))58/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.59 warner(PytestBenchmarkWarning(text))60/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.61 warner(PytestBenchmarkWarning(text))62/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.63 warner(PytestBenchmarkWarning(text))64/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.65 warner(PytestBenchmarkWarning(text))66/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.67 warner(PytestBenchmarkWarning(text))68/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.69 warner(PytestBenchmarkWarning(text))70/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.71 warner(PytestBenchmarkWarning(text))72/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.73 warner(PytestBenchmarkWarning(text))74/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.75 warner(PytestBenchmarkWarning(text))76/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.77 warner(PytestBenchmarkWarning(text))78/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.79 warner(PytestBenchmarkWarning(text))80/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.81 warner(PytestBenchmarkWarning(text))82/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.83 warner(PytestBenchmarkWarning(text))84/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.85 warner(PytestBenchmarkWarning(text))86/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.87 warner(PytestBenchmarkWarning(text))88/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.89 warner(PytestBenchmarkWarning(text))90/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.91 warner(PytestBenchmarkWarning(text))92/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.93 warner(PytestBenchmarkWarning(text))94/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.95 warner(PytestBenchmarkWarning(text))96/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.97 warner(PytestBenchmarkWarning(text))98/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.99 warner(PytestBenchmarkWarning(text))100/nix/store/2xp5r99cnys85h806mpdw43bz48y05ds-python3.14-pytest-benchmark-5.2.3/lib/python3.14/site-packages/pytest_benchmark/logger.py:44: PytestBenchmarkWarning: Benchmarks are automatically disabled because xdist plugin is active.Benchmarks cannot be performed reliably in a parallelized environment.101 warner(PytestBenchmarkWarning(text))102============================= test session starts ==============================103platform linux -- Python 3.14.6, pytest-9.1.1, pluggy-1.6.0104benchmark: 5.2.3 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)105rootdir: /build/nixbot106configfile: pyproject.toml107plugins: asyncio-1.4.0, timeout-2.4.0, xdist-3.8.0, benchmark-5.2.3, anyio-4.14.2108asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function109timeout: 60.0s110timeout method: signal111timeout func_only: False112created: 24/24 workers11324 workers [845 items]114115................s..................ssssssss............................. [ 8%]116........................................................................ [ 17%]117........................................................................ [ 25%]118........................................................................ [ 34%]119..................................................s..................... [ 42%]120..........F..................F.......................................... [ 51%]121........................................................................ [ 59%]122.....................s..................................s............... [ 68%]123.......................................................F................ [ 76%]124........................................................................ [ 85%]125.....................................................F.................. [ 93%]126...............F...............................F..... [100%]127=================================== FAILURES ===================================128__________________________ test_prefetch_integration ___________________________129[gw6] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14130131tmp_path = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6/test_prefetch_integration0')132133 @needs_nix134 async def test_prefetch_integration(tmp_path: Path) -> None:135 """A locked git input is copied to the store and gc-rooted; after136 the input's source repo is gone, evaluation still succeeds purely137 from the store (the sandboxed eval has no credentials for private138 inputs)."""139 dep = init_upstream(140 tmp_path / "dep",141 {"flake.nix": '{ outputs = { self }: { greeting = "hello"; }; }'},142 )143 repo = init_upstream(144 tmp_path / "repo",145 {146 "flake.nix": f"""147 {{148 inputs.dep.url = "git+file://{dep}";149 outputs = {{ self, dep }}: {{150 checks.x86_64-linux.ok = derivation {{151 name = "ok-" + dep.greeting;152 system = "x86_64-linux";153 builder = "/bin/sh";154 args = [ "-c" "echo ok > $out" ];155 }};156 }};157 }}158 """159 },160 )161 _nix_flake_lock(repo)162 163 gcroots = tmp_path / "gcroots"164 await prefetch_flake_inputs(repo, BranchConfig(), gcroots)165 166 roots = list((gcroots / "inputs").iterdir())167 assert len(roots) == 1168 assert roots[0].is_symlink()169 assert roots[0].resolve().is_dir()170 171 # The eval must not need the input's origin anymore.172 shutil.rmtree(dep)173 174 if shutil.which("nix-eval-jobs") is None:175 pytest.skip("nix-eval-jobs not available")176 settings = EvalSettings(177 gc_roots_dir=tmp_path / "eval-gcroots", sandbox=False, systemd_scope=False178 )179> result = await EvalRunner().run(repo, BranchConfig(), settings)180 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^181182nixbot/tests/test_flake_prefetch.py:147: 183_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 184nixbot/nix_eval.py:585: in run185 return await self._spawn(186_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 187188self = <nixbot.nix_eval.EvalRunner object at 0xffffed813a10>189worktree_path = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6/test_prefetch_integration0/repo')190branch_config = BranchConfig(flake_dir='.', lock_file='flake.lock', attribute='checks', effects_on_pull_requests=False, effects_branches=[], build_branches=None, require_approval=True)191settings = EvalSettings(gc_roots_dir=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6/test_prefetch_integration0/eval-gcroot...Path('/nix/var/nix/daemon-socket/socket'), extra_ro_paths=[], extra_args=[], eval_systems=[], legacy_attr_prefix=False)192preexec_fn = None, on_jobs = None, on_stderr_line = None, eval_cgroup = None193194 async def _spawn( # noqa: PLR0913195 self,196 worktree_path: Path,197 branch_config: BranchConfig,198 settings: EvalSettings,199 preexec_fn: Callable[[], None] | None = None,200 on_jobs: JobBatchCallback | None = None,201 on_stderr_line: StderrLineCallback | None = None,202 eval_cgroup: Path | None = None,203 ) -> EvalResult:204 cmd = build_full_command(worktree_path, branch_config, settings)205 logger.info(206 "starting evaluation",207 extra={"worktree": str(worktree_path), "argv0": cmd[0]},208 )209 t0 = time.monotonic()210 proc = await asyncio.create_subprocess_exec(211 *cmd,212 cwd=worktree_path,213 stdout=asyncio.subprocess.PIPE,214 stderr=asyncio.subprocess.PIPE,215 preexec_fn=preexec_fn,216 # Own process group so a timeout can kill the whole tree.217 start_new_session=True,218 limit=STREAM_LIMIT,219 # Proxy/TLS/NIX_* must reach the evaluator: flake input220 # fetching fails in proxy/custom-CA deployments otherwise.221 env={222 **passthrough_env(),223 "CLICOLOR_FORCE": "1",224 "PATH": os.environ.get("PATH", "/usr/bin:/bin"),225 # Fallback to /tmp when no `bwrap`226 "HOME": os.environ.get("HOME", "/tmp"), # noqa: S108227 },228 )229 assert proc.stdout is not None # noqa: S101230 assert proc.stderr is not None # noqa: S101231 232 jobs: list[NixEvalJob] = []233 parse_errors: list[str] = []234 235 try:236 async with asyncio.timeout(settings.timeout):237 _, stderr_bytes = await asyncio.gather(238 _read_job_stream(proc.stdout, jobs, parse_errors, on_jobs),239 _read_stderr_tail(proc.stderr, on_line=on_stderr_line),240 )241 returncode = await proc.wait()242 duration_ms = int((time.monotonic() - t0) * 1000)243 except BaseException as e:244 # Timeout, cancellation, or a reader bug: kill the evaluator245 # instead of leaking it (possibly blocked on a full pipe).246 _kill_process_tree(proc)247 await proc.wait()248 if isinstance(e, TimeoutError):249 msg = f"evaluation timed out after {settings.timeout:.0f} seconds"250 raise EvalError(msg) from None251 raise252 stderr_text = stderr_bytes.decode(errors="replace")253 254 if returncode != 0:255 tail = "\n".join(stderr_text.splitlines()[-50:])256 # No stderr substring match: that would misclassify evals257 # whose trace merely mentions "out of memory".258 if returncode in OOM_RETURN_CODES or cgroup_oom_killed(eval_cgroup):259 msg = (260 "evaluation ran out of memory (cgroup limit "261 f"{settings.memory_limit_mib} MiB, "262 f"{settings.worker_count} x {settings.max_memory_size_mib} "263 "MiB workers); this is a permanent failure, reduce "264 f"evaluation memory usage:\n{tail}"265 )266 raise EvalOOMError(msg)267 msg = f"nix-eval-jobs failed with exit code {returncode}:\n{tail}"268> raise EvalError(msg)269E nixbot.nix_eval.EvalError: nix-eval-jobs failed with exit code 1:270E warning: Git tree '/build/pytest-of-nixbld/pytest-0/popen-gw6/test_prefetch_integration0/repo' is dirty271E warning: unable to download 'https://cache.nixos.org/nix-cache-info': Could not resolve hostname (6) Could not resolve host: cache.nixos.org; retrying in 93 ms (attempt 1/5)272E warning: unable to download 'https://cache.nixos.org/nix-cache-info': Could not resolve hostname (6) Could not resolve host: cache.nixos.org; retrying in 72 ms (attempt 2/5)273E warning: unable to download 'https://cache.nixos.org/nix-cache-info': Could not resolve hostname (6) Could not resolve host: cache.nixos.org; retrying in 224 ms (attempt 3/5)274E warning: unable to download 'https://cache.nixos.org/nix-cache-info': Could not resolve hostname (6) Could not resolve host: cache.nixos.org; retrying in 64 ms (attempt 4/5)275E warning: unable to download 'https://cache.nixos.org/nix-cache-info': Could not resolve hostname (6) Could not resolve host: cache.nixos.org276E warning: Git tree '/build/pytest-of-nixbld/pytest-0/popen-gw6/test_prefetch_integration0/repo' is dirty277E error: while starting worker, evaluation worker crashed with signal 7 (Bus error); enable coredumps for a backtrace278279nixbot/nix_eval.py:672: EvalError280----------------------------- Captured stderr call -----------------------------281warning: you don't have Internet access; disabling some network-dependent features282warning: creating lock file "/build/pytest-of-nixbld/pytest-0/popen-gw6/test_prefetch_integration0/repo/flake.lock": 283• Added input 'dep':284 'git+file:///build/pytest-of-nixbld/pytest-0/popen-gw6/test_prefetch_integration0/dep?ref=refs/heads/main&rev=b032898e336ba5b2904698936cd35f8810a3b4f8' (2026-09-23)285______________________________ test_full_pipeline ______________________________286[gw23] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14287288flake = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw23/flake0')289tmp_path = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw23/test_full_pipeline0')290291 async def test_full_pipeline(flake: Path, tmp_path: Path) -> None:292> result, executor = await run_pipeline(flake, tmp_path)293 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^294295nixbot/tests/test_pipeline.py:142: 296_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 297nixbot/tests/test_pipeline.py:135: in run_pipeline298 eval_result = await EvalRunner().run(flake, BranchConfig(), settings)299 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^300nixbot/nix_eval.py:585: in run301 return await self._spawn(302_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 303304self = <nixbot.nix_eval.EvalRunner object at 0xffffed65f380>305worktree_path = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw23/flake0')306branch_config = BranchConfig(flake_dir='.', lock_file='flake.lock', attribute='checks', effects_on_pull_requests=False, effects_branches=[], build_branches=None, require_approval=True)307settings = EvalSettings(gc_roots_dir=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw23/test_full_pipeline0/gcroots'), timeou...Path('/nix/var/nix/daemon-socket/socket'), extra_ro_paths=[], extra_args=[], eval_systems=[], legacy_attr_prefix=False)308preexec_fn = None, on_jobs = None, on_stderr_line = None, eval_cgroup = None309310 async def _spawn( # noqa: PLR0913311 self,312 worktree_path: Path,313 branch_config: BranchConfig,314 settings: EvalSettings,315 preexec_fn: Callable[[], None] | None = None,316 on_jobs: JobBatchCallback | None = None,317 on_stderr_line: StderrLineCallback | None = None,318 eval_cgroup: Path | None = None,319 ) -> EvalResult:320 cmd = build_full_command(worktree_path, branch_config, settings)321 logger.info(322 "starting evaluation",323 extra={"worktree": str(worktree_path), "argv0": cmd[0]},324 )325 t0 = time.monotonic()326 proc = await asyncio.create_subprocess_exec(327 *cmd,328 cwd=worktree_path,329 stdout=asyncio.subprocess.PIPE,330 stderr=asyncio.subprocess.PIPE,331 preexec_fn=preexec_fn,332 # Own process group so a timeout can kill the whole tree.333 start_new_session=True,334 limit=STREAM_LIMIT,335 # Proxy/TLS/NIX_* must reach the evaluator: flake input336 # fetching fails in proxy/custom-CA deployments otherwise.337 env={338 **passthrough_env(),339 "CLICOLOR_FORCE": "1",340 "PATH": os.environ.get("PATH", "/usr/bin:/bin"),341 # Fallback to /tmp when no `bwrap`342 "HOME": os.environ.get("HOME", "/tmp"), # noqa: S108343 },344 )345 assert proc.stdout is not None # noqa: S101346 assert proc.stderr is not None # noqa: S101347 348 jobs: list[NixEvalJob] = []349 parse_errors: list[str] = []350 351 try:352 async with asyncio.timeout(settings.timeout):353 _, stderr_bytes = await asyncio.gather(354 _read_job_stream(proc.stdout, jobs, parse_errors, on_jobs),355 _read_stderr_tail(proc.stderr, on_line=on_stderr_line),356 )357 returncode = await proc.wait()358 duration_ms = int((time.monotonic() - t0) * 1000)359 except BaseException as e:360 # Timeout, cancellation, or a reader bug: kill the evaluator361 # instead of leaking it (possibly blocked on a full pipe).362 _kill_process_tree(proc)363 await proc.wait()364 if isinstance(e, TimeoutError):365 msg = f"evaluation timed out after {settings.timeout:.0f} seconds"366 raise EvalError(msg) from None367 raise368 stderr_text = stderr_bytes.decode(errors="replace")369 370 if returncode != 0:371 tail = "\n".join(stderr_text.splitlines()[-50:])372 # No stderr substring match: that would misclassify evals373 # whose trace merely mentions "out of memory".374 if returncode in OOM_RETURN_CODES or cgroup_oom_killed(eval_cgroup):375 msg = (376 "evaluation ran out of memory (cgroup limit "377 f"{settings.memory_limit_mib} MiB, "378 f"{settings.worker_count} x {settings.max_memory_size_mib} "379 "MiB workers); this is a permanent failure, reduce "380 f"evaluation memory usage:\n{tail}"381 )382 raise EvalOOMError(msg)383 msg = f"nix-eval-jobs failed with exit code {returncode}:\n{tail}"384> raise EvalError(msg)385E nixbot.nix_eval.EvalError: nix-eval-jobs failed with exit code 1:386E warning: unable to download 'https://cache.nixos.org/nix-cache-info': Could not resolve hostname (6) Could not resolve host: cache.nixos.org; retrying in 14 ms (attempt 1/5)387E warning: unable to download 'https://cache.nixos.org/nix-cache-info': Could not resolve hostname (6) Could not resolve host: cache.nixos.org; retrying in 88 ms (attempt 2/5)388E warning: unable to download 'https://cache.nixos.org/nix-cache-info': Could not resolve hostname (6) Could not resolve host: cache.nixos.org; retrying in 360 ms (attempt 3/5)389E warning: unable to download 'https://cache.nixos.org/nix-cache-info': Could not resolve hostname (6) Could not resolve host: cache.nixos.org; retrying in 765 ms (attempt 4/5)390E warning: unable to download 'https://cache.nixos.org/nix-cache-info': Could not resolve hostname (6) Could not resolve host: cache.nixos.org391E error: while evaluating 'checks.aarch64-linux.brokendep', evaluation worker crashed with signal 7 (Bus error); enable coredumps for a backtrace392393nixbot/nix_eval.py:672: EvalError394________________________ test_cached_skip_on_second_run ________________________395[gw23] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14396397flake = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw23/flake0')398tmp_path = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw23/test_cached_skip_on_second_run0')399400 async def test_cached_skip_on_second_run(flake: Path, tmp_path: Path) -> None:401 # First run built base/dependent (test ordering within module);402 # a second eval marks them local and the scheduler skips them.403 result, executor = await run_pipeline(flake, tmp_path)404 system = current_system()405 statuses = {r.attr: r.status for r in result.results}406> assert statuses[f"checks.{system}.base"] == AttributeStatus.skipped_local407E AssertionError: assert <AttributeSta...: 'succeeded'> == <AttributeSta...kipped_local'>408E 409E - skipped_local410E + succeeded411412nixbot/tests/test_pipeline.py:200: AssertionError413__________________ test_inflight_share_fans_out_final_status ___________________414[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14415416make_env = <function make_env.<locals>.make at 0xffffed6d6140>417upstream = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw1/test_inflight_share_fans_out_f0/upstream')418419 async def test_inflight_share_fans_out_final_status(420 make_env: EnvFactory, upstream: Path421 ) -> None:422 sha = add_commit(upstream, "share")423 git(upstream, "branch", "copy", "main")424 executor = FakeExecutor(gate=asyncio.Event())425 orchestrator, reporter, project = await make_env(426 FakeEvalRunner([mk_job("a")]),427 executor,428 "share",429 )430 task = asyncio.create_task(431 orchestrator.handle_change_event(432 ChangeEvent(repo=project, branch="main", commit_sha=sha)433 )434 )435 await asyncio.wait_for(executor.started.wait(), timeout=10)436 build2 = await orchestrator.handle_change_event(437 ChangeEvent(repo=project, branch="copy", commit_sha=sha)438 )439 assert executor.gate is not None440 executor.gate.set()441 build1 = await task442 assert build1 is not None443 assert build2 is not None444 assert build1.id_ == build2.id_445 finished = [e for e in reporter.events if e[0] == "finished"]446> assert len(finished) == 2 # one final status per context447 ^^^^^^^^^^^^^^^^^^^^^^^^^448E AssertionError: assert 1 == 2449E + where 1 = len([('finished', 27, 'succeeded', 1)])450451nixbot/tests/test_orchestrator.py:1047: AssertionError452_________________ test_linked_context_reported_on_eval_failure _________________453[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14454455make_env = <function make_env.<locals>.make at 0xffffed6d6350>456upstream = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw1/test_linked_context_reported_o0/upstream')457458 async def test_linked_context_reported_on_eval_failure(459 make_env: EnvFactory, upstream: Path460 ) -> None:461 sha = add_commit(upstream, "lef")462 git(upstream, "branch", "lef-copy", "main")463 464 eval_runner = FakeEvalRunner([], block=asyncio.Event(), error=EvalError("boom"))465 orchestrator, reporter, project = await make_env(eval_runner, FakeExecutor(), "lef")466 task = asyncio.create_task(467 orchestrator.handle_change_event(468 ChangeEvent(repo=project, branch="main", commit_sha=sha)469 )470 )471 await asyncio.wait_for(eval_runner.started.wait(), timeout=10)472 build2 = await orchestrator.handle_change_event(473 ChangeEvent(repo=project, branch="lef-copy", commit_sha=sha)474 )475 assert eval_runner.block is not None476 eval_runner.block.set()477 build1 = await task478 assert build1 is not None479 assert build2 is not None480 assert build1.id_ == build2.id_481 finished = [e for e in reporter.events if e[0] == "finished"]482> assert len(finished) == 2483E AssertionError: assert 1 == 2484E + where 1 = len([('finished', 43, 'failed', 0)])485486nixbot/tests/test_orchestrator.py:1505: AssertionError487------------------------------ Captured log call -------------------------------488WARNING nixbot.build_run:build_run.py:162 evaluation failed489____________ test_cancel_during_eval_resolves_linked_eval_contexts _____________490[gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14491492make_env = <function make_env.<locals>.make at 0xffffed612980>493upstream = PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw1/test_cancel_during_eval_resolv0/upstream')494495 async def test_cancel_during_eval_resolves_linked_eval_contexts(496 make_env: EnvFactory, upstream: Path497 ) -> None:498 """Cancelling a build mid-eval must resolve the nix-eval context of499 every linked event, not only the primary one."""500 501 add_commit(upstream, "linked-cancel")502 sha = git(upstream, "rev-parse", "HEAD")503 eval_runner = FakeEvalRunner([mk_job("a")], block=asyncio.Event())504 orchestrator, reporter, project = await make_env(505 eval_runner,506 FakeExecutor(),507 name="linked-cancel",508 )509 task1 = asyncio.create_task(510 orchestrator.handle_change_event(511 ChangeEvent(repo=project, branch="main", commit_sha=sha)512 )513 )514 await eval_runner.started.wait()515 build2 = await orchestrator.handle_change_event(516 ChangeEvent(repo=project, branch="main", commit_sha=sha, pr_number=4)517 )518 assert build2 is not None519 orchestrator.cancel_events[build2.id_].set()520 await task1521 cancelled_evals = [e for e in reporter.events if e[0] == "eval-cancelled"]522 assert len(cancelled_evals) == 2523 finished = [e for e in reporter.events if e[0] == "finished"]524> assert len(finished) == 2525E AssertionError: assert 1 == 2526E + where 1 = len([('finished', 69, 'cancelled', 0)])527528nixbot/tests/test_orchestrator.py:2403: AssertionError529=========================== short test summary info ============================530FAILED nixbot/tests/test_flake_prefetch.py::test_prefetch_integration - nixbo...531FAILED nixbot/tests/test_pipeline.py::test_full_pipeline - nixbot.nix_eval.Ev...532FAILED nixbot/tests/test_pipeline.py::test_cached_skip_on_second_run - Assert...533FAILED nixbot/tests/test_orchestrator.py::test_inflight_share_fans_out_final_status534FAILED nixbot/tests/test_orchestrator.py::test_linked_context_reported_on_eval_failure535FAILED nixbot/tests/test_orchestrator.py::test_cancel_during_eval_resolves_linked_eval_contexts536================== 6 failed, 827 passed, 12 skipped in 31.83s ==================