1mod tasks;
2mod workspace;
3
4use anyhow::Result;
5use clap::{Parser, Subcommand};
6
7#[derive(Parser)]
8#[command(name = "cargo xtask")]
9struct Args {
10 #[command(subcommand)]
11 command: CliCommand,
12}
13
14#[derive(Subcommand)]
15enum CliCommand {
16 /// Runs `cargo clippy`.
17 Clippy(tasks::clippy::ClippyArgs),
18 Licenses(tasks::licenses::LicensesArgs),
19 /// Checks that packages conform to a set of standards.
20 PackageConformity(tasks::package_conformity::PackageConformityArgs),
21 /// Publishes GPUI and its dependencies to crates.io.
22 PublishGpui(tasks::publish_gpui::PublishGpuiArgs),
23 /// Builds GPUI web examples and serves them.
24 WebExamples(tasks::web_examples::WebExamplesArgs),
25 Workflows(tasks::workflows::GenerateWorkflowArgs),
26 CheckWorkflows(tasks::workflow_checks::WorkflowValidationArgs),
27}
28
29fn main() -> Result<()> {
30 let args = Args::parse();
31
32 match args.command {
33 CliCommand::Clippy(args) => tasks::clippy::run_clippy(args),
34 CliCommand::Licenses(args) => tasks::licenses::run_licenses(args),
35 CliCommand::PackageConformity(args) => {
36 tasks::package_conformity::run_package_conformity(args)
37 }
38 CliCommand::PublishGpui(args) => tasks::publish_gpui::run_publish_gpui(args),
39 CliCommand::WebExamples(args) => tasks::web_examples::run_web_examples(args),
40 CliCommand::Workflows(args) => tasks::workflows::run_workflows(args),
41 CliCommand::CheckWorkflows(args) => tasks::workflow_checks::validate(args),
42 }
43}