autocrate/src/serverapi/forgejo.rs

87 lines
2.3 KiB
Rust
Raw Normal View History

2024-02-19 22:07:51 +01:00
use crate::{
2024-02-24 13:44:06 +00:00
config::{Api, Config},
2024-02-19 22:07:51 +01:00
error::*,
2024-02-24 14:33:58 +01:00
serverapi::{PublishContext, ReleaseContext, ServerApi},
2024-02-19 22:07:51 +01:00
};
2024-02-24 14:10:44 +01:00
use async_trait::async_trait;
use reqwest::{
2024-02-24 14:33:58 +01:00
header::{HeaderMap, HeaderValue},
2024-02-24 13:44:06 +00:00
Client, Url,
2024-02-24 14:10:44 +01:00
};
pub struct Forgejo {
cfg: Api,
client: Client,
}
impl Forgejo {
pub async fn build(api: &Api) -> Result<Self> {
let mut headers: HeaderMap = HeaderMap::new();
// may be left empty if we only do reads from publically accessible urls
if api.auth.is_some() {
let _ = headers.insert(
"Authorization",
HeaderValue::from_str(api.auth.clone().unwrap().pass.get_pass()?.as_str())
.map_err(ServerApiError::from)?,
);
}
let client = super::client_builder()
.default_headers(headers)
.build()
.map_err(ServerApiError::from)?;
Ok(Self {
cfg: api.clone(),
client,
})
}
}
2024-02-19 22:07:51 +01:00
#[async_trait]
impl ServerApi for Forgejo {
2024-02-24 13:44:06 +00:00
async fn init(&mut self, _cfg: &Config) -> Result<()> {
2024-02-19 22:07:51 +01:00
todo!()
}
async fn push_release(&mut self, rc: ReleaseContext) -> Result<()> {
2024-02-24 14:10:44 +01:00
let raw_url = format!(
2024-02-24 14:33:58 +01:00
"{}/api/v1/repos/{}/{}/releases",
self.cfg.endpoint, rc.username, rc.repository
2024-02-24 14:10:44 +01:00
);
2024-02-24 14:33:58 +01:00
let url = Url::parse(&raw_url).map_err(ServerApiError::from)?;
let body = format!(
r#"
2024-02-24 14:10:44 +01:00
{{
2024-02-24 14:33:58 +01:00
"body": "{}",
"draft": {},
"name": "{}",
"prerelease": {},
"tag_name": "{}",
"target_commitish": "{}"
2024-02-24 14:10:44 +01:00
}}
2024-02-24 14:33:58 +01:00
"#,
rc.text, rc.draft, rc.tag, rc.prerelease, rc.tag, rc.commit_sig
);
2024-02-24 14:10:44 +01:00
2024-02-24 14:33:58 +01:00
let request = self
.client
.post(url)
.body(body)
2024-02-24 13:44:06 +00:00
.build()
.map_err(ServerApiError::from)?;
let _response = self
.client
.execute(request)
.await
.map_err(ServerApiError::from)?;
2024-02-24 14:10:44 +01:00
Ok(())
2024-02-19 22:07:51 +01:00
}
async fn push_release_artifact(&mut self, _rc: ReleaseContext) -> Result<()> {
2024-02-24 13:24:14 +01:00
todo!()
}
async fn push_pkg(&mut self, _pc: PublishContext) -> Result<()> {
2024-02-19 22:07:51 +01:00
todo!()
}
2024-02-24 23:03:06 +00:00
fn get_cfg(&self) -> &Api {
&self.cfg
}
2024-02-19 22:07:51 +01:00
}