hm_plugin_protocol/
executor.rs1use std::collections::BTreeMap;
4
5use schemars::JsonSchema as DeriveJsonSchema;
6use serde::{Deserialize, Serialize};
7use uuid::Uuid;
8
9use crate::ir::CommandStep;
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, DeriveJsonSchema)]
14#[serde(transparent)]
15pub struct ArchiveId(pub Uuid);
16
17#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, DeriveJsonSchema)]
21#[serde(transparent)]
22pub struct SnapshotRef(pub String);
23
24#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, DeriveJsonSchema)]
25pub struct ArtifactRef {
26 pub key: String,
27 pub mime: String,
28 pub size_bytes: u64,
29}
30
31#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, DeriveJsonSchema)]
34#[serde(tag = "kind", rename_all = "snake_case")]
35pub enum CacheDecision {
36 Hit { tag: SnapshotRef },
38 MissBuildAs { tag: SnapshotRef },
41 MissNoCommit,
43}
44
45#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, DeriveJsonSchema)]
46#[serde(deny_unknown_fields)]
47pub struct ExecutorInput {
48 pub step: CommandStep,
49 pub workspace_archive_id: ArchiveId,
50 pub env: BTreeMap<String, String>,
51 pub workdir: String,
52 pub run_id: Uuid,
53 pub step_id: Uuid,
54 pub cache_lookup: CacheDecision,
56
57 #[serde(default)]
64 pub parent_snapshot: Option<SnapshotRef>,
65}
66
67#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, DeriveJsonSchema)]
68pub struct StepResult {
69 pub exit_code: i32,
70 pub committed_snapshot: Option<SnapshotRef>,
73 pub artifacts: Vec<ArtifactRef>,
74}