diff --git a/epiphany-core/src/packaged_release.rs b/epiphany-core/src/packaged_release.rs index 296e9f4b..5b2923c4 100644 --- a/epiphany-core/src/packaged_release.rs +++ b/epiphany-core/src/packaged_release.rs @@ -295,13 +295,7 @@ fn build_required_release_siblings(repo: &Path, target_dir: &Path, target: &str) .arg(target); command.arg("--locked"); for (role, _) in required_packaged_release_binaries() { - let binary = match role { - "supervisor" => "epiphany-daemon-supervisor", - "semantic-projector" => "epiphany-memory-semantic-projector", - "workspace-coverage-projector" => "epiphany-workspace-coverage-projector", - "semantic-query" => "epiphany-memory-semantic", - _ => bail!("unknown required release role {role}"), - }; + let binary = required_release_binary(role)?; command.arg("--bin").arg(binary); } let status = command @@ -313,6 +307,17 @@ fn build_required_release_siblings(repo: &Path, target_dir: &Path, target: &str) Ok(()) } +fn required_release_binary(role: &str) -> Result<&'static str> { + match role { + "supervisor" => Ok("epiphany-daemon-supervisor"), + "semantic-projector" => Ok("epiphany-memory-semantic-projector"), + "workspace-coverage-projector" => Ok("epiphany-workspace-coverage-projector"), + "semantic-query" => Ok("epiphany-memory-semantic"), + "verse-query" => Ok("epiphany-verse-query"), + _ => bail!("unknown required release role {role}"), + } +} + pub fn validate_epiphany_packaged_release(entry: &EpiphanyPackagedReleaseEntry) -> Result<()> { if entry.schema_version != EPIPHANY_PACKAGED_RELEASE_SCHEMA_VERSION { bail!("unsupported packaged release schema"); @@ -637,6 +642,13 @@ mod tests { use super::*; use tempfile::TempDir; + #[test] + fn every_required_release_role_has_a_build_target() { + for (role, _) in required_packaged_release_binaries() { + required_release_binary(role).expect("required release role must resolve"); + } + } + fn fixture() -> (TempDir, EpiphanyPackagedReleaseEntry) { let dir = TempDir::new().unwrap(); let root = dir.path().join("release");