1use std::path::PathBuf;
2
3use clap::Args;
4use eyre::Result;
5use lux_lib::{config::Config, operations, workspace::Workspace};
6
7use crate::build::{self, Build};
8
9#[derive(Args)]
10pub struct Run {
11 args: Vec<String>,
12
13 #[clap(default_value_t = false)]
17 #[arg(long)]
18 no_loader: bool,
19
20 #[arg(long)]
23 dir: Option<PathBuf>,
24
25 #[clap(flatten)]
26 build: Build,
27}
28
29pub async fn run(run_args: Run, config: Config) -> Result<()> {
30 let workspace = Workspace::current_or_err()?;
31
32 let package = run_args.build.package.clone();
33 build::build(run_args.build, config.clone()).await?;
34
35 operations::Run::new()
36 .workspace(&workspace)
37 .maybe_package(package)
38 .args(&run_args.args)
39 .config(&config)
40 .disable_loader(run_args.no_loader)
41 .run()
42 .await?;
43
44 Ok(())
45}