this derivation will be built: /nix/store/dw2pjjf5lydc065q3i45akfhw4l96rss-treefmt-check.drv building '/nix/store/dw2pjjf5lydc065q3i45akfhw4l96rss-treefmt-check.drv' on 'ssh-ng://customer@mac02' building '/nix/store/dw2pjjf5lydc065q3i45akfhw4l96rss-treefmt-check.drv' treefmt-check> treefmt v2.5.0traversed 333 files treefmt-check> emitted 267 files for processing treefmt-check> formatted 267 files (3 changed) in 910ms treefmt-check> M nixbot/nixbot/tests/test_db.py treefmt-check> M nixbot/nixbot/tests/test_service.py treefmt-check> M nixbot/nixbot/tests/test_status.py treefmt-check> diff --git a/nixbot/nixbot/tests/test_db.py b/nixbot/nixbot/tests/test_db.py treefmt-check> index 159209b..d1f2bcd 100644 treefmt-check> --- a/nixbot/nixbot/tests/test_db.py treefmt-check> +++ b/nixbot/nixbot/tests/test_db.py treefmt-check> @@ -266,10 +266,13 @@ async def test_terminal_report_ack_rejects_late_target_snapshot( treefmt-check> await builds_q.mark_build_report_delivered( treefmt-check> pool, build_id=build_id, generation=0, commit_shas=["pr-sha"] treefmt-check> ) treefmt-check> - assert await pool.fetchval( treefmt-check> - "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> - build_id, treefmt-check> - ) == 0 treefmt-check> + assert ( treefmt-check> + await pool.fetchval( treefmt-check> + "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> + build_id, treefmt-check> + ) treefmt-check> + == 0 treefmt-check> + ) treefmt-check> treefmt-check> # Attaching main invalidates the ack. An older in-flight API snapshot may treefmt-check> # finish afterward, but cannot acknowledge a target it never posted. treefmt-check> @@ -283,10 +286,13 @@ async def test_terminal_report_ack_rejects_late_target_snapshot( treefmt-check> await builds_q.mark_build_report_delivered( treefmt-check> pool, build_id=build_id, generation=0, commit_shas=["pr-sha"] treefmt-check> ) treefmt-check> - assert await pool.fetchval( treefmt-check> - "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> - build_id, treefmt-check> - ) is None treefmt-check> + assert ( treefmt-check> + await pool.fetchval( treefmt-check> + "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> + build_id, treefmt-check> + ) treefmt-check> + is None treefmt-check> + ) treefmt-check> assert build_id in await builds_q.unreconciled_terminal_builds(pool) treefmt-check> treefmt-check> await builds_q.mark_build_report_delivered( treefmt-check> diff --git a/nixbot/nixbot/tests/test_service.py b/nixbot/nixbot/tests/test_service.py treefmt-check> index 0ff4e51..c35c14e 100644 treefmt-check> --- a/nixbot/nixbot/tests/test_service.py treefmt-check> +++ b/nixbot/nixbot/tests/test_service.py treefmt-check> @@ -941,9 +941,7 @@ class TargetRecordingReporter(AttributeRecordingReporter): treefmt-check> async def build_finished(self, event: Any, build: Any, result: BuildResult) -> None: treefmt-check> self.final_results.append((event.commit_sha, result)) treefmt-check> treefmt-check> - async def eval_finished( treefmt-check> - self, event: Any, build: Any, report: EvalReport treefmt-check> - ) -> None: treefmt-check> + async def eval_finished(self, event: Any, build: Any, report: EvalReport) -> None: treefmt-check> self.eval_results.append((event.commit_sha, report.success)) treefmt-check> self.eval_reports.append((event.commit_sha, report)) treefmt-check> treefmt-check> @@ -980,9 +978,7 @@ async def test_restart_and_final_report_use_persisted_targets_after_restart( treefmt-check> async def no_resumable_builds(*args: Any, **kwargs: Any) -> list[Any]: treefmt-check> return [] treefmt-check> treefmt-check> - monkeypatch.setattr( treefmt-check> - restart_dispatch, "find_unfinished_builds", no_resumable_builds treefmt-check> - ) treefmt-check> + monkeypatch.setattr(restart_dispatch, "find_unfinished_builds", no_resumable_builds) treefmt-check> await restart_dispatch.rerun(service, build_id, restart=True) treefmt-check> treefmt-check> assert set(reporter.restarted) == { treefmt-check> @@ -1003,9 +999,7 @@ async def test_restart_and_final_report_use_persisted_targets_after_restart( treefmt-check> await build_reuse.report_eval_finished( treefmt-check> service.orchestrator, source_event, build, EvalReport(success=False) treefmt-check> ) treefmt-check> - await build_reuse.report_eval_cancelled( treefmt-check> - service.orchestrator, source_event, build treefmt-check> - ) treefmt-check> + await build_reuse.report_eval_cancelled(service.orchestrator, source_event, build) treefmt-check> assert set(reporter.eval_results) == { treefmt-check> ("pr-sha", True), treefmt-check> ("main-sha", True), treefmt-check> @@ -1051,9 +1045,7 @@ async def test_old_terminal_report_does_not_post_after_restart_reset( treefmt-check> ) treefmt-check> reporter = TargetRecordingReporter() treefmt-check> service.orchestrator.reporter = reporter treefmt-check> - await service.enqueue_work( treefmt-check> - "report", f"report-{build_id}", {"build_id": build_id} treefmt-check> - ) treefmt-check> + await service.enqueue_work("report", f"report-{build_id}", {"build_id": build_id}) treefmt-check> treefmt-check> await service.orchestrator.reset_build_for_restart(build_id, None) treefmt-check> await service.drain_work() treefmt-check> @@ -1109,10 +1101,13 @@ async def test_terminal_eval_api_failure_blocks_ack_until_retry( treefmt-check> service.orchestrator.request_build_report = service.request_build_report treefmt-check> treefmt-check> await service.orchestrator.request_build_report(build_id) treefmt-check> - assert await pool.fetchval( treefmt-check> - "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> - build_id, treefmt-check> - ) is None treefmt-check> + assert ( treefmt-check> + await pool.fetchval( treefmt-check> + "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> + build_id, treefmt-check> + ) treefmt-check> + is None treefmt-check> + ) treefmt-check> assert reporter.final_results == [] treefmt-check> treefmt-check> await service.drain_work() treefmt-check> @@ -1122,10 +1117,13 @@ async def test_terminal_eval_api_failure_blocks_ack_until_retry( treefmt-check> "pr-sha", treefmt-check> "main-sha", treefmt-check> } treefmt-check> - assert await pool.fetchval( treefmt-check> - "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> - build_id, treefmt-check> - ) == 0 treefmt-check> + assert ( treefmt-check> + await pool.fetchval( treefmt-check> + "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> + build_id, treefmt-check> + ) treefmt-check> + == 0 treefmt-check> + ) treefmt-check> treefmt-check> treefmt-check> async def test_terminal_report_treats_partial_eval_with_attribute_as_failed( treefmt-check> @@ -1260,7 +1258,13 @@ async def test_terminal_report_formats_production_warning_groups_through_forge( treefmt-check> ) -> None: treefmt-check> text = extra.get("text") treefmt-check> self.posts.append( treefmt-check> - (sha, context, state, description, text if isinstance(text, str) else None) treefmt-check> + ( treefmt-check> + sha, treefmt-check> + context, treefmt-check> + state, treefmt-check> + description, treefmt-check> + text if isinstance(text, str) else None, treefmt-check> + ) treefmt-check> ) treefmt-check> treefmt-check> pool = service.pool treefmt-check> @@ -1323,9 +1327,7 @@ async def test_terminal_report_formats_production_warning_groups_through_forge( treefmt-check> assert "download failed (\u00d73)" in eval_post[4] treefmt-check> assert "input is deprecated" in eval_post[4] treefmt-check> assert any( treefmt-check> - post[0] == sha treefmt-check> - and post[1] == "nixbot/nix-build" treefmt-check> - and post[2] == build_state treefmt-check> + post[0] == sha and post[1] == "nixbot/nix-build" and post[2] == build_state treefmt-check> for post in poster.posts treefmt-check> ) treefmt-check> treefmt-check> @@ -1375,12 +1377,8 @@ async def test_late_target_crash_recovers_terminal_eval_and_final( treefmt-check> async def no_unfinished_builds(*args: Any, **kwargs: Any) -> list[Any]: treefmt-check> return [] treefmt-check> treefmt-check> - monkeypatch.setattr( treefmt-check> - builds_q, "reportable_attribute_failures", no_early_failures treefmt-check> - ) treefmt-check> - monkeypatch.setattr( treefmt-check> - builds_q, "unreconciled_terminal_builds", only_this_terminal treefmt-check> - ) treefmt-check> + monkeypatch.setattr(builds_q, "reportable_attribute_failures", no_early_failures) treefmt-check> + monkeypatch.setattr(builds_q, "unreconciled_terminal_builds", only_this_terminal) treefmt-check> monkeypatch.setattr("nixbot.service.find_unfinished_builds", no_unfinished_builds) treefmt-check> reporter = TargetRecordingReporter() treefmt-check> service.orchestrator.reporter = reporter treefmt-check> @@ -1393,10 +1391,13 @@ async def test_late_target_crash_recovers_terminal_eval_and_final( treefmt-check> "pr-sha", treefmt-check> "main-sha", treefmt-check> } treefmt-check> - assert await pool.fetchval( treefmt-check> - "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> - build_id, treefmt-check> - ) == 0 treefmt-check> + assert ( treefmt-check> + await pool.fetchval( treefmt-check> + "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> + build_id, treefmt-check> + ) treefmt-check> + == 0 treefmt-check> + ) treefmt-check> treefmt-check> treefmt-check> async def test_late_terminal_target_gets_rich_failures_and_final_status( treefmt-check> @@ -1445,7 +1446,9 @@ async def test_late_terminal_target_gets_rich_failures_and_final_status( treefmt-check> assert len(main_results) == 1 treefmt-check> assert main_results[0].attr_prefix == "hydraJobs" treefmt-check> assert main_results[0].results[0].error == "error: persisted rich diagnostic" treefmt-check> - main_failures = [failure for failure in reporter.failures if failure[0] == "main-sha"] treefmt-check> + main_failures = [ treefmt-check> + failure for failure in reporter.failures if failure[0] == "main-sha" treefmt-check> + ] treefmt-check> assert len(main_failures) == 1 treefmt-check> assert main_failures[0][2] == "error: persisted rich diagnostic" treefmt-check> assert main_failures[0][5] == "hydraJobs" treefmt-check> @@ -1521,13 +1524,17 @@ async def test_live_reconciliation_repairs_queue_write_and_retry_update_failures treefmt-check> service.enqueue_work = failed_enqueue # type: ignore[method-assign] treefmt-check> await service.request_build_report(build_id) treefmt-check> service.enqueue_work = original_enqueue # type: ignore[method-assign] treefmt-check> - assert await pool.fetchval( treefmt-check> - "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> - build_id, treefmt-check> - ) is None treefmt-check> - assert await pool.fetchval( treefmt-check> - "SELECT count(*) FROM work_queue WHERE kind = 'report'" treefmt-check> - ) == 0 treefmt-check> + assert ( treefmt-check> + await pool.fetchval( treefmt-check> + "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> + build_id, treefmt-check> + ) treefmt-check> + is None treefmt-check> + ) treefmt-check> + assert ( treefmt-check> + await pool.fetchval("SELECT count(*) FROM work_queue WHERE kind = 'report'") treefmt-check> + == 0 treefmt-check> + ) treefmt-check> treefmt-check> queue = WorkQueue(pool) treefmt-check> await service._reconcile_terminal_reports(queue) # noqa: SLF001 treefmt-check> @@ -1543,15 +1550,15 @@ async def test_live_reconciliation_repairs_queue_write_and_retry_update_failures treefmt-check> with pytest.raises(RuntimeError, match="retry update failed"): treefmt-check> await service._execute_work(queue, item) # noqa: SLF001 treefmt-check> queue.retry = original_retry # type: ignore[method-assign] treefmt-check> - assert await pool.fetchval( treefmt-check> - "SELECT status FROM work_queue WHERE id = $1", item.id treefmt-check> - ) == "running" treefmt-check> + assert ( treefmt-check> + await pool.fetchval("SELECT status FROM work_queue WHERE id = $1", item.id) treefmt-check> + == "running" treefmt-check> + ) treefmt-check> treefmt-check> # The idle-loop lease sweep repairs the otherwise unleased running row treefmt-check> # without requiring a process restart. treefmt-check> await pool.execute( treefmt-check> - "UPDATE work_queue SET claimed_at = now() - interval '1 hour' " treefmt-check> - "WHERE id = $1", treefmt-check> + "UPDATE work_queue SET claimed_at = now() - interval '1 hour' WHERE id = $1", treefmt-check> item.id, treefmt-check> ) treefmt-check> reporter.available = True treefmt-check> @@ -1559,10 +1566,13 @@ async def test_live_reconciliation_repairs_queue_write_and_retry_update_failures treefmt-check> await service.drain_work() treefmt-check> treefmt-check> assert {commit for commit, _ in reporter.final_results} == {"terminal-sha"} treefmt-check> - assert await pool.fetchval( treefmt-check> - "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> - build_id, treefmt-check> - ) == 0 treefmt-check> + assert ( treefmt-check> + await pool.fetchval( treefmt-check> + "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> + build_id, treefmt-check> + ) treefmt-check> + == 0 treefmt-check> + ) treefmt-check> treefmt-check> treefmt-check> async def test_attribute_report_reloads_persisted_failure_retries_and_fans_out( treefmt-check> @@ -1696,9 +1706,7 @@ async def test_terminal_recovery_reconciles_failure_beyond_early_slice( treefmt-check> early = await builds_q.reportable_attribute_failures( treefmt-check> pool, report_limit=service.config.failed_build_report_limit treefmt-check> ) treefmt-check> - assert attrs[-1] not in { treefmt-check> - row.attr for row in early if row.build_id == build_id treefmt-check> - } treefmt-check> + assert attrs[-1] not in {row.attr for row in early if row.build_id == build_id} treefmt-check> treefmt-check> async def no_early_failures(*args: Any, **kwargs: Any) -> list[Any]: treefmt-check> return [] treefmt-check> @@ -1706,12 +1714,8 @@ async def test_terminal_recovery_reconciles_failure_beyond_early_slice( treefmt-check> async def only_terminal_build(*args: Any, **kwargs: Any) -> list[int]: treefmt-check> return [build_id] treefmt-check> treefmt-check> - monkeypatch.setattr( treefmt-check> - builds_q, "reportable_attribute_failures", no_early_failures treefmt-check> - ) treefmt-check> - monkeypatch.setattr( treefmt-check> - builds_q, "unreconciled_terminal_builds", only_terminal_build treefmt-check> - ) treefmt-check> + monkeypatch.setattr(builds_q, "reportable_attribute_failures", no_early_failures) treefmt-check> + monkeypatch.setattr(builds_q, "unreconciled_terminal_builds", only_terminal_build) treefmt-check> reporter = TargetRecordingReporter() treefmt-check> service.orchestrator.reporter = reporter treefmt-check> treefmt-check> @@ -1788,10 +1792,13 @@ async def test_direct_cancel_fans_out_and_acknowledges_durable_targets( treefmt-check> generation = await pool.fetchval( treefmt-check> "SELECT status_generation FROM builds WHERE id = $1", build_id treefmt-check> ) treefmt-check> - assert await pool.fetchval( treefmt-check> - "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> - build_id, treefmt-check> - ) == generation treefmt-check> + assert ( treefmt-check> + await pool.fetchval( treefmt-check> + "SELECT reported_generation FROM build_reporting WHERE build_id = $1", treefmt-check> + build_id, treefmt-check> + ) treefmt-check> + == generation treefmt-check> + ) treefmt-check> treefmt-check> treefmt-check> async def test_check_rerequested_dispatch(service: CIService) -> None: treefmt-check> diff --git a/nixbot/nixbot/tests/test_status.py b/nixbot/nixbot/tests/test_status.py treefmt-check> index 99c73e0..126edd8 100644 treefmt-check> --- a/nixbot/nixbot/tests/test_status.py treefmt-check> +++ b/nixbot/nixbot/tests/test_status.py treefmt-check> @@ -895,9 +895,7 @@ async def test_poster_network_errors_do_not_propagate() -> None: treefmt-check> await reporter.build_started(EVENT, BUILD) # must not raise treefmt-check> await reporter.eval_finished(EVENT, BUILD, EvalReport(success=False)) treefmt-check> with pytest.raises(httpx.ConnectError): treefmt-check> - await reporter.terminal_eval_finished( treefmt-check> - EVENT, BUILD, EvalReport(success=False) treefmt-check> - ) treefmt-check> + await reporter.terminal_eval_finished(EVENT, BUILD, EvalReport(success=False)) treefmt-check> with pytest.raises(httpx.ConnectError): treefmt-check> await reporter.build_finished(EVENT, BUILD, BuildResult("succeeded", 1, [])) treefmt-check> treefmt-check> @@ -954,9 +952,7 @@ async def test_check_permission_error_does_not_disable_forge() -> None: treefmt-check> ) treefmt-check> await reporter.build_started(EVENT, BUILD) treefmt-check> with pytest.raises(CheckPermissionError): treefmt-check> - await reporter.terminal_eval_finished( treefmt-check> - EVENT, BUILD, EvalReport(success=False) treefmt-check> - ) treefmt-check> + await reporter.terminal_eval_finished(EVENT, BUILD, EvalReport(success=False)) treefmt-check> with pytest.raises(CheckPermissionError): treefmt-check> await reporter.build_finished(EVENT, BUILD, BuildResult("succeeded", 1, [])) treefmt-check> # Every phase still attempts to post. The forge is never latched off. error: build of '/nix/store/dw2pjjf5lydc065q3i45akfhw4l96rss-treefmt-check.drv' on 'ssh-ng://customer@mac02' failed: Cannot build '/nix/store/dw2pjjf5lydc065q3i45akfhw4l96rss-treefmt-check.drv'. Reason: builder failed with exit code 1. Output paths: /nix/store/ah7gjrysjasv8a26xxzzrcblvvhcp2cd-treefmt-check Last 25 log lines: > index 99c73e0..126edd8 100644 > --- a/nixbot/nixbot/tests/test_status.py > +++ b/nixbot/nixbot/tests/test_status.py > @@ -895,9 +895,7 @@ async def test_poster_network_errors_do_not_propagate() -> None: > await reporter.build_started(EVENT, BUILD) # must not raise > await reporter.eval_finished(EVENT, BUILD, EvalReport(success=False)) > with pytest.raises(httpx.ConnectError): > - await reporter.terminal_eval_finished( > - EVENT, BUILD, EvalReport(success=False) > - ) > + await reporter.terminal_eval_finished(EVENT, BUILD, EvalReport(success=False)) > with pytest.raises(httpx.ConnectError): > await reporter.build_finished(EVENT, BUILD, BuildResult("succeeded", 1, [])) > > @@ -954,9 +952,7 @@ async def test_check_permission_error_does_not_disable_forge() -> None: > ) > await reporter.build_started(EVENT, BUILD) > with pytest.raises(CheckPermissionError): > - await reporter.terminal_eval_finished( > - EVENT, BUILD, EvalReport(success=False) > - ) > + await reporter.terminal_eval_finished(EVENT, BUILD, EvalReport(success=False)) > with pytest.raises(CheckPermissionError): > await reporter.build_finished(EVENT, BUILD, BuildResult("succeeded", 1, [])) > # Every phase still attempts to post. The forge is never latched off. For full logs, run: nix log /nix/store/dw2pjjf5lydc065q3i45akfhw4l96rss-treefmt-check.drv error: Cannot build '/nix/store/dw2pjjf5lydc065q3i45akfhw4l96rss-treefmt-check.drv'. Reason: builder failed with exit code 1. Output paths: /nix/store/ah7gjrysjasv8a26xxzzrcblvvhcp2cd-treefmt-check