use std::error::Error;
use clap::Parser;
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
pub struct Args {
#[arg(long, short)]
pub server: String,
#[arg(long, short)]
pub id: String,
#[arg(long, short)]
pub private_token: String,
#[arg(long, short)]
pub branch: String,
#[arg(long, short)]
pub tag: String,
#[arg(long, short)]
pub commit: String
}
pub fn new_tag(args: &Args) -> String {
let title = args.commit.split(":").collect::<Vec<&str>>().first().cloned().unwrap();
let mut vers = args.tag.split(".").into_iter().clone();
let mut major: u8 = vers.next().unwrap().parse().unwrap();
let mut minor: u8 = vers.next().unwrap().parse().unwrap();
let mut patch: u8 = vers.next().unwrap().parse().unwrap();
match title {
"major" => {
major += 1;
minor = 0;
patch = 0;
},
"minor" => {
minor += 1;
patch = 0;
},
"patch" => patch += 1,
_ => panic!("Unknown title")
}
format!("{}.{}.{}", major, minor, patch)
}
pub async fn push_tag(args: Args) -> Result<(), Box<dyn Error>> {
let tag = new_tag(&args);
let client = reqwest::Client::new();
let url = format!(
"{}/api/v4/projects/{}/repository/tags?tag_name={}&ref={}",
args.server, args.id, tag, args.branch
);
let response = client.post(url)
.header("PRIVATE-TOKEN", args.private_token)
.send()
.await?
.text()
.await?;
println!("{:?}", response);
Ok(())
}