python3.14-nixbot-tests
checks.aarch64-darwin.nixbot-tests
· build #435
· raw
1Sourcing python-remove-tests-dir-hook2Sourcing python-catch-conflicts-hook.sh3Sourcing python-remove-bin-bytecode-hook.sh4Sourcing pypa-build-hook5Using pypaBuildPhase6Sourcing python-runtime-deps-check-hook7Using pythonRuntimeDepsCheckHook8Sourcing pypa-install-hook9Using pypaInstallPhase10Sourcing python-imports-check-hook.sh11Using pythonImportsCheckPhase12Sourcing python-namespaces-hook13Sourcing python-catch-conflicts-hook.sh14Sourcing pytest-check-hook15Using pytestCheckPhase
unpackPhase
16unpacking source archive /nix/store/054lh8j4xjg0y5qsavbgn5jqsrg561sl-nixbot17source root is nixbot18setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "nixbot/pyproject.toml"configurePhase
19no configure script, doing nothingbuildPhase
20Executing pypaBuildPhase21Creating a wheel...22pypa build flags: --no-isolation --outdir dist/ --wheel23* Getting build dependencies for wheel...24* Building wheel...25Successfully built nixbot-0.0.1-py3-none-any.whl26Finished creating a wheel...27Finished executing pypaBuildPhasepythonRuntimeDepsCheckHook
28Executing pythonRuntimeDepsCheck29Checking runtime dependencies for nixbot-0.0.1-py3-none-any.whl30Finished executing pythonRuntimeDepsCheckinstallPhase
31Executing pypaInstallPhase32Successfully installed nixbot-0.0.1-py3-none-any.whl33Finished executing pypaInstallPhasepythonOutputDistPhase
34Executing pythonOutputDistPhase35Finished executing pythonOutputDistPhasefixupPhase
36checking for references to /nix/var/nix/builds/nix-54604-2818304180/ in /nix/store/cl46r9ryf6cqna6cv3qwpd5plsdg7jww-python3.14-nixbot-tests...37patching script interpreter paths in /nix/store/cl46r9ryf6cqna6cv3qwpd5plsdg7jww-python3.14-nixbot-tests38stripping (with command strip and flags -S) in /nix/store/cl46r9ryf6cqna6cv3qwpd5plsdg7jww-python3.14-nixbot-tests/lib /nix/store/cl46r9ryf6cqna6cv3qwpd5plsdg7jww-python3.14-nixbot-tests/bin39checking for references to /nix/var/nix/builds/nix-54604-2818304180/ in /nix/store/klwzfbbb4w6p1xanpzyh7ylayc4p2yqj-python3.14-nixbot-tests-dist...40patching script interpreter paths in /nix/store/klwzfbbb4w6p1xanpzyh7ylayc4p2yqj-python3.14-nixbot-tests-dist41Rewriting #!/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.14 to #!/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.642wrapping `/nix/store/cl46r9ryf6cqna6cv3qwpd5plsdg7jww-python3.14-nixbot-tests/bin/nixbot'...43Executing pythonRemoveTestsDir44Finished executing pythonRemoveTestsDirinstallCheckPhase
45no Makefile or custom installCheckPhase, doing nothingpythonImportsCheckPhase
46Executing pythonImportsCheckPhasepytestCheckPhase
47Executing pytestCheckPhase48pytest flags: -m pytest --numprocesses=1049/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.50 warner(PytestBenchmarkWarning(text))51============================= test session starts ==============================52platform darwin -- Python 3.14.6, pytest-9.1.1, pluggy-1.6.053benchmark: 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)54rootdir: /nix/var/nix/builds/nix-54604-2818304180/nixbot55configfile: pyproject.toml56plugins: asyncio-1.4.0, timeout-2.4.0, xdist-3.8.0, benchmark-5.2.3, anyio-4.14.257asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function58timeout: 60.0s59timeout method: signal60timeout func_only: False61initialized: 10/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.62 warner(PytestBenchmarkWarning(text))63/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.64 warner(PytestBenchmarkWarning(text))65ready: 2/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.66 warner(PytestBenchmarkWarning(text))67/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.68 warner(PytestBenchmarkWarning(text))69ready: 4/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.70 warner(PytestBenchmarkWarning(text))71/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.72 warner(PytestBenchmarkWarning(text))73ready: 6/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.74 warner(PytestBenchmarkWarning(text))75ready: 7/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.76 warner(PytestBenchmarkWarning(text))77ready: 8/10 workers/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.78 warner(PytestBenchmarkWarning(text))79/nix/store/kfbmrm2rads9m3za8am89kll1xmzlbra-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.80 warner(PytestBenchmarkWarning(text))8110 workers [860 items] 82..............s.s..sss.ss.ss............................................ [ 8%]83........................................................................ [ 16%]84........................................................................ [ 25%]85......................s................................................. [ 33%]86........................................................................ [ 41%]87................................s....................................... [ 50%]88...................................ssssssssssss......................... [ 58%]89.....................................................................s.. [ 66%]90..............................F......................................... [ 75%]91............................................ssss........................ [ 83%]92................s....................................................... [ 92%]93.................................................................... [100%]94=================================== FAILURES ===================================95________________ test_executor_hard_cancel_kills_process_group _________________96[gw3] darwin -- Python 3.14.6 /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/bin/python3.149798self = <nixbot.executor.NixBuildExecutor object at 0x10bda4160>99cmd = ['nix', 'build', '--log-format', 'internal-json', '--option', 'keep-going', ...]100env = None101job = NixEvalJobSuccess(attr='foo', attr_path=['foo'], cache_status=<CacheStatus.not_built: 'notBuilt'>, needed_builds=['/ni...o', warnings=[], traces=[], stats=None, outputs={'out': '/nix/store/foo-out'}, system='x86_64-linux', extra_value=None)102log_writer = LogWriter(path=PosixPath('/nix/var/nix/builds/nix-54604-2818304180/pytest-of-_nixbld14/pytest-0/popen-gw3/test_executo...ard.backend_c.ZstdCompressor object at 0x10e865b60>, _flush_lock=<asyncio.locks.Lock object at 0x10e606a50 [unlocked]>)103cwd = PosixPath('/nix/var/nix/builds/nix-54604-2818304180/pytest-of-_nixbld14/pytest-0/popen-gw3/test_executor_hard_cancel_kill0')104cancel_event = <asyncio.locks.Event object at 0x10e606f90 [unset]>105on_built = None106107 async def _run_nix( # noqa: PLR0913108 self,109 cmd: list[str],110 env: dict[str, str] | None,111 job: NixEvalJobSuccess,112 log_writer: LogWriter,113 cwd: Path,114 cancel_event: asyncio.Event,115 on_built: Callable[[str], None] | None,116 ) -> tuple[BuildOutcome, bool]:117 group = await ProcessGroup.start(118 cmd,119 cwd=cwd,120 env=env,121 stdout=asyncio.subprocess.PIPE,122 stderr=asyncio.subprocess.STDOUT,123 limit=STREAM_LIMIT,124 )125 proc = group.proc126 assert proc.stdout is not None # noqa: S101127 128 output_tail: deque[bytes] = deque(maxlen=100)129 130 capture = StructuredCapture(on_built=on_built)131 log_writer.capture = capture132 pump_task = asyncio.create_task(133 _pump_output(proc.stdout, output_tail, log_writer, capture)134 )135 cancel_task = asyncio.create_task(cancel_event.wait())136 try:137 wait_task = asyncio.ensure_future(proc.wait())138> done, _ = await asyncio.wait(139 {wait_task, cancel_task},140 timeout=self.settings.timeout,141 return_when=asyncio.FIRST_COMPLETED,142 )143144nixbot/executor.py:938: 145_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 146/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/tasks.py:432: in wait147 return await _wait(fs, timeout, return_when, loop)148 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^149_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 150151fs = {<Task pending name='Task-116' coro=<Process.wait() running at /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.1...it() done, defined at /nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/locks.py:200>>}152timeout = 10800, return_when = 'FIRST_COMPLETED'153loop = <_UnixSelectorEventLoop running=False closed=False debug=False>154155 async def _wait(fs, timeout, return_when, loop):156 """Internal helper for wait().157 158 The fs argument must be a collection of Futures.159 """160 assert fs, 'Set of Futures is empty.'161 waiter = loop.create_future()162 timeout_handle = None163 if timeout is not None:164 timeout_handle = loop.call_later(timeout, _release_waiter, waiter)165 counter = len(fs)166 cur_task = current_task()167 168 def _on_completion(f):169 nonlocal counter170 counter -= 1171 if (counter <= 0 or172 return_when == FIRST_COMPLETED or173 return_when == FIRST_EXCEPTION and (not f.cancelled() and174 f.exception() is not None)):175 if timeout_handle is not None:176 timeout_handle.cancel()177 if not waiter.done():178 waiter.set_result(None)179 futures.future_discard_from_awaited_by(f, cur_task)180 181 for f in fs:182 f.add_done_callback(_on_completion)183 futures.future_add_to_awaited_by(f, cur_task)184 185 try:186> await waiter187E asyncio.exceptions.CancelledError188189/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/tasks.py:521: CancelledError190191During handling of the above exception, another exception occurred:192193fut = <Task cancelled name='Task-110' coro=<NixBuildExecutor.build_attribute() done, defined at /nix/var/nix/builds/nix-54604-2818304180/nixbot/nixbot/executor.py:802>>194timeout = 5195196 async def wait_for(fut, timeout):197 """Wait for the single Future or coroutine to complete, with timeout.198 199 Coroutine will be wrapped in Task.200 201 Returns result of the Future or coroutine. When a timeout occurs,202 it cancels the task and raises TimeoutError. To avoid the task203 cancellation, wrap it in shield().204 205 If the wait is cancelled, the task is also cancelled.206 207 If the task suppresses the cancellation and returns a value instead,208 that value is returned.209 210 This function is a coroutine.211 """212 # The special case for timeout <= 0 is for the following case:213 #214 # async def test_waitfor():215 # func_started = False216 #217 # async def func():218 # nonlocal func_started219 # func_started = True220 #221 # try:222 # await asyncio.wait_for(func(), 0)223 # except asyncio.TimeoutError:224 # assert not func_started225 # else:226 # assert False227 #228 # asyncio.run(test_waitfor())229 230 231 if timeout is not None and timeout <= 0:232 fut = ensure_future(fut)233 234 if fut.done():235 return fut.result()236 237 await _cancel_and_wait(fut)238 try:239 return fut.result()240 except exceptions.CancelledError as exc:241 raise TimeoutError from exc242 243 async with timeouts.timeout(timeout):244> return await fut245 ^^^^^^^^^246247/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/tasks.py:488: 248_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 249nixbot/executor.py:855: in build_attribute250 outcome, transient = await self._run_once(251nixbot/executor.py:903: in _run_once252 return await self._run_nix(253nixbot/executor.py:983: in _run_nix254 await group.reap()255/nix/store/rxaa7anm1s3bzvhl9b9hl11xx3haq9y5-python3.14-nixbot-effects/lib/python3.14/site-packages/nixbot_effects/proc.py:82: in reap256 await self.proc.wait()257/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/subprocess.py:137: in wait258 return await self._transport._wait()259 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^260_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 261262self = <_UnixSubprocessTransport pid=57782 returncode=-9 stdout=<_UnixReadPipeTransport fd=16 polling>>263264 async def _wait(self):265 """Wait until the process exit and return the process return code.266 267 This method is a coroutine."""268 if self._returncode is not None:269 return self._returncode270 271 waiter = self._loop.create_future()272 self._exit_waiters.append(waiter)273> return await waiter274 ^^^^^^^^^^^^275E asyncio.exceptions.CancelledError276277/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/base_subprocess.py:255: CancelledError278279The above exception was the direct cause of the following exception:280281tmp_path = PosixPath('/nix/var/nix/builds/nix-54604-2818304180/pytest-of-_nixbld14/pytest-0/popen-gw3/test_executor_hard_cancel_kill0')282fake_nix = PosixPath('/nix/var/nix/builds/nix-54604-2818304180/pytest-of-_nixbld14/pytest-0/popen-gw3/test_executor_hard_cancel_kill0/control')283284 async def test_executor_hard_cancel_kills_process_group(285 tmp_path: Path, fake_nix: Path286 ) -> None:287 """Cancelling the build task itself (not via the cancel event) must288 not leak the running nix process group.289 290 Group-kill semantics themselves are covered by291 test_proc.test_reap_kills_whole_group. This checks the executor's292 hard-cancel wiring (the finally path that also stops the log pump).293 """294 fake_nix.write_text("hangpid")295 pidfile = tmp_path / "pid"296 297 executor = NixBuildExecutor(FairScheduler(2), BuildSettings(log_dir=tmp_path))298 writer = LogWriter(path=tmp_path / "log.zst")299 task = asyncio.create_task(300 executor.build_attribute("b", mk_job(), writer, tmp_path)301 )302 while ( # noqa: ASYNC110 — polling an external file is the point303 not pidfile.exists() or not pidfile.read_text().strip()304 ):305 await asyncio.sleep(0.01)306 task.cancel()307 with contextlib.suppress(asyncio.CancelledError):308> await asyncio.wait_for(task, timeout=5)309310nixbot/tests/test_executor.py:430: 311_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 312/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/tasks.py:487: in wait_for313 async with timeouts.timeout(timeout):314 ^^^^^^^^^^^^^^^^^^^^^^^^^315_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 316317self = <Timeout [expired]>318exc_type = <class 'asyncio.exceptions.CancelledError'>319exc_val = CancelledError(), exc_tb = <traceback object at 0x10f173340>320321 async def __aexit__(322 self,323 exc_type: type[BaseException] | None,324 exc_val: BaseException | None,325 exc_tb: TracebackType | None,326 ) -> bool | None:327 assert self._state in (_State.ENTERED, _State.EXPIRING)328 329 if self._timeout_handler is not None:330 self._timeout_handler.cancel()331 self._timeout_handler = None332 333 if self._state is _State.EXPIRING:334 self._state = _State.EXPIRED335 336 if self._task.uncancel() <= self._cancelling and exc_type is not None:337 # Since there are no new cancel requests, we're338 # handling this.339 if issubclass(exc_type, exceptions.CancelledError):340> raise TimeoutError from exc_val341E TimeoutError342343/nix/store/i9q7np6h9bwa3ps6937lpwarkqw0izbf-python3-3.14.6/lib/python3.14/asyncio/timeouts.py:115: TimeoutError344=========================== short test summary info ============================345FAILED nixbot/tests/test_executor.py::test_executor_hard_cancel_kills_process_group - TimeoutError346============= 1 failed, 830 passed, 29 skipped in 78.40s (0:01:18) =============