Skip to content

Commit e3de44c

Browse files
authored
feat: Add conventional commit message check (#1454)
1 parent ac9c483 commit e3de44c

2 files changed

Lines changed: 44 additions & 0 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
use async_trait::async_trait;
2+
use jupiter::model::mr_dto::MrInfoDto;
3+
use serde_json::{json, Value};
4+
5+
use crate::merge_checker::{CheckResult, CheckType, Checker, ConditionResult};
6+
use common::{errors::MegaError, utils::check_conventional_commits_message};
7+
8+
pub struct CommitMessageChecker;
9+
10+
#[async_trait]
11+
impl Checker for CommitMessageChecker {
12+
async fn run(&self, params: &Value) -> CheckResult {
13+
let title = params["title"].as_str().unwrap_or_default();
14+
let status = if check_conventional_commits_message(title) {
15+
ConditionResult::PASSED
16+
} else {
17+
ConditionResult::FAILED
18+
};
19+
let message = if status == ConditionResult::PASSED {
20+
"Commit message follows conventional commits".to_string()
21+
} else {
22+
"Commit message does not follow conventional commits. Please make sure your MR title follows the Conventional Commits specification.".to_string()
23+
};
24+
25+
CheckResult {
26+
check_type_code: CheckType::CommitMessage,
27+
status,
28+
message,
29+
}
30+
}
31+
32+
async fn build_params(&self, mr_info: &MrInfoDto) -> Result<Value, MegaError> {
33+
let title = mr_info.title.clone();
34+
Ok(json!({
35+
"title": title,
36+
}))
37+
}
38+
}

‎ceres/src/merge_checker/mod.rs‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ use async_trait::async_trait;
44
use serde::Serialize;
55
use utoipa::ToSchema;
66

7+
use crate::merge_checker::commit_message_checker::CommitMessageChecker;
78
use crate::merge_checker::gpg_signature_checker::GpgSignatureChecker;
89
use crate::merge_checker::mr_sync_checker::MrSyncChecker;
910
use callisto::{check_result, sea_orm_active_enums::CheckTypeEnum};
1011
use common::errors::MegaError;
1112
use jupiter::{model::mr_dto::MrInfoDto, storage::Storage};
1213

1314
mod code_review_checker;
15+
mod commit_message_checker;
1416
mod gpg_signature_checker;
1517
pub mod mr_sync_checker;
1618

@@ -153,6 +155,10 @@ impl CheckerRegistry {
153155
storage: storage.clone(),
154156
}),
155157
);
158+
r.register(
159+
CheckType::CommitMessage,
160+
Box::new(CommitMessageChecker),
161+
);
156162

157163
r
158164
}

0 commit comments

Comments
 (0)