use std::path::PathBuf;
use clap::Parser;
use npmgen_core::{
DEFAULT_DRIVER, DEFAULT_MANIFEST_PATH, DEFAULT_OUT, Generator, Overrides, Project, Result,
};
#[derive(Debug, Parser)]
#[command(name = "npmgen", version, about, long_about = None)]
pub struct Cli {
#[arg(long, env = "NPMGEN_MANIFEST_PATH", default_value = DEFAULT_MANIFEST_PATH)]
manifest_path: PathBuf,
#[arg(long, env = "NPMGEN_OUT", default_value = DEFAULT_OUT)]
out: PathBuf,
#[arg(
short = 'p',
long = "package",
env = "NPMGEN_PACKAGE",
value_delimiter = ','
)]
packages: Vec<String>,
#[arg(long, env = "NPMGEN_WORKSPACE")]
workspace: bool,
#[arg(long, env = "NPMGEN_EXCLUDE", value_delimiter = ',')]
exclude: Vec<String>,
#[arg(long = "bin", env = "NPMGEN_BIN", value_delimiter = ',')]
bins: Vec<String>,
#[arg(long = "pkg-version", env = "NPMGEN_PKG_VERSION")]
pkg_version: Option<String>,
#[arg(long, env = "NPMGEN_TAG")]
tag: Option<String>,
#[arg(long, env = "NPMGEN_NO_BUILD")]
no_build: bool,
#[arg(long, env = "NPMGEN_BUILDER", default_value = DEFAULT_DRIVER)]
builder: String,
#[arg(long = "target", env = "NPMGEN_TARGETS", value_delimiter = ',')]
targets: Vec<String>,
}
impl Cli {
pub fn run(self) -> Result<()> {
let overrides = Overrides {
packages: self.packages,
workspace: self.workspace,
exclude: self.exclude,
bins: self.bins,
version: self.pkg_version,
};
let projects = Project::discover(&self.manifest_path, &overrides)?;
let mut generator = Generator::for_projects(&projects)
.out(self.out)
.no_build(self.no_build)
.driver(self.builder)
.targets(self.targets);
if let Some(tag) = self.tag {
generator = generator.tag(tag);
}
generator.run()
}
}