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!()
|
|
|
|
}
|
2024-02-25 00:01:03 +01:00
|
|
|
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
|
|
|
}
|
2024-02-25 00:01:03 +01:00
|
|
|
async fn push_release_artifact(&mut self, _rc: ReleaseContext) -> Result<()> {
|
2024-02-24 13:24:14 +01:00
|
|
|
todo!()
|
|
|
|
}
|
2024-02-25 00:01:03 +01:00
|
|
|
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
|
|
|
}
|