2020-05-31 16:53:34 +00:00
|
|
|
use crate::{gitea::*, *};
|
|
|
|
use anyhow::Result;
|
|
|
|
use std::path::PathBuf;
|
|
|
|
|
|
|
|
pub(crate) async fn run(
|
|
|
|
common: Common,
|
|
|
|
fname: PathBuf,
|
2020-05-31 18:13:14 +00:00
|
|
|
tag: Option<String>,
|
2020-05-31 16:53:34 +00:00
|
|
|
rm: ReleaseMeta,
|
|
|
|
) -> Result<()> {
|
2020-05-31 18:13:14 +00:00
|
|
|
let repo = git2::Repository::open(".")?;
|
|
|
|
let tag = tag.unwrap_or(version::read_version("VERSION".into())?);
|
|
|
|
let desc = changelog::read(fname.clone(), tag.clone())?;
|
|
|
|
|
|
|
|
if !git::has_tag(&repo, tag.clone())? {
|
|
|
|
git::tag_version(&repo, tag.clone(), desc.clone())?;
|
|
|
|
let _ = git::push_tags(&repo);
|
|
|
|
}
|
|
|
|
|
2020-05-31 16:53:34 +00:00
|
|
|
let desc = changelog::read(fname, tag.clone())?;
|
|
|
|
let cli = client(&common)?;
|
|
|
|
let cr = CreateRelease {
|
|
|
|
body: desc,
|
|
|
|
draft: rm.draft,
|
|
|
|
name: rm.name.or(Some(format!("Version {}", tag))).unwrap(),
|
|
|
|
prerelease: rm.pre_release,
|
|
|
|
tag_name: tag.clone(),
|
2020-05-31 18:19:22 +00:00
|
|
|
target_commitish: "HEAD".into(),
|
2020-05-31 16:53:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
let resp = cli
|
|
|
|
.post(&format!(
|
|
|
|
"{}/api/v1/repos/{}/{}/releases",
|
|
|
|
common.server, common.owner, common.repo
|
|
|
|
))
|
|
|
|
.json(&cr)
|
|
|
|
.send()
|
|
|
|
.await?;
|
|
|
|
|
|
|
|
if !resp.status().is_success() {
|
2020-05-31 18:19:22 +00:00
|
|
|
return Err(anyhow!("{:?} -> {}", resp.status(), resp.text().await?));
|
2020-05-31 16:53:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|