onEvent method

  1. @override
void onEvent(
  1. PipeEvent event
)
override

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));
  }
}