1use clap::Parser;
5use move_cli::base::test::UnitTestResult;
6use move_package::BuildConfig;
7use std::path::Path;
8use sui_move_build::{SuiPackageHooks, implicit_deps, set_sui_flavor};
9use sui_package_management::system_package_versions::latest_system_packages;
10
11pub mod build;
12pub mod coverage;
13pub mod disassemble;
14pub mod manage_package;
15pub mod migrate;
16pub mod new;
17pub mod summary;
18pub mod unit_test;
19
20#[derive(Parser)]
21pub enum Command {
22 Build(build::Build),
23 Coverage(coverage::Coverage),
24 Disassemble(disassemble::Disassemble),
25 ManagePackage(manage_package::ManagePackage),
26 Migrate(migrate::Migrate),
27 New(new::New),
28 Test(unit_test::Test),
29 Summary(summary::Summary),
30}
31
32pub enum CommandMeta {
35 Summary(summary::PackageSummaryMetadata),
36}
37
38pub fn execute_move_command(
39 package_path: Option<&Path>,
40 mut build_config: BuildConfig,
41 command: Command,
42 command_meta: Option<CommandMeta>,
43) -> anyhow::Result<()> {
44 if let Some(err_msg) = set_sui_flavor(&mut build_config) {
45 anyhow::bail!(err_msg);
46 }
47
48 build_config.implicit_dependencies = implicit_deps(latest_system_packages());
49
50 move_package::package_hooks::register_package_hooks(Box::new(SuiPackageHooks));
51 match command {
52 Command::Build(c) => c.execute(package_path, build_config),
53 Command::Coverage(c) => c.execute(package_path, build_config),
54 Command::Disassemble(c) => c.execute(package_path, build_config),
55 Command::ManagePackage(c) => c.execute(package_path, build_config),
56 Command::Migrate(c) => c.execute(package_path, build_config),
57 Command::New(c) => c.execute(package_path),
58 Command::Summary(s) => {
59 let additional_metadata = command_meta
60 .map(|meta| {
61 let CommandMeta::Summary(metadata) = meta;
62 metadata
63 })
64 .unwrap_or_default();
65 s.execute(package_path, build_config, additional_metadata)
66 }
67
68 Command::Test(c) => {
69 let result = c.execute(package_path, build_config)?;
70
71 if let UnitTestResult::Failure = result {
73 std::process::exit(1)
74 }
75
76 Ok(())
77 }
78 }
79}