cargo-oci 0.1.0

Simple, fast container image builder for Rust applications
Documentation
use std::{path::PathBuf, process::Command};

use anyhow::Result;
use clap::Args;
use serde::{Deserialize, Serialize};

#[derive(Args, Debug, Serialize, Deserialize)]
pub struct PublishInput {
  #[clap(short, long)]
  package: Option<String>,

  #[clap(long)]
  manifest_path: Option<PathBuf>,

  #[clap(short, long, default_value_t = true)]
  release: bool,
}

pub async fn publish(args: PublishInput) -> Result<()> {
  let manifest_path = match &args.manifest_path {
    Some(path) => path,
    None => &PathBuf::from("Cargo.toml"),
  };
  let metadata = super::get_metadata(manifest_path)?;
  let package = super::get_package(&metadata, args.package.clone());
  let _build_dir = super::get_build_dir(&metadata, args.release);

  super::get_custom_metadata(&package)?;

  let mut cmd = Command::new("cargo");
  cmd.arg("build");
  if args.release {
    cmd.arg("--release");
  }
  if let Some(package) = args.package {
    cmd.arg(format!("--package {package}"));
  }
  if let Some(manifest_path) = args.manifest_path {
    cmd.arg(format!("--manifest-path {}", manifest_path.display()));
  }

  println!("Publishing package: {:#?}", cmd.get_args());

  Ok(())
}