integrate-gitea (#2)
Reviewed-on: #2 Co-authored-by: Julien Fastré <julien.fastre@champs-libres.coop> Co-committed-by: Julien Fastré <julien.fastre@champs-libres.coop>
This commit was merged in pull request #2.
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
use url::Url;
|
||||
use crate::cli::Issue2Work;
|
||||
use crate::config::Config;
|
||||
use crate::error::GeneralError;
|
||||
use crate::gitea::issue::{issue_html_url_to_api, Issue};
|
||||
use crate::gitea::client::has_client_for_url;
|
||||
use crate::openproject::user::{GetMe, User};
|
||||
use crate::openproject::work::{WorkPackage, WorkPackageWriter, WorkPackageWriterAssignee};
|
||||
use crate::planning::Issue2WorkActionTrait;
|
||||
|
||||
pub(crate) struct GiteaAction {}
|
||||
|
||||
impl Issue2WorkActionTrait for GiteaAction {
|
||||
async fn run(&self, url: &Url, config: &Config, args: &Issue2Work) -> Result<(), GeneralError> {
|
||||
let gitea_client = crate::gitea::client::Client::from_config(config.gitea.first().unwrap());
|
||||
let issue: Issue = gitea_client
|
||||
.get(issue_html_url_to_api(url)?)
|
||||
.await?;
|
||||
let open_project_client = crate::openproject::client::Client::from_config(&config.openproject);
|
||||
|
||||
let work_package = create_work_package_from_issue(
|
||||
&issue,
|
||||
match args.assign_to_me {
|
||||
true => {
|
||||
let u = open_project_client.me().await?;
|
||||
Some(u)
|
||||
}
|
||||
false => None,
|
||||
}
|
||||
);
|
||||
|
||||
let work_package = open_project_client
|
||||
.create_work_package(&work_package, &args.project_id)
|
||||
.await?;
|
||||
|
||||
println!(
|
||||
"new work package created: {:?}, edit at {}/projects/{}/work_packages/{}",
|
||||
work_package.subject, config.openproject.base_url, args.project_id, work_package.id
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn supports(&self, url: &Url, config: &Config, _args: &Issue2Work) -> bool {
|
||||
has_client_for_url(&url, &config)
|
||||
}
|
||||
}
|
||||
|
||||
fn create_work_package_from_issue(issue: &Issue, assignee: Option<User>) -> WorkPackageWriter {
|
||||
WorkPackageWriter {
|
||||
subject: format!(
|
||||
"{} ({})",
|
||||
issue.title,
|
||||
issue.repository.full_name
|
||||
),
|
||||
work_type: "TASK".into(),
|
||||
description: crate::openproject::work::DescriptionWriter {
|
||||
format: "markdown".into(),
|
||||
raw: format!("From Gitea issue: {} \n\n{}", issue.html_url, issue.body),
|
||||
},
|
||||
assignee: assignee.into()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user