use chrono::{DateTime, Utc};
use schemars::JsonSchema as DeriveJsonSchema;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::executor::SnapshotRef;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, DeriveJsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum StdStream {
Stdout,
Stderr,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, DeriveJsonSchema)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum BuildEvent {
BuildStart {
run_id: Uuid,
plan: PlanSummary,
started_at: DateTime<Utc>,
},
StepQueued {
step_id: Uuid,
key: String,
chain_idx: usize,
},
StepStart {
step_id: Uuid,
runner: String,
image: Option<String>,
},
StepLog {
step_id: Uuid,
stream: StdStream,
line: String,
ts: DateTime<Utc>,
},
StepCacheHit {
step_id: Uuid,
key: String,
tag: String,
},
StepEnd {
step_id: Uuid,
exit_code: i32,
duration_ms: u64,
snapshot: Option<SnapshotRef>,
},
ChainFailed {
chain_idx: usize,
failed_step_id: Uuid,
failed_step_key: String,
exit_code: i32,
message: String,
ts: DateTime<Utc>,
},
BuildEnd {
exit_code: i32,
duration_ms: u64,
},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, DeriveJsonSchema)]
pub struct PlanSummary {
pub step_count: usize,
pub chain_count: usize,
pub default_runner: String,
}