Compare commits

..

2 commits

Author SHA1 Message Date
c0d4269d61 WIP: feat: post webhook to user
All checks were successful
ci/woodpecker/push/cron-docker-builder Pipeline was successful
ci/woodpecker/push/tag-created Pipeline was successful
ci/woodpecker/push/push-next Pipeline was successful
2024-07-21 13:45:04 +01:00
8b2deba6de WIP: feat: dispatch NotifyUser messages to server actor (2/2) 2024-07-21 13:45:04 +01:00
7 changed files with 61 additions and 18 deletions

View file

@ -38,7 +38,7 @@ impl From<config::webhook::Push> for Commit {
}
newtype!(Sha: String, Display, Hash,PartialOrd, Ord: "The unique SHA for a git commit.");
newtype!(Message: String, Hash, PartialOrd, Ord: "The commit message for a git commit.");
newtype!(Message: String, Display, Hash, PartialOrd, Ord: "The commit message for a git commit.");
#[derive(Clone, Debug)]
pub struct Histories {

View file

@ -26,4 +26,3 @@ pub use repo_details::RepoDetails;
pub use repository::OpenRepository;
pub use repository::Repository;
pub use user_notification::UserNotification;

View file

@ -1,15 +1,27 @@
use crate::Commit;
use git_next_config::{ForgeAlias, RepoAlias};
use git_next_config::{BranchName, ForgeAlias, RepoAlias};
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum UserNotification {
CICheckFailed(ForgeAlias, RepoAlias, Commit),
RepoConfigLoadFailure(ForgeAlias, RepoAlias, String),
WebhookRegistration(ForgeAlias, RepoAlias, String),
CICheckFailed {
forge_alias: ForgeAlias,
repo_alias: RepoAlias,
commit: Commit,
},
RepoConfigLoadFailure {
forge_alias: ForgeAlias,
repo_alias: RepoAlias,
reason: String,
},
WebhookRegistration {
forge_alias: ForgeAlias,
repo_alias: RepoAlias,
reason: String,
},
DevNotBasedOnMain {
forge_alias: git_next_config::ForgeAlias,
repo_alias: git_next_config::RepoAlias,
dev_branch: git_next_config::BranchName,
main_branch: git_next_config::BranchName,
forge_alias: ForgeAlias,
repo_alias: RepoAlias,
dev_branch: BranchName,
main_branch: BranchName,
},
}

View file

@ -33,11 +33,11 @@ impl Handler<actor::messages::LoadConfigFromRepo> for actor::RepoActor {
),
Err(err) => actor::notify_user(
notify_user_recipient.as_ref(),
UserNotification::RepoConfigLoadFailure(
UserNotification::RepoConfigLoadFailure {
forge_alias,
repo_alias,
err.to_string(),
),
reason: err.to_string(),
},
log.as_ref(),
),
}

View file

@ -42,7 +42,11 @@ impl Handler<actor::messages::ReceiveCIStatus> for actor::RepoActor {
tracing::warn!("Checks have failed");
actor::notify_user(
self.notify_user_recipient.as_ref(),
UserNotification::CICheckFailed(forge_alias, repo_alias, next),
UserNotification::CICheckFailed {
forge_alias,
repo_alias,
commit: next,
},
log.as_ref(),
);
actor::delay_send(

View file

@ -32,11 +32,11 @@ impl Handler<RegisterWebhook> for RepoActor {
Err(err) => {
actor::notify_user(
notify_user_recipient.as_ref(),
UserNotification::WebhookRegistration(
UserNotification::WebhookRegistration {
forge_alias,
repo_alias,
err.to_string(),
),
reason: err.to_string(),
},
log.as_ref(),
);
}

View file

@ -1,5 +1,7 @@
//
use actix::prelude::*;
use derive_more::Deref;
use git_next_git::UserNotification;
use git_next_repo_actor::messages::NotifyUser;
use crate::ServerActor;
@ -7,7 +9,33 @@ use crate::ServerActor;
impl Handler<NotifyUser> for ServerActor {
type Result = ();
fn handle(&mut self, _msg: NotifyUser, _ctx: &mut Self::Context) -> Self::Result {
fn handle(&mut self, msg: NotifyUser, _ctx: &mut Self::Context) -> Self::Result {
let _message = match msg.deref() {
UserNotification::CICheckFailed {
forge_alias,
repo_alias,
commit,
} => format!(
"HELP ME!: {forge_alias}/{repo_alias}: CI Checks failed for commit: [{}] {}",commit.sha(), commit.message()
),
UserNotification::RepoConfigLoadFailure {
forge_alias,
repo_alias,
reason,
} => format!("HELP ME!: {forge_alias}/{repo_alias}: Failed to load config: {reason}"),
UserNotification::WebhookRegistration {
forge_alias,
repo_alias,
reason,
} => format!("HELP ME!: {forge_alias}/{repo_alias}: Failed to register webhook: {reason}"),
UserNotification::DevNotBasedOnMain {
forge_alias,
repo_alias,
dev_branch,
main_branch,
} => format!("HELP ME!: {forge_alias}/{repo_alias}: Dev branch '{dev_branch}' is not based on main branch '{main_branch}'"),
};
tracing::info!(_message);
// TODO: (#95) should notify user
// send post to notification webhook url
}