feat(#2471): post failing config deploy build log to the config pr
This commit is contained in:
parent
152d54dcdc
commit
1961afd9cc
3 changed files with 112 additions and 2 deletions
|
|
@ -10,8 +10,8 @@ mod repos;
|
|||
mod users;
|
||||
|
||||
pub use pr_merge::{
|
||||
ForgeMergeError, config_repo, fetch_pr_head_into_applied, merge_config_pr_ff, pr_head_sha,
|
||||
pr_is_open,
|
||||
ForgeMergeError, config_repo, fetch_pr_head_into_applied, merge_config_pr_ff, post_pr_comment,
|
||||
pr_head_sha, pr_is_open,
|
||||
};
|
||||
pub use repos::{
|
||||
create_agent_repo, ensure_config_repo, ensure_knowledge_repo, ensure_meta_remote, ensure_repo,
|
||||
|
|
|
|||
|
|
@ -218,6 +218,38 @@ pub async fn merge_config_pr_ff(repo: &str, pr: u64, sha: &str) -> Result<(), Fo
|
|||
}
|
||||
}
|
||||
|
||||
/// Post a comment to PR (= issue) `pr` on `repo` as the core forge user.
|
||||
/// PRs are issues in Forgejo, so the PR number is the issue index. Used to
|
||||
/// surface a failed config-approval deploy's build log back onto the PR so
|
||||
/// the manager sees why it was rejected without leaving the forge. `repo`
|
||||
/// is `owner/name`.
|
||||
///
|
||||
/// # Errors
|
||||
/// `Other` on absent core token, malformed repo, or transport/API failure.
|
||||
pub async fn post_pr_comment(repo: &str, pr: u64, body: &str) -> Result<(), ForgeMergeError> {
|
||||
let token = core_token()
|
||||
.ok_or_else(|| ForgeMergeError::Other(anyhow::anyhow!("forge core token absent")))?;
|
||||
let (owner, name) = repo.split_once('/').ok_or_else(|| {
|
||||
ForgeMergeError::Other(anyhow::anyhow!("forge repo `{repo}` is not owner/name"))
|
||||
})?;
|
||||
let index = i64::try_from(pr)
|
||||
.map_err(|_| ForgeMergeError::Other(anyhow::anyhow!("PR index {pr} overflows i64")))?;
|
||||
let client = api(&token).map_err(ForgeMergeError::Other)?;
|
||||
client
|
||||
.issue_create_comment(
|
||||
owner,
|
||||
name,
|
||||
index,
|
||||
forgejo_api::structs::CreateIssueCommentOption {
|
||||
body: body.to_owned(),
|
||||
updated_at: None,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.map_err(|e| ForgeMergeError::Other(anyhow::Error::from(e).context("post PR comment")))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::repo_agent_name;
|
||||
|
|
|
|||
Loading…
Reference in a new issue