blob: adeb9876b1cc83ab28fd9aa3014ac162dfe5725a [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you 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::Path;
use anyhow::Result;
use clap::Parser;
#[derive(Debug, Parser)]
#[command(version, about, long_about = None, verbatim_doc_comment)]
pub struct IggyBenchRunnerArgs {
/// Directory where to copy benchmark results
#[arg(long, short)]
pub output_dir: String,
/// Log level (error|warn|info|debug|trace)
#[arg(long, default_value = "info")]
pub log_level: String,
/// Path to the `iggy` repository
#[arg(long)]
pub directory: String,
/// Git ref (tag, branch or sha1) to start benchmark from
#[arg(long)]
pub gitref: String,
/// How many commits or tags to go back
#[arg(long)]
pub count: u64,
/// Skip checking out master branch before running benchmarks
#[arg(long)]
pub skip_master_checkout: bool,
}
impl IggyBenchRunnerArgs {
pub fn validate(&self) -> Result<()> {
// Check if directory exists
if !Path::new(&self.directory).exists() {
anyhow::bail!("Directory '{}' does not exist", self.directory);
}
// Check if directory is a github repository
let git_dir = Path::new(&self.directory).join(".git");
if !git_dir.exists() {
anyhow::bail!("Directory '{}' is not a git repository", self.directory);
}
Ok(())
}
}