pub fn strip_registry_host(image_uri: &str) -> Option<String> {
if image_uri.starts_with('/') || image_uri.starts_with("./") {
return None;
}
let parts: Vec<&str> = image_uri.splitn(2, '/').collect();
if parts.len() == 2 && (parts[0].contains('.') || parts[0].contains(':')) {
Some(parts[1].to_string())
} else {
Some(image_uri.to_string())
}
}
pub fn strip_url_scheme(url: &str) -> &str {
let trimmed = url.trim_end_matches('/');
trimmed
.strip_prefix("https://")
.or_else(|| trimmed.strip_prefix("http://"))
.unwrap_or(trimmed)
}
pub fn resolve_native_image_uri(
proxy_image_uri: &str,
native_registry_host: &str,
) -> Option<String> {
let repo_and_ref = strip_registry_host(proxy_image_uri)?;
if repo_and_ref.is_empty() {
return None;
}
Some(format!(
"{}/{}",
native_registry_host.trim_end_matches('/'),
repo_and_ref
))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_strip_registry_host_gar() {
assert_eq!(
strip_registry_host("us-central1-docker.pkg.dev/project/repo:tag"),
Some("project/repo:tag".to_string())
);
}
#[test]
fn test_strip_registry_host_ecr() {
assert_eq!(
strip_registry_host("123456.dkr.ecr.us-east-1.amazonaws.com/repo:tag"),
Some("repo:tag".to_string())
);
}
#[test]
fn test_strip_registry_host_proxy() {
assert_eq!(
strip_registry_host("manager.alien.dev/my-app:v1"),
Some("my-app:v1".to_string())
);
}
#[test]
fn test_strip_registry_host_localhost() {
assert_eq!(
strip_registry_host("localhost:5000/my-app:v1"),
Some("my-app:v1".to_string())
);
}
#[test]
fn test_strip_registry_host_no_host() {
assert_eq!(
strip_registry_host("simple-image:latest"),
Some("simple-image:latest".to_string())
);
}
#[test]
fn test_strip_registry_host_local_path() {
assert_eq!(strip_registry_host("/local/path/to/image.tar"), None);
}
#[test]
fn test_strip_url_scheme() {
assert_eq!(strip_url_scheme("https://example.com"), "example.com");
assert_eq!(strip_url_scheme("http://localhost:8080"), "localhost:8080");
assert_eq!(strip_url_scheme("https://example.com/"), "example.com");
assert_eq!(strip_url_scheme("manager:8080"), "manager:8080");
}
#[test]
fn test_resolve_native_image_uri_ecr() {
assert_eq!(
resolve_native_image_uri(
"manager.alien.dev/alien-e2e:fn-abc123",
"123456.dkr.ecr.us-east-1.amazonaws.com"
),
Some("123456.dkr.ecr.us-east-1.amazonaws.com/alien-e2e:fn-abc123".to_string())
);
}
#[test]
fn test_resolve_native_image_uri_gar() {
assert_eq!(
resolve_native_image_uri(
"manager.alien.dev/project/repo/default:my-fn-abc123",
"us-central1-docker.pkg.dev"
),
Some("us-central1-docker.pkg.dev/project/repo/default:my-fn-abc123".to_string())
);
}
#[test]
fn test_resolve_native_image_uri_digest() {
assert_eq!(
resolve_native_image_uri(
"manager.alien.dev/alien-e2e@sha256:abcdef123456",
"123456.dkr.ecr.us-east-1.amazonaws.com"
),
Some(
"123456.dkr.ecr.us-east-1.amazonaws.com/alien-e2e@sha256:abcdef123456".to_string()
)
);
}
}