pub mod manifest_schema;
pub mod platform;
pub mod types;
pub mod validation;
#[cfg(test)]
mod tests;
pub use manifest_schema::{
Manifest, ManifestValidationError, PackageInfo, PackageLanguage, PythonRuntime, RustRuntime,
TaskDefinition, TriggerDefinition,
};
pub use platform::{detect_current_platform, SUPPORTED_TARGETS};
pub use types::{CargoToml, CompileOptions};
use anyhow::{bail, Result};
use std::path::PathBuf;
pub fn package_workflow(project_path: PathBuf, output_path: PathBuf) -> Result<()> {
validation::validate_rust_crate_structure(&project_path)?;
let cargo_toml = validation::validate_cargo_toml(&project_path)?;
validation::validate_cloacina_compatibility(&cargo_toml)?;
validation::validate_packaged_workflow_presence(&project_path)?;
let package_toml_path = project_path.join("package.toml");
if !package_toml_path.exists() {
bail!(
"package.toml not found in project directory: {:?}. \
Create a package.toml with [package] name, version, interface, interface_version, \
and extension = \"cloacina\" fields.",
project_path
);
}
fidius_core::package::pack_package(&project_path, Some(&output_path))
.map_err(|e| anyhow::anyhow!("Failed to pack package: {}", e))?;
Ok(())
}