1pub mod commands;
2pub mod context;
3pub mod environment;
4pub mod logging;
5pub mod utils;
6mod versions;
7
8pub mod prelude {
10 pub use anyhow;
11 pub use clap;
12 pub use derive_more;
13 pub use env_logger;
14 pub use rand;
15 pub use serde_json;
16 pub use tracing_subscriber;
17
18 pub mod macros {
19 pub use tracel_xtask_macros::base_commands;
20 pub use tracel_xtask_macros::declare_command_args;
21 pub use tracel_xtask_macros::extend_command_args;
22 pub use tracel_xtask_macros::extend_subcommands;
23 pub use tracel_xtask_macros::extend_targets;
24 }
25
26 pub use crate::commands as base_commands;
27 pub use crate::commands::build::BuildCmdArgs;
28 pub use crate::commands::bump::BumpCmdArgs;
29 pub use crate::commands::bump::BumpSubCommand;
30 pub use crate::commands::check::CheckCmdArgs;
31 pub use crate::commands::check::CheckSubCommand;
32 pub use crate::commands::compile::CompileCmdArgs;
33 pub use crate::commands::coverage::CoverageCmdArgs;
34 pub use crate::commands::dependencies::DependenciesCmdArgs;
35 pub use crate::commands::dependencies::DependenciesSubCommand;
36 pub use crate::commands::doc::DocCmdArgs;
37 pub use crate::commands::doc::DocSubCommand;
38 pub use crate::commands::docker::DockerCmdArgs;
39 pub use crate::commands::docker::DockerSubCommand;
40 pub use crate::commands::fix::FixCmdArgs;
41 pub use crate::commands::fix::FixSubCommand;
42 pub use crate::commands::publish::PublishCmdArgs;
43 pub use crate::commands::test::TestCmdArgs;
44 pub use crate::commands::test::TestSubCommand;
45 pub use crate::commands::validate::ValidateCmdArgs;
46 pub use crate::commands::vulnerabilities::VulnerabilitiesCmdArgs;
47 pub use crate::commands::vulnerabilities::VulnerabilitiesSubCommand;
48 pub use crate::commands::Target;
49 pub use crate::context::Context;
50 pub use crate::endgroup;
51 pub use crate::environment::Environment;
52 pub use crate::group;
53 pub use crate::group_info;
54 pub use crate::init_xtask;
55 pub use crate::parse_args;
56 pub use crate::utils::cargo::ensure_cargo_crate_is_installed;
57 pub use crate::utils::helpers;
58 pub use crate::utils::process::random_port;
59 pub use crate::utils::process::run_process;
60 pub use crate::utils::process::run_process_for_package;
61 pub use crate::utils::process::run_process_for_workspace;
62 pub use crate::utils::prompt::ask_once;
63 pub use crate::utils::rustup::is_current_toolchain_nightly;
64 pub use crate::utils::rustup::rustup_add_component;
65 pub use crate::utils::rustup::rustup_add_target;
66 pub use crate::utils::rustup::rustup_get_installed_targets;
67 pub use crate::utils::time::format_duration;
68 pub use crate::XtaskArgs;
69 }
71
72use crate::context::Context;
73use crate::environment::Environment;
74use crate::logging::init_logger;
75
76#[macro_use]
77extern crate log;
78
79#[derive(clap::Parser)]
80#[command(author, version, about, long_about = None)]
81pub struct XtaskArgs<C: clap::Subcommand> {
82 #[arg(long)]
84 pub enable_coverage: bool,
85 #[arg(short = 'e', long, default_value_t = Environment::default())]
87 pub environment: Environment,
88 #[arg(short = 'c', long, default_value_t = Context::default())]
90 pub context: Context,
91 #[command(subcommand)]
92 pub command: C,
93}
94
95pub fn parse_args<C: clap::Subcommand>() -> anyhow::Result<XtaskArgs<C>> {
96 init_logger().init();
98 let args = <XtaskArgs<C> as clap::Parser>::parse();
99 Ok(args)
100}
101
102pub fn init_xtask<C: clap::Subcommand>(args: XtaskArgs<C>) -> anyhow::Result<XtaskArgs<C>> {
103 group_info!("Environment: {}", args.environment);
105 args.environment.load()?;
106 group_info!("Context: {}", args.context);
107 if args.enable_coverage {
109 group_info!("Enabling coverage support...");
110 setup_coverage()?;
111 }
112 Ok(args)
113}
114
115fn setup_coverage() -> anyhow::Result<()> {
116 unsafe {
117 std::env::set_var("RUSTFLAGS", "-Cinstrument-coverage");
118 std::env::set_var("LLVM_PROFILE_FILE", "burn-%p-%m.profraw");
119 }
120 Ok(())
121}