diff --git a/catalog/tempo/lib.rs b/catalog/tempo/lib.rs index 1bc1d7b..7306a63 100644 --- a/catalog/tempo/lib.rs +++ b/catalog/tempo/lib.rs @@ -1,5 +1,8 @@ use serde::Deserialize; -use spec::{Arg, Babel, ComputeResource, Deployment, DeploymentExtension, Manifest, Pod, Spec, Volume}; +use spec::{ + Arg, Babel, ComputeResource, Deployment, DeploymentExtension, Manifest, Platform, Pod, Spec, + Volume, +}; #[derive(Default, Clone)] pub enum Chains { @@ -37,7 +40,7 @@ impl ComputeResource for Tempo { fn spec(&self, _chain: Chains) -> eyre::Result { let node = Spec::builder() - .image("ghcr.io/tempo-xyz/tempo") + .image("ghcr.io/tempoxyz/tempo") .tag("1.0.1") .volume(Volume { name: "data".to_string(), @@ -77,6 +80,7 @@ impl ComputeResource for Tempo { preferred: 9000, }, ) + .platform(Platform::LinuxAmd64) .with_babel(Babel::new( "ethereum", Arg::Ref { diff --git a/crates/runtime-docker-compose/src/compose.rs b/crates/runtime-docker-compose/src/compose.rs index 09f2d4d..d2664b8 100644 --- a/crates/runtime-docker-compose/src/compose.rs +++ b/crates/runtime-docker-compose/src/compose.rs @@ -49,6 +49,10 @@ pub(crate) struct DockerComposeService { #[serde(default)] #[serde(skip_serializing_if = "BTreeMap::is_empty")] pub depends_on: BTreeMap, + + #[serde(default)] + #[serde(skip_serializing_if = "Option::is_none")] + pub platform: Option, } #[derive(Default, Debug)] diff --git a/crates/runtime-docker-compose/src/runtime.rs b/crates/runtime-docker-compose/src/runtime.rs index de1a452..f2ac704 100644 --- a/crates/runtime-docker-compose/src/runtime.rs +++ b/crates/runtime-docker-compose/src/runtime.rs @@ -2,7 +2,7 @@ use bollard::Docker; use bollard::query_parameters::CreateImageOptions; use futures_util::future::join_all; use futures_util::stream::StreamExt; -use spec::{File, Manifest}; +use spec::{File, Manifest, Platform}; use std::collections::{BTreeMap, HashMap, HashSet}; use std::net::TcpListener; use std::process::{Command, Stdio}; @@ -360,6 +360,15 @@ impl DockerRuntime { labels.insert("metrics".to_string(), format!("{}", metrics_port.port)); } + let platform = if let Some(platform) = spec.platform { + let str = match platform { + Platform::LinuxAmd64 => "linux/amd64".to_string(), + }; + Some(str) + } else { + None + }; + let service = DockerComposeService { command, entrypoint: spec.entrypoint.clone(), @@ -370,6 +379,7 @@ impl DockerRuntime { volumes: service_volumes, networks: vec!["test".to_string()], depends_on: init_services, + platform, }; let service_name = format!("{}-{}", pod_name, spec_name); diff --git a/crates/spec/src/lib.rs b/crates/spec/src/lib.rs index ce36de6..0322897 100644 --- a/crates/spec/src/lib.rs +++ b/crates/spec/src/lib.rs @@ -222,6 +222,7 @@ pub struct Spec { pub artifacts: Vec, pub ports: Vec, pub volumes: Vec, + pub platform: Option, pub extensions: HashMap, } @@ -237,6 +238,7 @@ pub struct SpecBuilder { ports: Vec, volumes: Vec, extensions: HashMap, + platform: Option, } impl Spec { @@ -245,6 +247,11 @@ impl Spec { } } +#[derive(Debug, Copy, Clone, Deserialize, Serialize)] +pub enum Platform { + LinuxAmd64, +} + impl SpecBuilder { pub fn image>(mut self, image: S) -> Self { self.image = Some(image.into()); @@ -327,6 +334,11 @@ impl SpecBuilder { self } + pub fn platform(mut self, platform: Platform) -> Self { + self.platform = Some(platform); + self + } + pub fn get_extension( &self, name: String, @@ -360,6 +372,7 @@ impl SpecBuilder { ports: ports, volumes: self.volumes, extensions: self.extensions, + platform: self.platform, } } }