agent_workspace_contract/environment/
catalog.rs1use super::*;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
4#[serde(rename_all = "snake_case")]
5pub enum SnapshotVisibility {
6 #[default]
7 Private,
8 Public,
9}
10
11#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
12#[serde(tag = "kind", rename_all = "snake_case")]
13pub enum SnapshotBuildSpec {
14 Dockerfile {
15 dockerfile: String,
16 },
17 Template {
18 pip_packages: String,
19 },
20 Git {
21 #[serde(rename = "gitUrl", alias = "git_url")]
22 git_url: String,
23 #[serde(default, rename = "gitRef", alias = "git_ref")]
24 git_ref: String,
25 },
26}
27
28pub const SNAPSHOT_DOCKERFILE_MAX_BYTES: usize = 1024 * 1024;
31pub const SNAPSHOT_TEMPLATE_PACKAGES_MAX_BYTES: usize = 64 * 1024;
32
33#[derive(Debug, Clone, Default, PartialEq, Eq)]
34pub struct EnvironmentCatalogConfig {
35 pub default_provider: Option<String>,
36 pub default_snapshot_id: Option<String>,
37 pub default_builds: BTreeMap<String, SnapshotBuildSpec>,
38}
39
40#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
41#[serde(deny_unknown_fields, rename_all = "camelCase")]
42pub struct CreateSnapshotResourceRequest {
43 #[serde(default, skip_serializing_if = "Option::is_none")]
44 pub provider: Option<String>,
45 #[serde(default)]
46 pub visibility: SnapshotVisibility,
47 #[serde(default)]
48 pub owners: Vec<OwnerRef>,
49 #[serde(default)]
50 pub builtin: bool,
51 #[serde(default, skip_serializing_if = "Option::is_none")]
52 pub build: Option<SnapshotBuildSpec>,
53}
54
55#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
56#[serde(deny_unknown_fields, rename_all = "camelCase")]
57pub struct BuildBuiltinSnapshotRequest {
58 pub provider: String,
59 #[serde(default)]
60 pub set_default: bool,
61 #[serde(default, skip_serializing_if = "Option::is_none")]
62 pub git_url: Option<String>,
63 #[serde(default, skip_serializing_if = "Option::is_none")]
64 pub git_ref: Option<String>,
65 #[serde(default, skip_serializing_if = "Option::is_none")]
66 pub dockerfile: Option<String>,
67}
68
69pub const ADMIN_BUILD_BUILTIN_SNAPSHOTS_PATH: &str = "/admin/api/workspace-snapshots:build-builtin";
70pub const ADMIN_SNAPSHOTS_PATH: &str = "/admin/api/workspace-snapshots";
71
72#[async_trait]
74pub trait EnvironmentBuildPort: Send + Sync + Debug {
75 async fn build_environment_image(
76 &self,
77 provider: &str,
78 spec: &SnapshotBuildSpec,
79 idempotency_key: &str,
80 ) -> Result<ProviderResourceRef>;
81}