| // Copyright 2024 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| use std::path; |
| |
| use clap::Parser; |
| use cmd_runner::{ |
| cargo_workspace::{CargoOptions, CargoWorkspaceSubcommand, FormatterOptions}, |
| license_checker::LicenseSubcommand, |
| }; |
| use license::LICENSE_CHECKER; |
| use xshell::Shell; |
| |
| mod license; |
| |
| #[derive(clap::Parser)] |
| struct Cli { |
| #[clap(subcommand)] |
| subcommand: Subcommand, |
| } |
| |
| #[derive(clap::Subcommand, Debug, Clone)] |
| enum Subcommand { |
| VerifyCi { |
| #[command(flatten)] |
| cargo_options: CargoOptions, |
| }, |
| #[command(flatten)] |
| CargoWorkspace(CargoWorkspaceSubcommand), |
| #[command(flatten)] |
| License(LicenseSubcommand), |
| } |
| |
| fn main() -> anyhow::Result<()> { |
| let args = Cli::parse(); |
| let root_dir = path::Path::new( |
| &std::env::var_os("CARGO_MANIFEST_DIR") |
| .expect("Must be run via Cargo to establish root directory"), |
| ) |
| .parent() |
| .expect("Workspace directory should exist") |
| .to_path_buf(); |
| let sh = Shell::new()?; |
| sh.change_dir(&root_dir); |
| match args.subcommand { |
| Subcommand::VerifyCi { cargo_options } => { |
| cargo_options.check_workspace(&sh, "common")?; |
| FormatterOptions { reformat: false }.check_format(&sh)?; |
| LICENSE_CHECKER.check(&root_dir)?; |
| } |
| Subcommand::CargoWorkspace(workspace) => workspace.run("common", &sh)?, |
| Subcommand::License(license) => license.run(&LICENSE_CHECKER, &root_dir)?, |
| } |
| Ok(()) |
| } |