use failure::Error;
use crate::gitlab_tag::GitlabTag;
use crate::gitlab_version::GitlabVersion;
#[derive(Debug)]
pub struct Bot {
pub gitlab_url: String,
pub gitlab_token: String,
pub rocket_chat_url: String,
pub rocket_chat_token: String,
}
impl Bot {
fn get_version(self: &Self) -> Result<GitlabVersion, Error> {
let url = format!("{}/api/v4/version", &self.gitlab_url);
debug!("Calling api: {}", url);
let version: GitlabVersion = ureq::get(&url)
.set("PRIVATE-TOKEN", &self.gitlab_token)
.call()?
.into_json()?;
Ok(version)
}
fn publish_message(self: &Self, message: &String) -> Result<(), Error> {
debug!("Publishing message: {}", message);
let request_url = format!(
"{url}/hooks/{token}",
url = self.rocket_chat_url,
token = self.rocket_chat_token
);
let _response = ureq::post(&request_url)
.send_json(ureq::json!({ "text": message }))?
.into_string()?;
Ok(())
}
pub fn exec(self: &Self) -> Result<(), Error> {
debug!("Using api url: {}", self.gitlab_url);
debug!("Using api token: {}", self.gitlab_token);
debug!("Using rocket chat url: {}", self.rocket_chat_token);
debug!("Using rocket chat token: {}", self.rocket_chat_token);
let gitlab_latest_version = GitlabTag::get_latest_version()?;
info!("Latest Gitlab version is {}", gitlab_latest_version);
let version = self.get_version()?;
info!("Current Gitlab version is {}", version);
if gitlab_latest_version != version {
let message = format!(
"The version of Gitlab ({}) is no longer up to date, {} is now available.",
version, gitlab_latest_version
);
self.publish_message(&message)?;
}
Ok(())
}
}