gitlab_tagger 0.1.3

Simple crate to create tag using gitlab api
Documentation
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(())
}