tribuchet: building on eliza Sourcing python-remove-tests-dir-hook Sourcing python-catch-conflicts-hook.sh Sourcing python-remove-bin-bytecode-hook.sh Sourcing pypa-build-hook Using pypaBuildPhase Sourcing python-runtime-deps-check-hook Using pythonRuntimeDepsCheckHook Sourcing pypa-install-hook Using pypaInstallPhase Sourcing python-imports-check-hook.sh Using pythonImportsCheckPhase Sourcing python-namespaces-hook Sourcing python-catch-conflicts-hook.sh Sourcing pytest-check-hook Using pytestCheckPhase Running phase: unpackPhase unpacking source archive /nix/store/zwm2z7xg8nrc0qyx19wga55yh56njhll-nixbot source root is nixbot setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "nixbot/pyproject.toml" Running phase: patchPhase Running phase: updateAutotoolsGnuConfigScriptsPhase Running phase: configurePhase no configure script, doing nothing Running phase: buildPhase Executing pypaBuildPhase Creating a wheel... pypa build flags: --no-isolation --outdir dist/ --wheel * Getting build dependencies for wheel... * Building wheel... Successfully built nixbot-0.0.1-py3-none-any.whl Finished creating a wheel... Finished executing pypaBuildPhase Running phase: pythonRuntimeDepsCheckHook Executing pythonRuntimeDepsCheck Checking runtime dependencies for nixbot-0.0.1-py3-none-any.whl Finished executing pythonRuntimeDepsCheck Running phase: installPhase Executing pypaInstallPhase Successfully installed nixbot-0.0.1-py3-none-any.whl Finished executing pypaInstallPhase Running phase: pythonOutputDistPhase Executing pythonOutputDistPhase Finished executing pythonOutputDistPhase Running phase: fixupPhase shrinking RPATHs of ELF executables and libraries in /nix/store/wzy0z41l0w8g5fphcirsc3v7bfia4659-python3.14-nixbot-tests checking for references to /build/ in /nix/store/wzy0z41l0w8g5fphcirsc3v7bfia4659-python3.14-nixbot-tests... patching script interpreter paths in /nix/store/wzy0z41l0w8g5fphcirsc3v7bfia4659-python3.14-nixbot-tests stripping (with command strip and flags -S -p) in /nix/store/wzy0z41l0w8g5fphcirsc3v7bfia4659-python3.14-nixbot-tests/lib /nix/store/wzy0z41l0w8g5fphcirsc3v7bfia4659-python3.14-nixbot-tests/bin shrinking RPATHs of ELF executables and libraries in /nix/store/c7cgpgx5l8qkmqdl3l2206vmzwysyyqm-python3.14-nixbot-tests-dist checking for references to /build/ in /nix/store/c7cgpgx5l8qkmqdl3l2206vmzwysyyqm-python3.14-nixbot-tests-dist... patching script interpreter paths in /nix/store/c7cgpgx5l8qkmqdl3l2206vmzwysyyqm-python3.14-nixbot-tests-dist Rewriting #!/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 to #!/nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6 wrapping `/nix/store/wzy0z41l0w8g5fphcirsc3v7bfia4659-python3.14-nixbot-tests/bin/nixbot'... Executing pythonRemoveTestsDir Finished executing pythonRemoveTestsDir Running phase: installCheckPhase no Makefile or custom installCheckPhase, doing nothing Running phase: pythonCatchConflictsPhase Running phase: pythonRemoveBinBytecodePhase Running phase: pythonImportsCheckPhase Executing pythonImportsCheckPhase Running phase: pytestCheckPhase Executing pytestCheckPhase pytest flags: -m pytest --numprocesses=24 /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) /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. warner(PytestBenchmarkWarning(text)) ============================= test session starts ============================== platform linux -- Python 3.14.6, pytest-9.1.1, pluggy-1.6.0 benchmark: 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) rootdir: /build/nixbot configfile: pyproject.toml plugins: asyncio-1.4.0, timeout-2.4.0, xdist-3.8.0, benchmark-5.2.3, anyio-4.14.2 asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 60.0s timeout method: signal timeout func_only: False created: 24/24 workers 24 workers [807 items] .........................ss............................................. [ 8%] ..................F..................................................... [ 17%] ..............sssssss................................................... [ 26%] ........................................................................ [ 35%] .....................................s.................................. [ 44%] E.EEEEEEEEEEEEE..E..E.EEEEEEEEEEE..EE.EEEEEE.EEE..E..EEEEEEEEEEEEEEE.EEE [ 53%] E..E.EEEE.EEEE.EEE.E.....EEEEEEEEEE...E...E..........EE........EEE..E... [ 62%] EEEE.EEEEEEEEEEEEE..E...E.E.EEEEEEEEEEEEEEEE.EEE..EEEEEEEEEEEEEEEEEEEEEE [ 71%] EE.EEEEs.EEE.E...E.sEEEEE.EEEEEEEEEEEEEEEEEEEEEEEEE.EEEEEEEEEEEEEEEEEEEE [ 80%] EEEEEEEE.EEEEEEEEEEEEEEEEEEEEEEEEE..E........EEEEEEEEEEEEEEE..EEEEEEEEEE [ 89%] EEEEEEEE.EEEEE....E.EEEEEEEEEEEEEEEEEEEEEEEEEE.EEEEEEEEEEEEEEEEEEEEEEEEE [ 98%] EEEEE...E...EEE [100%] ==================================== ERRORS ==================================== ___________________ ERROR at setup of test_repos_and_builds ____________________ [gw6] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 fixturedef = request = > @pytest.hookimpl(wrapper=True) def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None: if ( fixturedef.argname == "event_loop_policy" and fixturedef.func.__module__ != __name__ ): warnings.warn( PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING), ) asyncio_mode = _get_asyncio_mode(request.config) if not _is_asyncio_fixture_function(fixturedef.func): if asyncio_mode == Mode.STRICT: # Ignore async fixtures without explicit asyncio mark in strict mode # This applies to pytest_trio fixtures, for example return (yield) if not _is_coroutine_or_asyncgen(fixturedef.func): > return (yield) ^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_migrations_idempotent _________________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup return (yield) ^^^^^ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_anonymous_sees_public_only _______________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 fixturedef = request = > @pytest.hookimpl(wrapper=True) def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None: if ( fixturedef.argname == "event_loop_policy" and fixturedef.func.__module__ != __name__ ): warnings.warn( PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING), ) asyncio_mode = _get_asyncio_mode(request.config) if not _is_asyncio_fixture_function(fixturedef.func): if asyncio_mode == Mode.STRICT: # Ignore async fixtures without explicit asyncio mark in strict mode # This applies to pytest_trio fixtures, for example return (yield) if not _is_coroutine_or_asyncgen(fixturedef.func): > return (yield) ^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________________ ERROR at setup of test_full_lifecycle _____________________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup return (yield) ^^^^^ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_control_buttons_hidden_without_permission _______ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 fixturedef = request = > @pytest.hookimpl(wrapper=True) def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None: if ( fixturedef.argname == "event_loop_policy" and fixturedef.func.__module__ != __name__ ): warnings.warn( PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING), ) asyncio_mode = _get_asyncio_mode(request.config) if not _is_asyncio_fixture_function(fixturedef.func): if asyncio_mode == Mode.STRICT: # Ignore async fixtures without explicit asyncio mark in strict mode # This applies to pytest_trio fixtures, for example return (yield) if not _is_coroutine_or_asyncgen(fixturedef.func): > return (yield) ^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_chunk_args_splits_on_byte_limit ____________ [gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 fixturedef = request = > @pytest.hookimpl(wrapper=True) def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None: if ( fixturedef.argname == "event_loop_policy" and fixturedef.func.__module__ != __name__ ): warnings.warn( PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING), ) asyncio_mode = _get_asyncio_mode(request.config) if not _is_asyncio_fixture_function(fixturedef.func): if asyncio_mode == Mode.STRICT: # Ignore async fixtures without explicit asyncio mark in strict mode # This applies to pytest_trio fixtures, for example return (yield) if not _is_coroutine_or_asyncgen(fixturedef.func): > return (yield) ^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_resume_skips_terminal_attributes ____________ [gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup return (yield) ^^^^^ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_enqueue_dedupes_pending ________________ [gw22] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup return (yield) ^^^^^ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_match_skip_and_run ___________________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup return (yield) ^^^^^ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________________ ERROR at setup of test_html_error_pages ____________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 fixturedef = request = > @pytest.hookimpl(wrapper=True) def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None: if ( fixturedef.argname == "event_loop_policy" and fixturedef.func.__module__ != __name__ ): warnings.warn( PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING), ) asyncio_mode = _get_asyncio_mode(request.config) if not _is_asyncio_fixture_function(fixturedef.func): if asyncio_mode == Mode.STRICT: # Ignore async fixtures without explicit asyncio mark in strict mode # This applies to pytest_trio fixtures, for example return (yield) if not _is_coroutine_or_asyncgen(fixturedef.func): > return (yield) ^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_project_store_sync_and_legacy_import __________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup return (yield) ^^^^^ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_repo_list_and_toggle __________________ [gw15] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 fixturedef = request = > @pytest.hookimpl(wrapper=True) def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None: if ( fixturedef.argname == "event_loop_policy" and fixturedef.func.__module__ != __name__ ): warnings.warn( PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING), ) asyncio_mode = _get_asyncio_mode(request.config) if not _is_asyncio_fixture_function(fixturedef.func): if asyncio_mode == Mode.STRICT: # Ignore async fixtures without explicit asyncio mark in strict mode # This applies to pytest_trio fixtures, for example return (yield) if not _is_coroutine_or_asyncgen(fixturedef.func): > return (yield) ^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_scheduled_worktree_id_distinct_per_effect _______ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 fixturedef = request = > @pytest.hookimpl(wrapper=True) def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None: if ( fixturedef.argname == "event_loop_policy" and fixturedef.func.__module__ != __name__ ): warnings.warn( PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING), ) asyncio_mode = _get_asyncio_mode(request.config) if not _is_asyncio_fixture_function(fixturedef.func): if asyncio_mode == Mode.STRICT: # Ignore async fixtures without explicit asyncio mark in strict mode # This applies to pytest_trio fixtures, for example return (yield) if not _is_coroutine_or_asyncgen(fixturedef.func): > return (yield) ^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _ ERROR at setup of test_replace_schedules_preserves_last_run_for_unchanged_spec _ [gw21] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: in pytest_fixture_setup return (yield) ^^^^^ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_finished_attrs_cursor _________________ [gw6] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_unauthorized_user_sees_public_only ___________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_admin_can_restart_and_cancel ______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_api_strips_ansi_from_errors ______________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_parse_path_info_both_formats ______________ [gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw18'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw18'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_failed_migration_error_not_masked ___________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_scheduled_worktree_id_sanitizes_traversal _______ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw7'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw7'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_failure_aggregation __________________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_settle_already_built __________________ [gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_claim_serializes_per_key ________________ [gw22] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______ ERROR at setup of test_legacy_import_runs_despite_pull_based_rows _______ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_permission_denied_records_reason ____________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __ ERROR at setup of test_replace_schedules_tolerates_duplicate_effect_names ___ [gw21] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_control_requires_token _________________ [gw6] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_authorized_user_sees_private ______________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_pr_author_can_control_own_pr ______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_build_list_and_view __________________ [gw15] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________________ ERROR at setup of test_homepage ________________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_resolve_credential_path ________________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw7'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw7'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_final_upload_reports_and_clears_queue _________ [gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_edited_migration_rejected _______________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________________ ERROR at setup of test_tree_hash_reuse ____________________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________________ ERROR at setup of test_retention_cleanup ___________________ [gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_settle_interrupted_requeues ______________ [gw22] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_store_roundtrip_and_due ________________ [gw21] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_legacy_import_scopes_topics_per_forge _________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_modified_files_gate __________________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________________ ERROR at setup of test_enable_disable _____________________ [gw6] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_admin_sees_everything _________________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_build_restart_cancel __________________ [gw15] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_project_page_with_filters _______________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_build_service_accepts_asyncpg_dsn ___________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_homepage_lists_project_and_recent_builds ________ [gw20] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 fixturedef = request = > @pytest.hookimpl(wrapper=True) def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None: if ( fixturedef.argname == "event_loop_policy" and fixturedef.func.__module__ != __name__ ): warnings.warn( PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING), ) asyncio_mode = _get_asyncio_mode(request.config) if not _is_asyncio_fixture_function(fixturedef.func): if asyncio_mode == Mode.STRICT: # Ignore async fixtures without explicit asyncio mark in strict mode # This applies to pytest_trio fixtures, for example return (yield) if not _is_coroutine_or_asyncgen(fixturedef.func): > return (yield) ^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ---------------------------- Captured stderr setup ----------------------------- Skipping host requirements validation logic because `PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS` env variable is set. ____ ERROR at setup of test_intermediates_batch_with_final_and_drop_invalid ____ [gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_catchup_migration_repairs_pre_0033_schema _______ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_eval_reuse_from_cancelled_build ____________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________________ ERROR at setup of test_log_toc_and_text ____________________ [gw6] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw6'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_prune_missing_disabled_projects ____________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_resume_includes_interrupted_building_attributes ____ [gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_due_effects_window_and_bad_spec ____________ [gw21] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_admin_sees_disabled_repos_without_search ________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __ ERROR at setup of test_repo_writer_can_control_without_admin_or_authorship __ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_log_summary_attr_and_drv ________________ [gw15] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________________ ERROR at setup of test_status_badge_urls ___________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_navigate_sidebar_to_failed_build ____________ [gw20] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_visibility_fetcher_and_cache_ttl_wired _________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________________ ERROR at setup of test_stdin_mode _______________________ [gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_huge_attr_name_does_not_break_notify_trigger ______ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_forge_outage_is_retried ________________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_eval_reuse_skipped_when_drvs_gone ___________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_non_admin_does_not_see_disabled_repos _________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_cancel_all_requires_admin _______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_retention_skips_restarted_builds ____________ [gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_run_recording_and_overview _______________ [gw21] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_repo_and_build_inference ________________ [gw15] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_all_digit_branch_is_filterable _____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_build_prev_next_navigation _______________ [gw20] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_aclose_cancels_in_flight_tasks _____________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_api_token_sees_private _________________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_forge_outage_gives_up _________________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_project_store_sync_skips_unchanged_rows ________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_pending_paths_survive_restart _____________ [gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_main_push_promotes_reused_pr_build ___________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_cancel_all_cancels_pending_and_running_builds _____ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________________ ERROR at setup of test_build_page _______________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_schema_constraints ___________________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________________ ERROR at setup of test_auth_status ______________________ [gw15] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_structured_log_viewer _________________ [gw20] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_admin_api_token_sees_private ______________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_uploader_factory_picks_stream _____________ [gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw18'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw18'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_cancel_all_button_admin_only ______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_attribute_rows_fragment_paginates ___________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_retention_ages_out_failed_caches ____________ [gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_lock_shared_with_push_effect_and_supersession _____ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_pr_close_discards_queued_changes ____________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_check_run_store_round_trip _______________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_merge_conflict_fails_build _______________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_gitea_hook_registration ________________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_project_filter_form __________________ [gw20] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_forge_repo_admins_can_toggle_their_repos ________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_csrf_cross_origin_rejected _______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_build_page_shows_eval_warning_groups __________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_stream_reports_per_path_and_clears_queue ________ [gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_build_branches_gates_branch_pushes ___________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_checkout_is_pr_head_without_token ___________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_gitlab_heads_carry_target_branch_base _________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_build_reuse_clears_pr_author_in_other_context _____ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_attribute_log_prev_next_navigation ___________ [gw20] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_failed_rebuild_settles_pending_effects _________ [gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_failed_status_store_component _____________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___ ERROR at setup of test_log_follow_finished_attr_falls_back_to_stored_log ___ [gw15] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw15'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______ ERROR at setup of test_forge_repo_writers_can_control_their_repos _______ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_restart_single_attribute ________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_build_page_shows_per_attribute_eval_warnings ______ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________________ ERROR at setup of test_project_filter _____________________ [gw20] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_gitea_heads_encode_slashed_default_branch _______ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_restart_gitlab_mr_build_fetches_mr_refs ________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_build_success_enqueues_delivery ____________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_effects_started_flag __________________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_failed_build_cache_component ______________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_rerun_clears_stale_eval_warnings ____________ [gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_fetch_errors_are_not_cached ______________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_restart_unknown_attribute_is_404 ____________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_build_page_renders_ansi_in_error ____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_stream_error_is_reported_with_message _________ [gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_activity_shows_running_build ______________ [gw20] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_comment_and_close_webhooks_deliver ___________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_reconcile_unbuilt_heads ________________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_aggregation_generation_monotonic ____________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_interrupted_effects_fail_on_recovery __________ [gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________________ ERROR at setup of test_access_cache_used ___________________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_get_or_create_build_concurrent_no_duplicates ______ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _ ERROR at setup of test_restart_attribute_with_special_chars_redirects_encoded _ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_running_build_shows_progress ______________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_stream_child_crash_refeeds_pending ___________ [gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_activity_infinite_scroll ________________ [gw20] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_restart_eval_failed_build_reevaluates _________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_metrics_unauthenticated_no_private_names ________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_gitea_watermark_stops_pagination ____________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_admin_project_toggle __________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_close_after_merge_push_reused_build __________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___ ERROR at setup of test_internal_error_not_recorded_in_failed_build_cache ___ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_interrupted_effects_sweep_spares_live_effects _____ [gw17] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_build_page_live_markers ________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_commit_eval_result_atomic _______________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_no_horizontal_overflow_on_mobile ____________ [gw20] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_failure_reports_retries_and_gives_up __________ [gw18] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_restart_clears_stale_error_and_warnings ________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_configured_viewers_see_private _____________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_toggle_activates_newly_enabled_project _________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________________ ERROR at setup of test_attribute_history ___________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_build_finished_transitions _______________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_gitlab_heads_filter_updated_after ___________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_log_path_attribute_name_sanitized ___________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_attribute_search_filters_groups ____________ [gw20] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_cancelled_build_not_reused _______________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________________ ERROR at setup of test_run_schedule ______________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_api_token_inherits_login_groups ____________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_restart_unknown_attribute_is_a_noop __________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_overview_ignores_pr_branches ______________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_command_while_running_gets_notice ___________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_reconcile_watermark_store _______________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_cancel_interrupts_evaluation ______________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_reuse_backfills_pr_fields _______________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________________ ERROR at setup of test_repo_refresh ______________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_logout_invalidates_access_cache ____________ [gw13] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw13'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_pending_build_shows_eval_blocker ____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_restart_failed_eval_attribute_reevaluates _______ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_groups_keep_identity_when_one_appears _________ [gw20] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw20'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_other_command_does_not_supersede ____________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_build_waiting_for_eval_slot_stays_pending _______ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_register_repo_hook_without_admin_warns _________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_reuse_by_other_pr_clears_both_identity_fields _____ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_api_enable_disable ___________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_project_filter_escapes_like_wildcards _________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_interrupted_reeval_keeps_attribute_rows ________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_label_change_redelivers_pull_request __________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __ ERROR at setup of test_pending_attribute_rows_recorded_for_crash_recovery ___ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_gitlab_hook_registration ________________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_api_restart_and_cancel _________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_branch_push_takes_over_reused_pr_build _________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_page_out_of_range_does_not_error ____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_restart_cancelled_build_reschedules_attributes _____ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_build_outcome_and_restart_leave_event_history _____ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_attribute_table_refreshes_while_building ________ [gw3] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 fixturedef = request = > @pytest.hookimpl(wrapper=True) def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None: if ( fixturedef.argname == "event_loop_policy" and fixturedef.func.__module__ != __name__ ): warnings.warn( PytestDeprecationWarning(_EVENT_LOOP_POLICY_FIXTURE_DEPRECATION_WARNING), ) asyncio_mode = _get_asyncio_mode(request.config) if not _is_asyncio_fixture_function(fixturedef.func): if asyncio_mode == Mode.STRICT: # Ignore async fixtures without explicit asyncio mark in strict mode # This applies to pytest_trio fixtures, for example return (yield) if not _is_coroutine_or_asyncgen(fixturedef.func): > return (yield) ^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:926: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ---------------------------- Captured stderr setup ----------------------------- Skipping host requirements validation logic because `PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS` env variable is set. __________________ ERROR at setup of test_api_token_lifecycle __________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_eval_warnings_null_when_empty _____________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________________ ERROR at setup of test_activity_page _____________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_register_repo_hook_500_with_403_in_body_raises _____ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_pr_does_not_capture_branch_push_build _________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_restart_cancelled_mid_eval_reevaluates _________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_log_page_streams_live_output ______________ [gw3] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw3'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw3'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_expired_api_tokens_pruned _______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_activity_no_sentinel_on_exact_page ___________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_restart_event_effect_reruns_with_stored_payload ____ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_rerun_flips_stale_red_eval_status ___________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_gitlab_register_repo_hook_status_classification ____ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_complete_attribute_preserves_eval_outputs _______ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_restart_while_unwinding_waits_then_runs ________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_token_creation_with_expiry _______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_log_page_keeps_up_with_a_line_burst __________ [gw3] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw3'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw3'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_activity_rows_fragment_pagination ___________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_listing_failure_recorded_on_build ___________ [gw16] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_recovery_rerun_failures_not_cached ___________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_gitea_legacy_hook_delete_failure_warns _________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_complete_attribute_marks_substituted_as_cached _____ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_proxy_user_can_manage_api_tokens ____________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_repeated_activity_keeps_one_card ____________ [gw3] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw3'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw3'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_restart_attribute_while_build_running _________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_project_rows_fragment_filters _____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_gitlab_mr_fetches_merge_request_refs __________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_sync_tolerates_in_batch_duplicates ___________ [gw5] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_bearer_token_cannot_manage_api_tokens _________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_metrics_are_gauges ___________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_cancel_not_running_posts_forge_status _________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_complete_attribute_replaces_log_metadata ________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_rerun_fetches_forge_change_request_refs[github] ____ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_api_token_controls_build ________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_metrics_are_cached ___________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_check_rerequested_dispatch _______________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _ ERROR at setup of test_record_attributes_persists_pending_rows_with_outputs __ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_build_service_composition _______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_cancel_not_running_settles_attribute_rows _______ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_static_urls_carry_content_version ___________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_rerun_fetches_forge_change_request_refs[gitlab] ____ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _ ERROR at setup of test_mark_attribute_building_does_not_resurrect_cancelled_rows _ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_restart_removes_stale_logs _______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_cancel_attribute_not_running_reaggregates_build ____ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_legacy_project_urls_redirect ______________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_cancelled_build_reuse_rebuilds _____________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __ ERROR at setup of test_mark_attribute_building_sets_status_and_started_at ___ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_restart_clears_failed_cache ______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _ ERROR at setup of test_private_repo_public_badge_bypasses_session_visibility _ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_pull_based_projects_synced_and_buildable ________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_inflight_share_fans_out_final_status __________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _ ERROR at setup of test_complete_attribute_if_unfinished_skips_terminal_rows __ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_webhook_setup_shown_to_admin_only ___________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_legacy_redirect_hides_invisible_projects ________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_topic_does_not_hard_filter_discovery __________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_webhook_secret_regeneration ______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______ ERROR at setup of test_stale_event_does_not_supersede_newer_build _______ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_failed_build_cache_scoped_per_project _________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_legacy_redirect_404s_on_ambiguous_owner_name ______ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_startup_reevaluates_interrupted_eval __________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_retry_after_parsing __________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_eval_failure_cleans_cancel_events ___________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_eval_stats_lifecycle __________________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________________ ERROR at setup of test_health_and_static ___________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_rerun_of_interrupted_eval_reevaluates _________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________________ ERROR at setup of test_404s __________________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_eval_settings_wired __________________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_work_retry_delay_honors_retry_after __________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_rerun_resumes_building_rows_and_keeps_finished _____ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _ ERROR at setup of test_eval_netrc_withheld_from_pr_with_instance_wide_creds __ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_log_viewer_and_raw ___________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________________ ERROR at setup of test_report_retry ______________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _ ERROR at setup of test_rerun_reevaluates_when_drv_paths_were_garbage_collected _ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_structured_log_endpoints ________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_eval_gcroots_dir_removed_after_build __________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_effect_item_setup_failure_settles_row _________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_reeval_failure_marks_build_failed ___________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______ ERROR at setup of test_structured_log_window_caps_huge_derivation _______ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_effects_run_after_default_branch_success ________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_restart_attribute_posts_pending ____________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_gitlab_discovery_and_hook_registration _________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_attr_named_dot_txt_not_shadowed_by_raw_route ______ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_pr_worktree_config_cannot_grant_effects ________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_recovery_reports_interrupted_effects __________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_attr_names_with_special_characters ___________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_health_serves_while_startup_blocks ___________ [gw7] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_rerun_effects_runs_effects_again ____________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_log_viewer_waits_for_queued_attribute _________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________________ ERROR at setup of test_work_dispatch _____________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_rerun_effects_cancels_hung_effect ___________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_log_viewer_unavailable_for_logless_status _______ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_restart_resets_effects _________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_eval_error_served_like_build_log ____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_rerun_single_effect __________________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_effects_restart_route _________________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_api_projects_and_builds ________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_single_effect_restart_route ______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_recovery_rerun_runs_effects ______________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_build_rows_link_refs __________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_webhook_panel_is_forge_aware ______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __ ERROR at setup of test_unsupported_system_attr_does_not_block_aggregation ___ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_attributes_sort_building_before_pending ________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_api_attr_and_effects_control ______________ [gw4] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw4'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_linked_context_reported_on_eval_failure ________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_queue_sorts_active_before_pending ___________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_eval_failure_settles_streamed_attributes ________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______ ERROR at setup of test_queue_position_is_global_and_skips_running _______ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________________ ERROR at setup of test_openapi_docs ______________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_effect_rows_roundtrip _________________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________________ ERROR at setup of test_structured_live_stream _________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_effect_items_resume_only_pending ____________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_drv_raw_serves_running_attribute ____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_effect_crash_settles_the_row ______________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_log_sse_stream_caps_history_backlog __________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_concurrent_effects_use_independent_worktrees ______ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______ ERROR at setup of test_log_sse_stream_neutralizes_carriage_returns ______ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_locked_effect_gets_shared_dedup_key __________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_api_builds_commit_filter ________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________________ ERROR at setup of test_log_tail_param _____________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______ ERROR at setup of test_effect_item_not_claimable_until_dep_settles ______ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_api_build_failures ___________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_effect_dep_failure_skips_dependent ___________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_api_build_failures_rejects_non_positive_tail ______ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______ ERROR at setup of test_lock_serializes_builds_without_interleaving ______ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________________ ERROR at setup of test_llms_txt ________________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_effect_dep_cycle_fails_discovery ____________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_event_broker_pushes_status_changes ___________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_events_stream_coalesces_burst _____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_failed_effect_reports_failure_status __________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_events_stream_refreshes_visibility ___________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_post_process_error_does_not_wedge_build ________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________________ ERROR at setup of test_attribute_search ____________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_unexpected_eval_path_error_settles_build ________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_build_page_shows_effects ________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_reuse_empty_succeeded_build_posts_eval_success _____ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________ ERROR at setup of test_build_page_shows_event_effects _____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __ ERROR at setup of test_stale_event_reusing_old_build_does_not_cancel_newer __ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_effect_log_raw_text __________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______ ERROR at setup of test_reuse_for_default_branch_push_runs_effects _______ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_effect_log_viewer_status_icon _____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_effect_changes_notify_build_events ___________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______ ERROR at setup of test_reuse_replays_effect_statuses_to_new_commit ______ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________________ ERROR at setup of test_effects_state_api ___________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_attach_to_already_terminal_build_replays_status ____ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____________________ ERROR at setup of test_pr_comment_api _____________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___ ERROR at setup of test_cancel_during_eval_resolves_linked_eval_contexts ____ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_workload_identity_api _________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_effect_log_does_not_collide_with_attribute_log _____ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_logout_revokes_session_cookie _____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_post_process_paths_are_forge_scoped __________ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ______________ ERROR at setup of test_gitlab_nested_group_routes _______________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_scheduled_run_viewer_renders_ansi ___________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_effects_phase_error_keeps_succeeded_build _______ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_scheduled_run_viewer_cross_project_404 _________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____ ERROR at setup of test_reuse_post_process_error_still_reports_status _____ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______ ERROR at setup of test_scheduled_run_log_unavailable_placeholder _______ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ____ ERROR at setup of test_reuse_with_missing_output_still_post_processes _____ [gw1] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 self = def setup(self) -> None: runner_fixture_id = f"_{self._loop_scope}_scoped_runner" if runner_fixture_id not in self.fixturenames: self.fixturenames.append(runner_fixture_id) # When loop factories are configured, resolve the loop factory # fixture early so that a factory variant change cascades cache # invalidation before any async fixture checks its cache. hook_caller = self.config.hook.pytest_asyncio_loop_factories if hook_caller.get_hookimpls(): _ = self._request.getfixturevalue(_asyncio_loop_factory.__name__) > return super().setup() ^^^^^^^^^^^^^^^ /nix/store/w1bjyfr3001rbxnff7jxj3hjv1hx7ydz-python3.14-pytest-asyncio-1.4.0/lib/python3.14/site-packages/pytest_asyncio/plugin.py:558: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ nixbot/tests/conftest.py:33: in postgres_dsn with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ________ ERROR at setup of test_scheduled_run_viewer_waiting_before_log ________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_scheduled_run_history_lists_runs ____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________ ERROR at setup of test_scheduled_run_history_special_chars __________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________ ERROR at setup of test_scheduled_run_stream_replays_history __________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError ___________ ERROR at setup of test_scheduled_run_notify_build_events ___________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _________________ ERROR at setup of test_api_log_toc_and_text __________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _____________ ERROR at setup of test_api_log_toc_flat_log_fallback _____________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError __________________ ERROR at setup of test_api_log_stream_json __________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError _______________ ERROR at setup of test_build_eval_stats_surface ________________ [gw0] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 request = > tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _trace=, _basetemp=PosixPath('/build/pytest-of-nixbld/pytest-0/popen-gw0'), _retention_count=3, _retention_policy='all') @pytest.fixture(scope="module") def postgres_dsn( request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory ) -> Iterator[str]: if shutil.which("initdb") is None: pytest.skip("postgresql not available") dbname = request.module.__name__.rsplit(".", 1)[-1].removeprefix("test_") > with ephemeral_postgres(tmp_path_factory, dbname) as dsn: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nixbot/tests/conftest.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/contextlib.py:141: in __enter__ return next(self.gen) ^^^^^^^^^^^^^^ nixbot/tests/support.py:327: in ephemeral_postgres run_sync(apply_migrations(dsn)) nixbot/tests/support.py:285: in run_sync return executor.submit(asyncio.run, coro).result(timeout=120) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:454: in result return self.__get_result() ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/_base.py:396: in __get_result raise self._exception /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:86: in run result = ctx.run(self.task) ^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/concurrent/futures/thread.py:73: in run return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:205: in run return runner.run(main) ^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/runners.py:128: in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ nixbot/migrations.py:99: in apply_migrations migrations = load_migrations() ^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError =================================== FAILURES =================================== _____________________________ test_load_migrations _____________________________ [gw11] linux -- Python 3.14.6 /nix/store/41m77i1296n33p6liin8ynr6wh3h6b7m-python3-3.14.6/bin/python3.14 def test_load_migrations() -> None: > migrations = load_migrations() ^^^^^^^^^^^^^^^^^ nixbot/tests/test_db.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_migrations() -> list[Migration]: """Load migration scripts shipped with the package, ordered by version.""" migrations = [] for entry in resources.files(__package__).joinpath("migrations").iterdir(): m = _SCRIPT_RE.match(entry.name) if m is None: continue migrations.append( Migration( version=int(m.group(1)), name=m.group(2), sql=entry.read_text(), ) ) migrations.sort(key=lambda mig: mig.version) versions = [m.version for m in migrations] if len(set(versions)) != len(versions): msg = f"Duplicate migration versions: {versions}" > raise MigrationError(msg) E nixbot.migrations.MigrationError: Duplicate migration versions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 33] nixbot/migrations.py:67: MigrationError =========================== short test summary info ============================ FAILED nixbot/tests/test_db.py::test_load_migrations - nixbot.migrations.Migr... ERROR nixbot/tests/test_cli_api.py::test_repos_and_builds - nixbot.migrations... ERROR nixbot/tests/test_db.py::test_migrations_idempotent - nixbot.migrations... ERROR nixbot/tests/test_visibility.py::test_anonymous_sees_public_only - nixb... ERROR nixbot/tests/test_orchestrator.py::test_full_lifecycle - nixbot.migrati... ERROR nixbot/tests/test_control.py::test_control_buttons_hidden_without_permission ERROR nixbot/tests/test_upload.py::test_chunk_args_splits_on_byte_limit - nix... ERROR nixbot/tests/test_recovery.py::test_resume_skips_terminal_attributes - ... ERROR nixbot/tests/test_work_queue.py::test_enqueue_dedupes_pending - nixbot.... ERROR nixbot/tests/test_deliver.py::test_match_skip_and_run - nixbot.migratio... ERROR nixbot/tests/test_web.py::test_html_error_pages - nixbot.migrations.Mig... ERROR nixbot/tests/test_forge.py::test_project_store_sync_and_legacy_import ERROR nixbot/tests/test_cli.py::test_repo_list_and_toggle - nixbot.migrations... ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_distinct_per_effect ERROR nixbot/tests/test_schedules.py::test_replace_schedules_preserves_last_run_for_unchanged_spec ERROR nixbot/tests/test_cli_api.py::test_finished_attrs_cursor - nixbot.migra... ERROR nixbot/tests/test_visibility.py::test_unauthorized_user_sees_public_only ERROR nixbot/tests/test_control.py::test_admin_can_restart_and_cancel - nixbo... ERROR nixbot/tests/test_web.py::test_api_strips_ansi_from_errors - nixbot.mig... ERROR nixbot/tests/test_upload.py::test_parse_path_info_both_formats - nixbot... ERROR nixbot/tests/test_db.py::test_failed_migration_error_not_masked - nixbo... ERROR nixbot/tests/test_service.py::test_scheduled_worktree_id_sanitizes_traversal ERROR nixbot/tests/test_orchestrator.py::test_failure_aggregation - nixbot.mi... ERROR nixbot/tests/test_recovery.py::test_settle_already_built - nixbot.migra... ERROR nixbot/tests/test_work_queue.py::test_claim_serializes_per_key - nixbot... ERROR nixbot/tests/test_forge.py::test_legacy_import_runs_despite_pull_based_rows ERROR nixbot/tests/test_deliver.py::test_permission_denied_records_reason - n... ERROR nixbot/tests/test_schedules.py::test_replace_schedules_tolerates_duplicate_effect_names ERROR nixbot/tests/test_cli_api.py::test_control_requires_token - nixbot.migr... ERROR nixbot/tests/test_visibility.py::test_authorized_user_sees_private - ni... ERROR nixbot/tests/test_control.py::test_pr_author_can_control_own_pr - nixbo... ERROR nixbot/tests/test_cli.py::test_build_list_and_view - nixbot.migrations.... ERROR nixbot/tests/test_web.py::test_homepage - nixbot.migrations.MigrationEr... ERROR nixbot/tests/test_service.py::test_resolve_credential_path - nixbot.mig... ERROR nixbot/tests/test_upload.py::test_final_upload_reports_and_clears_queue ERROR nixbot/tests/test_db.py::test_edited_migration_rejected - nixbot.migrat... ERROR nixbot/tests/test_orchestrator.py::test_tree_hash_reuse - nixbot.migrat... ERROR nixbot/tests/test_recovery.py::test_retention_cleanup - nixbot.migratio... ERROR nixbot/tests/test_work_queue.py::test_settle_interrupted_requeues - nix... ERROR nixbot/tests/test_schedules.py::test_store_roundtrip_and_due - nixbot.m... ERROR nixbot/tests/test_forge.py::test_legacy_import_scopes_topics_per_forge ERROR nixbot/tests/test_deliver.py::test_modified_files_gate - nixbot.migrati... ERROR nixbot/tests/test_cli_api.py::test_enable_disable - nixbot.migrations.M... ERROR nixbot/tests/test_visibility.py::test_admin_sees_everything - nixbot.mi... ERROR nixbot/tests/test_cli.py::test_build_restart_cancel - nixbot.migrations... ERROR nixbot/tests/test_web.py::test_project_page_with_filters - nixbot.migra... ERROR nixbot/tests/test_service.py::test_build_service_accepts_asyncpg_dsn - ... ERROR nixbot/tests/e2e/test_browse.py::test_homepage_lists_project_and_recent_builds ERROR nixbot/tests/test_upload.py::test_intermediates_batch_with_final_and_drop_invalid ERROR nixbot/tests/test_db.py::test_catchup_migration_repairs_pre_0033_schema ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_from_cancelled_build ERROR nixbot/tests/test_cli_api.py::test_log_toc_and_text - nixbot.migrations... ERROR nixbot/tests/test_forge.py::test_prune_missing_disabled_projects - nixb... ERROR nixbot/tests/test_recovery.py::test_resume_includes_interrupted_building_attributes ERROR nixbot/tests/test_schedules.py::test_due_effects_window_and_bad_spec - ... ERROR nixbot/tests/test_visibility.py::test_admin_sees_disabled_repos_without_search ERROR nixbot/tests/test_control.py::test_repo_writer_can_control_without_admin_or_authorship ERROR nixbot/tests/test_cli.py::test_log_summary_attr_and_drv - nixbot.migrat... ERROR nixbot/tests/test_web.py::test_status_badge_urls - nixbot.migrations.Mi... ERROR nixbot/tests/e2e/test_browse.py::test_navigate_sidebar_to_failed_build ERROR nixbot/tests/test_service.py::test_visibility_fetcher_and_cache_ttl_wired ERROR nixbot/tests/test_upload.py::test_stdin_mode - nixbot.migrations.Migrat... ERROR nixbot/tests/test_db.py::test_huge_attr_name_does_not_break_notify_trigger ERROR nixbot/tests/test_deliver.py::test_forge_outage_is_retried - nixbot.mig... ERROR nixbot/tests/test_orchestrator.py::test_eval_reuse_skipped_when_drvs_gone ERROR nixbot/tests/test_visibility.py::test_non_admin_does_not_see_disabled_repos ERROR nixbot/tests/test_control.py::test_cancel_all_requires_admin - nixbot.m... ERROR nixbot/tests/test_recovery.py::test_retention_skips_restarted_builds - ... ERROR nixbot/tests/test_schedules.py::test_run_recording_and_overview - nixbo... ERROR nixbot/tests/test_cli.py::test_repo_and_build_inference - nixbot.migrat... ERROR nixbot/tests/test_web.py::test_all_digit_branch_is_filterable - nixbot.... ERROR nixbot/tests/e2e/test_browse.py::test_build_prev_next_navigation - nixb... ERROR nixbot/tests/test_service.py::test_aclose_cancels_in_flight_tasks - nix... ERROR nixbot/tests/test_visibility.py::test_api_token_sees_private - nixbot.m... ERROR nixbot/tests/test_deliver.py::test_forge_outage_gives_up - nixbot.migra... ERROR nixbot/tests/test_forge.py::test_project_store_sync_skips_unchanged_rows ERROR nixbot/tests/test_upload.py::test_pending_paths_survive_restart - nixbo... ERROR nixbot/tests/test_orchestrator.py::test_main_push_promotes_reused_pr_build ERROR nixbot/tests/test_control.py::test_cancel_all_cancels_pending_and_running_builds ERROR nixbot/tests/test_web.py::test_build_page - nixbot.migrations.Migration... ERROR nixbot/tests/test_db.py::test_schema_constraints - nixbot.migrations.Mi... ERROR nixbot/tests/test_cli.py::test_auth_status - nixbot.migrations.Migratio... ERROR nixbot/tests/e2e/test_browse.py::test_structured_log_viewer - nixbot.mi... ERROR nixbot/tests/test_visibility.py::test_admin_api_token_sees_private - ni... ERROR nixbot/tests/test_upload.py::test_uploader_factory_picks_stream - nixbo... ERROR nixbot/tests/test_control.py::test_cancel_all_button_admin_only - nixbo... ERROR nixbot/tests/test_web.py::test_attribute_rows_fragment_paginates - nixb... ERROR nixbot/tests/test_recovery.py::test_retention_ages_out_failed_caches - ... ERROR nixbot/tests/test_deliver.py::test_lock_shared_with_push_effect_and_supersession ERROR nixbot/tests/test_service.py::test_pr_close_discards_queued_changes - n... ERROR nixbot/tests/test_db.py::test_check_run_store_round_trip - nixbot.migra... ERROR nixbot/tests/test_orchestrator.py::test_merge_conflict_fails_build - ni... ERROR nixbot/tests/test_forge.py::test_gitea_hook_registration - nixbot.migra... ERROR nixbot/tests/e2e/test_browse.py::test_project_filter_form - nixbot.migr... ERROR nixbot/tests/test_visibility.py::test_forge_repo_admins_can_toggle_their_repos ERROR nixbot/tests/test_control.py::test_csrf_cross_origin_rejected - nixbot.... ERROR nixbot/tests/test_web.py::test_build_page_shows_eval_warning_groups - n... ERROR nixbot/tests/test_upload.py::test_stream_reports_per_path_and_clears_queue ERROR nixbot/tests/test_service.py::test_build_branches_gates_branch_pushes ERROR nixbot/tests/test_deliver.py::test_checkout_is_pr_head_without_token - ... ERROR nixbot/tests/test_forge.py::test_gitlab_heads_carry_target_branch_base ERROR nixbot/tests/test_orchestrator.py::test_build_reuse_clears_pr_author_in_other_context ERROR nixbot/tests/e2e/test_browse.py::test_attribute_log_prev_next_navigation ERROR nixbot/tests/test_recovery.py::test_failed_rebuild_settles_pending_effects ERROR nixbot/tests/test_db.py::test_failed_status_store_component - nixbot.mi... ERROR nixbot/tests/test_cli.py::test_log_follow_finished_attr_falls_back_to_stored_log ERROR nixbot/tests/test_visibility.py::test_forge_repo_writers_can_control_their_repos ERROR nixbot/tests/test_control.py::test_restart_single_attribute - nixbot.mi... ERROR nixbot/tests/test_web.py::test_build_page_shows_per_attribute_eval_warnings ERROR nixbot/tests/e2e/test_browse.py::test_project_filter - nixbot.migration... ERROR nixbot/tests/test_forge.py::test_gitea_heads_encode_slashed_default_branch ERROR nixbot/tests/test_service.py::test_restart_gitlab_mr_build_fetches_mr_refs ERROR nixbot/tests/test_deliver.py::test_build_success_enqueues_delivery - ni... ERROR nixbot/tests/test_orchestrator.py::test_effects_started_flag - nixbot.m... ERROR nixbot/tests/test_db.py::test_failed_build_cache_component - nixbot.mig... ERROR nixbot/tests/test_recovery.py::test_rerun_clears_stale_eval_warnings - ... ERROR nixbot/tests/test_visibility.py::test_fetch_errors_are_not_cached - nix... ERROR nixbot/tests/test_control.py::test_restart_unknown_attribute_is_404 - n... ERROR nixbot/tests/test_web.py::test_build_page_renders_ansi_in_error - nixbo... ERROR nixbot/tests/test_upload.py::test_stream_error_is_reported_with_message ERROR nixbot/tests/e2e/test_browse.py::test_activity_shows_running_build - ni... ERROR nixbot/tests/test_deliver.py::test_comment_and_close_webhooks_deliver ERROR nixbot/tests/test_forge.py::test_reconcile_unbuilt_heads - nixbot.migra... ERROR nixbot/tests/test_orchestrator.py::test_aggregation_generation_monotonic ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_fail_on_recovery ERROR nixbot/tests/test_visibility.py::test_access_cache_used - nixbot.migrat... ERROR nixbot/tests/test_db.py::test_get_or_create_build_concurrent_no_duplicates ERROR nixbot/tests/test_control.py::test_restart_attribute_with_special_chars_redirects_encoded ERROR nixbot/tests/test_web.py::test_running_build_shows_progress - nixbot.mi... ERROR nixbot/tests/test_upload.py::test_stream_child_crash_refeeds_pending - ... ERROR nixbot/tests/e2e/test_browse.py::test_activity_infinite_scroll - nixbot... ERROR nixbot/tests/test_service.py::test_restart_eval_failed_build_reevaluates ERROR nixbot/tests/test_visibility.py::test_metrics_unauthenticated_no_private_names ERROR nixbot/tests/test_forge.py::test_gitea_watermark_stops_pagination - nix... ERROR nixbot/tests/test_control.py::test_admin_project_toggle - nixbot.migrat... ERROR nixbot/tests/test_deliver.py::test_close_after_merge_push_reused_build ERROR nixbot/tests/test_orchestrator.py::test_internal_error_not_recorded_in_failed_build_cache ERROR nixbot/tests/test_recovery.py::test_interrupted_effects_sweep_spares_live_effects ERROR nixbot/tests/test_web.py::test_build_page_live_markers - nixbot.migrati... ERROR nixbot/tests/test_db.py::test_commit_eval_result_atomic - nixbot.migrat... ERROR nixbot/tests/e2e/test_browse.py::test_no_horizontal_overflow_on_mobile ERROR nixbot/tests/test_upload.py::test_failure_reports_retries_and_gives_up ERROR nixbot/tests/test_service.py::test_restart_clears_stale_error_and_warnings ERROR nixbot/tests/test_visibility.py::test_configured_viewers_see_private - ... ERROR nixbot/tests/test_control.py::test_toggle_activates_newly_enabled_project ERROR nixbot/tests/test_web.py::test_attribute_history - nixbot.migrations.Mi... ERROR nixbot/tests/test_deliver.py::test_build_finished_transitions - nixbot.... ERROR nixbot/tests/test_forge.py::test_gitlab_heads_filter_updated_after - ni... ERROR nixbot/tests/test_orchestrator.py::test_log_path_attribute_name_sanitized ERROR nixbot/tests/e2e/test_browse.py::test_attribute_search_filters_groups ERROR nixbot/tests/test_db.py::test_cancelled_build_not_reused - nixbot.migra... ERROR nixbot/tests/test_control.py::test_run_schedule - nixbot.migrations.Mig... ERROR nixbot/tests/test_visibility.py::test_api_token_inherits_login_groups ERROR nixbot/tests/test_service.py::test_restart_unknown_attribute_is_a_noop ERROR nixbot/tests/test_web.py::test_overview_ignores_pr_branches - nixbot.mi... ERROR nixbot/tests/test_deliver.py::test_command_while_running_gets_notice - ... ERROR nixbot/tests/test_forge.py::test_reconcile_watermark_store - nixbot.mig... ERROR nixbot/tests/test_orchestrator.py::test_cancel_interrupts_evaluation - ... ERROR nixbot/tests/test_db.py::test_reuse_backfills_pr_fields - nixbot.migrat... ERROR nixbot/tests/test_control.py::test_repo_refresh - nixbot.migrations.Mig... ERROR nixbot/tests/test_visibility.py::test_logout_invalidates_access_cache ERROR nixbot/tests/test_web.py::test_pending_build_shows_eval_blocker - nixbo... ERROR nixbot/tests/test_service.py::test_restart_failed_eval_attribute_reevaluates ERROR nixbot/tests/e2e/test_browse.py::test_groups_keep_identity_when_one_appears ERROR nixbot/tests/test_deliver.py::test_other_command_does_not_supersede - n... ERROR nixbot/tests/test_orchestrator.py::test_build_waiting_for_eval_slot_stays_pending ERROR nixbot/tests/test_forge.py::test_register_repo_hook_without_admin_warns ERROR nixbot/tests/test_db.py::test_reuse_by_other_pr_clears_both_identity_fields ERROR nixbot/tests/test_control.py::test_api_enable_disable - nixbot.migratio... ERROR nixbot/tests/test_web.py::test_project_filter_escapes_like_wildcards - ... ERROR nixbot/tests/test_service.py::test_interrupted_reeval_keeps_attribute_rows ERROR nixbot/tests/test_deliver.py::test_label_change_redelivers_pull_request ERROR nixbot/tests/test_orchestrator.py::test_pending_attribute_rows_recorded_for_crash_recovery ERROR nixbot/tests/test_forge.py::test_gitlab_hook_registration - nixbot.migr... ERROR nixbot/tests/test_control.py::test_api_restart_and_cancel - nixbot.migr... ERROR nixbot/tests/test_db.py::test_branch_push_takes_over_reused_pr_build - ... ERROR nixbot/tests/test_web.py::test_page_out_of_range_does_not_error - nixbo... ERROR nixbot/tests/test_service.py::test_restart_cancelled_build_reschedules_attributes ERROR nixbot/tests/test_deliver.py::test_build_outcome_and_restart_leave_event_history ERROR nixbot/tests/e2e/test_live.py::test_attribute_table_refreshes_while_building ERROR nixbot/tests/test_control.py::test_api_token_lifecycle - nixbot.migrati... ERROR nixbot/tests/test_orchestrator.py::test_eval_warnings_null_when_empty ERROR nixbot/tests/test_web.py::test_activity_page - nixbot.migrations.Migrat... ERROR nixbot/tests/test_forge.py::test_register_repo_hook_500_with_403_in_body_raises ERROR nixbot/tests/test_db.py::test_pr_does_not_capture_branch_push_build - n... ERROR nixbot/tests/test_service.py::test_restart_cancelled_mid_eval_reevaluates ERROR nixbot/tests/e2e/test_live.py::test_log_page_streams_live_output - nixb... ERROR nixbot/tests/test_control.py::test_expired_api_tokens_pruned - nixbot.m... ERROR nixbot/tests/test_web.py::test_activity_no_sentinel_on_exact_page - nix... ERROR nixbot/tests/test_deliver.py::test_restart_event_effect_reruns_with_stored_payload ERROR nixbot/tests/test_orchestrator.py::test_rerun_flips_stale_red_eval_status ERROR nixbot/tests/test_forge.py::test_gitlab_register_repo_hook_status_classification ERROR nixbot/tests/test_db.py::test_complete_attribute_preserves_eval_outputs ERROR nixbot/tests/test_service.py::test_restart_while_unwinding_waits_then_runs ERROR nixbot/tests/test_control.py::test_token_creation_with_expiry - nixbot.... ERROR nixbot/tests/e2e/test_live.py::test_log_page_keeps_up_with_a_line_burst ERROR nixbot/tests/test_web.py::test_activity_rows_fragment_pagination - nixb... ERROR nixbot/tests/test_deliver.py::test_listing_failure_recorded_on_build - ... ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_failures_not_cached ERROR nixbot/tests/test_forge.py::test_gitea_legacy_hook_delete_failure_warns ERROR nixbot/tests/test_db.py::test_complete_attribute_marks_substituted_as_cached ERROR nixbot/tests/test_control.py::test_proxy_user_can_manage_api_tokens - n... ERROR nixbot/tests/e2e/test_live.py::test_repeated_activity_keeps_one_card - ... ERROR nixbot/tests/test_service.py::test_restart_attribute_while_build_running ERROR nixbot/tests/test_web.py::test_project_rows_fragment_filters - nixbot.m... ERROR nixbot/tests/test_orchestrator.py::test_gitlab_mr_fetches_merge_request_refs ERROR nixbot/tests/test_forge.py::test_sync_tolerates_in_batch_duplicates - n... ERROR nixbot/tests/test_control.py::test_bearer_token_cannot_manage_api_tokens ERROR nixbot/tests/test_web.py::test_metrics_are_gauges - nixbot.migrations.M... ERROR nixbot/tests/test_service.py::test_cancel_not_running_posts_forge_status ERROR nixbot/tests/test_db.py::test_complete_attribute_replaces_log_metadata ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[github] ERROR nixbot/tests/test_control.py::test_api_token_controls_build - nixbot.mi... ERROR nixbot/tests/test_web.py::test_metrics_are_cached - nixbot.migrations.M... ERROR nixbot/tests/test_service.py::test_check_rerequested_dispatch - nixbot.... ERROR nixbot/tests/test_db.py::test_record_attributes_persists_pending_rows_with_outputs ERROR nixbot/tests/test_control.py::test_build_service_composition - nixbot.m... ERROR nixbot/tests/test_service.py::test_cancel_not_running_settles_attribute_rows ERROR nixbot/tests/test_web.py::test_static_urls_carry_content_version - nixb... ERROR nixbot/tests/test_orchestrator.py::test_rerun_fetches_forge_change_request_refs[gitlab] ERROR nixbot/tests/test_db.py::test_mark_attribute_building_does_not_resurrect_cancelled_rows ERROR nixbot/tests/test_control.py::test_restart_removes_stale_logs - nixbot.... ERROR nixbot/tests/test_service.py::test_cancel_attribute_not_running_reaggregates_build ERROR nixbot/tests/test_web.py::test_legacy_project_urls_redirect - nixbot.mi... ERROR nixbot/tests/test_orchestrator.py::test_cancelled_build_reuse_rebuilds ERROR nixbot/tests/test_db.py::test_mark_attribute_building_sets_status_and_started_at ERROR nixbot/tests/test_control.py::test_restart_clears_failed_cache - nixbot... ERROR nixbot/tests/test_web.py::test_private_repo_public_badge_bypasses_session_visibility ERROR nixbot/tests/test_service.py::test_pull_based_projects_synced_and_buildable ERROR nixbot/tests/test_orchestrator.py::test_inflight_share_fans_out_final_status ERROR nixbot/tests/test_db.py::test_complete_attribute_if_unfinished_skips_terminal_rows ERROR nixbot/tests/test_control.py::test_webhook_setup_shown_to_admin_only - ... ERROR nixbot/tests/test_web.py::test_legacy_redirect_hides_invisible_projects ERROR nixbot/tests/test_service.py::test_topic_does_not_hard_filter_discovery ERROR nixbot/tests/test_control.py::test_webhook_secret_regeneration - nixbot... ERROR nixbot/tests/test_orchestrator.py::test_stale_event_does_not_supersede_newer_build ERROR nixbot/tests/test_db.py::test_failed_build_cache_scoped_per_project - n... ERROR nixbot/tests/test_web.py::test_legacy_redirect_404s_on_ambiguous_owner_name ERROR nixbot/tests/test_service.py::test_startup_reevaluates_interrupted_eval ERROR nixbot/tests/test_control.py::test_retry_after_parsing - nixbot.migrati... ERROR nixbot/tests/test_orchestrator.py::test_eval_failure_cleans_cancel_events ERROR nixbot/tests/test_db.py::test_eval_stats_lifecycle - nixbot.migrations.... ERROR nixbot/tests/test_web.py::test_health_and_static - nixbot.migrations.Mi... ERROR nixbot/tests/test_service.py::test_rerun_of_interrupted_eval_reevaluates ERROR nixbot/tests/test_web.py::test_404s - nixbot.migrations.MigrationError:... ERROR nixbot/tests/test_orchestrator.py::test_eval_settings_wired - nixbot.mi... ERROR nixbot/tests/test_control.py::test_work_retry_delay_honors_retry_after ERROR nixbot/tests/test_service.py::test_rerun_resumes_building_rows_and_keeps_finished ERROR nixbot/tests/test_orchestrator.py::test_eval_netrc_withheld_from_pr_with_instance_wide_creds ERROR nixbot/tests/test_web.py::test_log_viewer_and_raw - nixbot.migrations.M... ERROR nixbot/tests/test_control.py::test_report_retry - nixbot.migrations.Mig... ERROR nixbot/tests/test_service.py::test_rerun_reevaluates_when_drv_paths_were_garbage_collected ERROR nixbot/tests/test_web.py::test_structured_log_endpoints - nixbot.migrat... ERROR nixbot/tests/test_orchestrator.py::test_eval_gcroots_dir_removed_after_build ERROR nixbot/tests/test_control.py::test_effect_item_setup_failure_settles_row ERROR nixbot/tests/test_service.py::test_reeval_failure_marks_build_failed - ... ERROR nixbot/tests/test_web.py::test_structured_log_window_caps_huge_derivation ERROR nixbot/tests/test_orchestrator.py::test_effects_run_after_default_branch_success ERROR nixbot/tests/test_control.py::test_restart_attribute_posts_pending - ni... ERROR nixbot/tests/test_service.py::test_gitlab_discovery_and_hook_registration ERROR nixbot/tests/test_web.py::test_attr_named_dot_txt_not_shadowed_by_raw_route ERROR nixbot/tests/test_orchestrator.py::test_pr_worktree_config_cannot_grant_effects ERROR nixbot/tests/test_control.py::test_recovery_reports_interrupted_effects ERROR nixbot/tests/test_web.py::test_attr_names_with_special_characters - nix... ERROR nixbot/tests/test_service.py::test_health_serves_while_startup_blocks ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_runs_effects_again ERROR nixbot/tests/test_web.py::test_log_viewer_waits_for_queued_attribute - ... ERROR nixbot/tests/test_control.py::test_work_dispatch - nixbot.migrations.Mi... ERROR nixbot/tests/test_orchestrator.py::test_rerun_effects_cancels_hung_effect ERROR nixbot/tests/test_web.py::test_log_viewer_unavailable_for_logless_status ERROR nixbot/tests/test_control.py::test_restart_resets_effects - nixbot.migr... ERROR nixbot/tests/test_web.py::test_eval_error_served_like_build_log - nixbo... ERROR nixbot/tests/test_orchestrator.py::test_rerun_single_effect - nixbot.mi... ERROR nixbot/tests/test_control.py::test_effects_restart_route - nixbot.migra... ERROR nixbot/tests/test_web.py::test_api_projects_and_builds - nixbot.migrati... ERROR nixbot/tests/test_control.py::test_single_effect_restart_route - nixbot... ERROR nixbot/tests/test_orchestrator.py::test_recovery_rerun_runs_effects - n... ERROR nixbot/tests/test_web.py::test_build_rows_link_refs - nixbot.migrations... ERROR nixbot/tests/test_control.py::test_webhook_panel_is_forge_aware - nixbo... ERROR nixbot/tests/test_orchestrator.py::test_unsupported_system_attr_does_not_block_aggregation ERROR nixbot/tests/test_web.py::test_attributes_sort_building_before_pending ERROR nixbot/tests/test_control.py::test_api_attr_and_effects_control - nixbo... ERROR nixbot/tests/test_orchestrator.py::test_linked_context_reported_on_eval_failure ERROR nixbot/tests/test_web.py::test_queue_sorts_active_before_pending - nixb... ERROR nixbot/tests/test_orchestrator.py::test_eval_failure_settles_streamed_attributes ERROR nixbot/tests/test_web.py::test_queue_position_is_global_and_skips_running ERROR nixbot/tests/test_web.py::test_openapi_docs - nixbot.migrations.Migrati... ERROR nixbot/tests/test_orchestrator.py::test_effect_rows_roundtrip - nixbot.... ERROR nixbot/tests/test_web.py::test_structured_live_stream - nixbot.migratio... ERROR nixbot/tests/test_orchestrator.py::test_effect_items_resume_only_pending ERROR nixbot/tests/test_web.py::test_drv_raw_serves_running_attribute - nixbo... ERROR nixbot/tests/test_orchestrator.py::test_effect_crash_settles_the_row - ... ERROR nixbot/tests/test_web.py::test_log_sse_stream_caps_history_backlog - ni... ERROR nixbot/tests/test_orchestrator.py::test_concurrent_effects_use_independent_worktrees ERROR nixbot/tests/test_web.py::test_log_sse_stream_neutralizes_carriage_returns ERROR nixbot/tests/test_orchestrator.py::test_locked_effect_gets_shared_dedup_key ERROR nixbot/tests/test_web.py::test_api_builds_commit_filter - nixbot.migrat... ERROR nixbot/tests/test_web.py::test_log_tail_param - nixbot.migrations.Migra... ERROR nixbot/tests/test_orchestrator.py::test_effect_item_not_claimable_until_dep_settles ERROR nixbot/tests/test_web.py::test_api_build_failures - nixbot.migrations.M... ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_failure_skips_dependent ERROR nixbot/tests/test_web.py::test_api_build_failures_rejects_non_positive_tail ERROR nixbot/tests/test_orchestrator.py::test_lock_serializes_builds_without_interleaving ERROR nixbot/tests/test_web.py::test_llms_txt - nixbot.migrations.MigrationEr... ERROR nixbot/tests/test_orchestrator.py::test_effect_dep_cycle_fails_discovery ERROR nixbot/tests/test_web.py::test_event_broker_pushes_status_changes - nix... ERROR nixbot/tests/test_web.py::test_events_stream_coalesces_burst - nixbot.m... ERROR nixbot/tests/test_orchestrator.py::test_failed_effect_reports_failure_status ERROR nixbot/tests/test_web.py::test_events_stream_refreshes_visibility - nix... ERROR nixbot/tests/test_orchestrator.py::test_post_process_error_does_not_wedge_build ERROR nixbot/tests/test_web.py::test_attribute_search - nixbot.migrations.Mig... ERROR nixbot/tests/test_orchestrator.py::test_unexpected_eval_path_error_settles_build ERROR nixbot/tests/test_web.py::test_build_page_shows_effects - nixbot.migrat... ERROR nixbot/tests/test_orchestrator.py::test_reuse_empty_succeeded_build_posts_eval_success ERROR nixbot/tests/test_web.py::test_build_page_shows_event_effects - nixbot.... ERROR nixbot/tests/test_orchestrator.py::test_stale_event_reusing_old_build_does_not_cancel_newer ERROR nixbot/tests/test_web.py::test_effect_log_raw_text - nixbot.migrations.... ERROR nixbot/tests/test_orchestrator.py::test_reuse_for_default_branch_push_runs_effects ERROR nixbot/tests/test_web.py::test_effect_log_viewer_status_icon - nixbot.m... ERROR nixbot/tests/test_web.py::test_effect_changes_notify_build_events - nix... ERROR nixbot/tests/test_orchestrator.py::test_reuse_replays_effect_statuses_to_new_commit ERROR nixbot/tests/test_web.py::test_effects_state_api - nixbot.migrations.Mi... ERROR nixbot/tests/test_orchestrator.py::test_attach_to_already_terminal_build_replays_status ERROR nixbot/tests/test_web.py::test_pr_comment_api - nixbot.migrations.Migra... ERROR nixbot/tests/test_orchestrator.py::test_cancel_during_eval_resolves_linked_eval_contexts ERROR nixbot/tests/test_web.py::test_workload_identity_api - nixbot.migration... ERROR nixbot/tests/test_orchestrator.py::test_effect_log_does_not_collide_with_attribute_log ERROR nixbot/tests/test_web.py::test_logout_revokes_session_cookie - nixbot.m... ERROR nixbot/tests/test_orchestrator.py::test_post_process_paths_are_forge_scoped ERROR nixbot/tests/test_web.py::test_gitlab_nested_group_routes - nixbot.migr... ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_renders_ansi - nixb... ERROR nixbot/tests/test_orchestrator.py::test_effects_phase_error_keeps_succeeded_build ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_cross_project_404 ERROR nixbot/tests/test_orchestrator.py::test_reuse_post_process_error_still_reports_status ERROR nixbot/tests/test_web.py::test_scheduled_run_log_unavailable_placeholder ERROR nixbot/tests/test_orchestrator.py::test_reuse_with_missing_output_still_post_processes ERROR nixbot/tests/test_web.py::test_scheduled_run_viewer_waiting_before_log ERROR nixbot/tests/test_web.py::test_scheduled_run_history_lists_runs - nixbo... ERROR nixbot/tests/test_web.py::test_scheduled_run_history_special_chars - ni... ERROR nixbot/tests/test_web.py::test_scheduled_run_stream_replays_history - n... ERROR nixbot/tests/test_web.py::test_scheduled_run_notify_build_events - nixb... ERROR nixbot/tests/test_web.py::test_api_log_toc_and_text - nixbot.migrations... ERROR nixbot/tests/test_web.py::test_api_log_toc_flat_log_fallback - nixbot.m... ERROR nixbot/tests/test_web.py::test_api_log_stream_json - nixbot.migrations.... ERROR nixbot/tests/test_web.py::test_build_eval_stats_surface - nixbot.migrat... ============ 1 failed, 450 passed, 12 skipped, 344 errors in 13.99s ============