Compare commits
No commits in common. "6c2cc00f3866a3d67aec8e77bff8d5def3283471" and "30cb80559364784834b3cf770b42c167c201f892" have entirely different histories.
6c2cc00f38
...
30cb805593
78
Cargo.lock
generated
78
Cargo.lock
generated
@ -37,21 +37,6 @@ dependencies = [
|
|||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "android-tzdata"
|
|
||||||
version = "0.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "android_system_properties"
|
|
||||||
version = "0.1.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.75"
|
version = "1.0.75"
|
||||||
@ -170,7 +155,6 @@ name = "bebot"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"chrono",
|
|
||||||
"constant_time_eq",
|
"constant_time_eq",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
"http",
|
"http",
|
||||||
@ -237,33 +221,12 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "chrono"
|
|
||||||
version = "0.4.30"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "defd4e7873dbddba6c7c91e199c7fcb946abc4a6a4ac3195400bcfb01b5de877"
|
|
||||||
dependencies = [
|
|
||||||
"android-tzdata",
|
|
||||||
"iana-time-zone",
|
|
||||||
"js-sys",
|
|
||||||
"num-traits",
|
|
||||||
"serde",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"windows-targets",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "constant_time_eq"
|
name = "constant_time_eq"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
|
checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "core-foundation-sys"
|
|
||||||
version = "0.8.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cpufeatures"
|
name = "cpufeatures"
|
||||||
version = "0.2.9"
|
version = "0.2.9"
|
||||||
@ -732,29 +695,6 @@ dependencies = [
|
|||||||
"tokio-rustls",
|
"tokio-rustls",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "iana-time-zone"
|
|
||||||
version = "0.1.57"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
|
|
||||||
dependencies = [
|
|
||||||
"android_system_properties",
|
|
||||||
"core-foundation-sys",
|
|
||||||
"iana-time-zone-haiku",
|
|
||||||
"js-sys",
|
|
||||||
"wasm-bindgen",
|
|
||||||
"windows",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "iana-time-zone-haiku"
|
|
||||||
version = "0.1.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
|
|
||||||
dependencies = [
|
|
||||||
"cc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ident_case"
|
name = "ident_case"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
@ -1029,15 +969,6 @@ dependencies = [
|
|||||||
"version_check",
|
"version_check",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num-traits"
|
|
||||||
version = "0.2.16"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num_cpus"
|
name = "num_cpus"
|
||||||
version = "1.16.0"
|
version = "1.16.0"
|
||||||
@ -2102,15 +2033,6 @@ version = "0.4.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows"
|
|
||||||
version = "0.48.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
|
|
||||||
dependencies = [
|
|
||||||
"windows-targets",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-sys"
|
name = "windows-sys"
|
||||||
version = "0.48.0"
|
version = "0.48.0"
|
||||||
|
36
src/event.rs
36
src/event.rs
@ -2,6 +2,8 @@ pub trait GitlabEventExt {
|
|||||||
fn project(&self) -> &Project;
|
fn project(&self) -> &Project;
|
||||||
fn r#ref(&self) -> &str;
|
fn r#ref(&self) -> &str;
|
||||||
fn user(&self) -> &str;
|
fn user(&self) -> &str;
|
||||||
|
fn url(&self) -> String;
|
||||||
|
fn title(&self) -> String;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
@ -103,6 +105,40 @@ impl GitlabEventExt for GitlabEvent {
|
|||||||
GitlabEvent::TagPush { user_name, .. } => &user_name,
|
GitlabEvent::TagPush { user_name, .. } => &user_name,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn url(&self) -> String {
|
||||||
|
let url = match self {
|
||||||
|
GitlabEvent::Push { after, project, .. } => format!("{}/-/commits/{}", project.web_url, after),
|
||||||
|
GitlabEvent::TagPush {
|
||||||
|
r#ref,
|
||||||
|
checkout_sha,
|
||||||
|
project,
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
let refname = r#ref.split('/').into_iter().last().unwrap_or(checkout_sha);
|
||||||
|
format!("{}/-/tags/{}", project.web_url, refname)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
url.replace("http://", "https://").to_string()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn title(&self) -> String {
|
||||||
|
fn find_commit<'a>(commits: &'a Vec<Commit>, sha: &str) -> Option<&'a Commit> {
|
||||||
|
commits.iter().find(|commit| commit.id == sha)
|
||||||
|
}
|
||||||
|
|
||||||
|
match self {
|
||||||
|
GitlabEvent::Push { after, commits, .. } => find_commit(commits, &after)
|
||||||
|
.map(|commit| commit.title.clone())
|
||||||
|
.unwrap_or_else(|| "New commit(s) pushed".to_string()),
|
||||||
|
GitlabEvent::TagPush {
|
||||||
|
checkout_sha, commits, ..
|
||||||
|
} => find_commit(commits, &checkout_sha)
|
||||||
|
.map(|commit| commit.title.clone())
|
||||||
|
.unwrap_or_else(|| "New tag pushed".to_string()),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
46
src/main.rs
46
src/main.rs
@ -54,11 +54,7 @@ async fn matrix_connect(config: &config::Config) -> anyhow::Result<Client> {
|
|||||||
Ok(client)
|
Ok(client)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn handle_gitlab_event(
|
fn build_gitlab_message(event: &GitlabEvent) -> String {
|
||||||
event: GitlabEvent,
|
|
||||||
room_id: &OwnedRoomOrAliasId,
|
|
||||||
matrix_client: &Client,
|
|
||||||
) -> anyhow::Result<()> {
|
|
||||||
let project = event.project();
|
let project = event.project();
|
||||||
let refname = event
|
let refname = event
|
||||||
.r#ref()
|
.r#ref()
|
||||||
@ -66,32 +62,21 @@ async fn handle_gitlab_event(
|
|||||||
.last()
|
.last()
|
||||||
.unwrap_or_else(|| event.r#ref())
|
.unwrap_or_else(|| event.r#ref())
|
||||||
.to_string();
|
.to_string();
|
||||||
let mut msg = format!("*{}* {} **{}** ", project.path_with_namespace, refname, event.user());
|
format!(
|
||||||
|
"*{}* {} **{}** [{}]({})",
|
||||||
fn find_commit<'a>(commits: &'a Vec<event::Commit>, sha: &str) -> Option<&'a event::Commit> {
|
project.path_with_namespace,
|
||||||
commits.iter().find(|commit| commit.id == sha)
|
refname,
|
||||||
}
|
event.user(),
|
||||||
|
event.title(),
|
||||||
match event {
|
event.url()
|
||||||
GitlabEvent::Push { after, commits, .. } => {
|
)
|
||||||
if let Some(commit) = find_commit(&commits, &after) {
|
}
|
||||||
msg.push_str(&format!("{} ({})", commit.title, commit.url));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
GitlabEvent::TagPush {
|
|
||||||
checkout_sha,
|
|
||||||
project,
|
|
||||||
commits,
|
|
||||||
..
|
|
||||||
} => {
|
|
||||||
if let Some(commit) = find_commit(&commits, &checkout_sha) {
|
|
||||||
msg.push_str(&format!("{} ({})", commit.title, commit.url));
|
|
||||||
} else {
|
|
||||||
msg.push_str(&format!("New tag pushed ({}/-/tags/{})", project.web_url, refname));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
async fn handle_gitlab_event(
|
||||||
|
event: GitlabEvent,
|
||||||
|
room_id: &OwnedRoomOrAliasId,
|
||||||
|
matrix_client: &Client,
|
||||||
|
) -> anyhow::Result<()> {
|
||||||
fn room_matches(a_room: &BaseRoom, our_room: &OwnedRoomOrAliasId) -> bool {
|
fn room_matches(a_room: &BaseRoom, our_room: &OwnedRoomOrAliasId) -> bool {
|
||||||
let our_room_str = our_room.as_str();
|
let our_room_str = our_room.as_str();
|
||||||
a_room.room_id().as_str() == our_room_str
|
a_room.room_id().as_str() == our_room_str
|
||||||
@ -132,6 +117,7 @@ async fn handle_gitlab_event(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(room) = room {
|
if let Some(room) = room {
|
||||||
|
let msg = build_gitlab_message(&event);
|
||||||
debug!("Sending message to {}: {}", room_id, msg);
|
debug!("Sending message to {}: {}", room_id, msg);
|
||||||
let msg_content = RoomMessageEventContent::text_markdown(&msg);
|
let msg_content = RoomMessageEventContent::text_markdown(&msg);
|
||||||
room.send(msg_content, None).await?;
|
room.send(msg_content, None).await?;
|
||||||
|
Loading…
Reference in New Issue
Block a user