endReporting function
Drains uploads, flushes results and closes the run.
Implementation
Future<void> endReporting(ReporterState state) async {
final session = state._session;
final buffer = state._buffer;
if (state.softDisabled || session == null || buffer == null) return;
await flushResults(state);
// Blobs still registered here belong to results nobody reported.
clearPendingBlobs();
final left = buffer.pendingCount + session.unsentResults;
if (left > 0) {
logError('Tracera: $left result(s) not uploaded — leaving test run open');
} else if (session.peerHandoff && session.peerFinisher) {
// This process leaves last by construction, so waiting for the refcount
// would keep the run open forever — its siblings have no end-of-suite
// hook to release from.
discardPeerRun(session.config.projectId, session.config.runTitle);
await _finishSharedRun(session);
} else if (session.peerHandoff) {
// Peer sessions are not owned — finishOwnedRun would no-op.
await releasePeerRun(
session.config.projectId,
session.config.runTitle,
() => _finishSharedRun(session),
);
} else {
await session.finishOwnedRun();
}
printSummary(session);
if (session.config.requireReport && session.failedReport > 0) {
failRequired(
'Tracera: exiting — ${session.failedReport} result(s) could not be '
'reported (TRACERA_REQUIRE_REPORT)',
);
}
}