onEvent method
Implementation
@override
void onEvent(PipeEvent event) {
Map<String, Object?>? json = switch (event) {
RunStarted started => {
"event": "run_started",
"schema": schema,
"command": started.info.command,
"workflow": started.info.workflow,
"version": started.info.version,
"started_at": started.startedAt.toIso8601String(),
"steps": [for (StepState step in started.allSteps) _stepId(step)],
},
StepStarted started => {"event": "step_started", ..._stepId(started.step)},
StepStatusChanged changed => {"event": "step_status", ..._stepId(changed.step), "text": changed.text},
StepWarned warned => {"event": "step_warning", ..._stepId(warned.step), "message": warned.message},
CommandStarted started => {"event": "command_started", ..._stepId(started.step), "command": started.commandLine},
CommandFinished finished => {
"event": "command_finished",
..._stepId(finished.step),
if (finished.exitCode != null) "exit_code": finished.exitCode,
if (finished.error != null) "error": finished.error,
},
StepFinished finished => {"event": "step_finished", ..._stepOutcome(finished.step)},
RunFinished finished => {
"event": "run_finished",
"status": finished.result.hasFailures ? "failed" : "succeeded",
"elapsed_ms": finished.result.elapsed.inMilliseconds,
"steps": finished.result.steps.length,
"failed": finished.result.failedSteps.length,
"skipped": finished.result.skippedSteps.length,
"warnings": finished.result.warningCount,
if (logFilePath != null) "log_file": logFilePath,
"results": [for (StepState step in finished.result.allSteps) _stepOutcome(step)],
},
// Only meant for the log file
StepLogged _ || CommandOutput _ => null,
};
if (json != null) {
_out.writeln(jsonEncode(json));
}
}