From bbc00edc6508ea1910c4d9e6a272f7859900950d Mon Sep 17 00:00:00 2001 From: seth Date: Fri, 16 Aug 2024 22:14:16 -0400 Subject: end of summer refactor (#31) * crates: `bot-*` -> `discord-bot` I didn't really need all these crates to be split :/ * discord-bot: revamp http impl also handles the new errors reported by teawieAPI * crates: split http backend this can be reused easily * git-tracker: short-circuit boolean logic We don't need to check if the commit is a descendant of the HEAD of the branch if it *is* the HEAD * nix: fenix -> nixpkgs * treefmt: add actionlint * nix: use docker arch names for containers * ci: use actions-rust-lang actions * nix: drop ci dev shell * git-tracker: init ManagedRepository this logic can be shared * ci: use nix for clippy scan * discord-bot: better handle unmerged PRs * ci: fix treefmt check * nix: fix clippy check * .env.template: update crate names * git-tracker: use remote name for remote name i was half asleep * discord-bot: handle merged PRs that aren't found in any tracked branches * git-tracker: make collect_statuses_in() return a Vec * discord-bot: add more PR info with response fixes #18 --- crates/bot-http/Cargo.toml | 26 ------------------ crates/bot-http/src/github.rs | 35 ------------------------ crates/bot-http/src/lib.rs | 63 ------------------------------------------- crates/bot-http/src/model.rs | 13 --------- crates/bot-http/src/teawie.rs | 24 ----------------- 5 files changed, 161 deletions(-) delete mode 100644 crates/bot-http/Cargo.toml delete mode 100644 crates/bot-http/src/github.rs delete mode 100644 crates/bot-http/src/lib.rs delete mode 100644 crates/bot-http/src/model.rs delete mode 100644 crates/bot-http/src/teawie.rs (limited to 'crates/bot-http') diff --git a/crates/bot-http/Cargo.toml b/crates/bot-http/Cargo.toml deleted file mode 100644 index 0888fda..0000000 --- a/crates/bot-http/Cargo.toml +++ /dev/null @@ -1,26 +0,0 @@ -[package] -name = "bot-http" -version = "0.2.0" -edition = "2021" - -authors = ["seth "] -description = "HTTP client for nixpkgs-tracker-bot" -repository = "https://github.com/getchoo/nixpkgs-tracker-bot" - -publish = false - -[dependencies] -log = { workspace = true } -reqwest = { version = "0.12.5", default-features = false, features = ["charset", "http2", "rustls-tls", "json"] } -serde = { version = "1.0.207", features = ["derive"] } - -[lints.rust] -unsafe_code = "forbid" - -[lints.clippy] -complexity = "warn" -correctness = "deny" -pedantic = "warn" -perf = "warn" -style = "warn" -suspicious = "deny" diff --git a/crates/bot-http/src/github.rs b/crates/bot-http/src/github.rs deleted file mode 100644 index 7822eb8..0000000 --- a/crates/bot-http/src/github.rs +++ /dev/null @@ -1,35 +0,0 @@ -use super::{ClientExt as _, Error}; -use crate::model::PullRequest; - -use std::future::Future; - -const GITHUB_API: &str = "https://api.github.com"; - -pub trait ClientExt { - /// Get the commit that merged [`pr`] in [`repo_owner`]/[`repo_name`] - /// - /// # Errors - /// - /// Will return [`Err`] if the merge commit cannot be found - fn merge_commit_for( - &self, - repo_owner: &str, - repo_name: &str, - pr: u64, - ) -> impl Future, Error>> + Send; -} - -impl ClientExt for super::Client { - async fn merge_commit_for( - &self, - repo_owner: &str, - repo_name: &str, - pr: u64, - ) -> Result, Error> { - let url = format!("{GITHUB_API}/repos/{repo_owner}/{repo_name}/pulls/{pr}"); - let resp: PullRequest = self.get_json(&url).await?; - let merge_commit = resp.merge_commit_sha; - - Ok(merge_commit) - } -} diff --git a/crates/bot-http/src/lib.rs b/crates/bot-http/src/lib.rs deleted file mode 100644 index ab32cd4..0000000 --- a/crates/bot-http/src/lib.rs +++ /dev/null @@ -1,63 +0,0 @@ -use std::future::Future; - -use log::trace; -use serde::de::DeserializeOwned; - -mod github; -mod model; -mod teawie; - -pub use github::ClientExt as GithubClientExt; -pub use teawie::ClientExt as TeawieClientExt; - -pub type Client = reqwest::Client; -pub type Response = reqwest::Response; -pub type Error = reqwest::Error; - -/// Fun trait for functions we use with [Client] -pub trait ClientExt { - fn default() -> Self; - fn get_request(&self, url: &str) -> impl Future> + Send; - fn get_json( - &self, - url: &str, - ) -> impl Future> + Send; -} - -impl ClientExt for Client { - /// Create the default [`Client`] - fn default() -> Self { - reqwest::Client::builder() - .user_agent(format!( - "nixpkgs-tracker-bot/{}", - option_env!("CARGO_PKG_VERSION").unwrap_or_else(|| "development") - )) - .build() - .unwrap() - } - - /// Perform a GET request to [`url`] - /// - /// # Errors - /// - /// Will return [`Err`] if the request fails - async fn get_request(&self, url: &str) -> Result { - trace!("Making GET request to {url}"); - - let resp = self.get(url).send().await?; - resp.error_for_status_ref()?; - - Ok(resp) - } - - /// Perform a GET request to [`url`] and decode the json response - /// - /// # Errors - /// - /// Will return [`Err`] if the request fails or cannot be deserialized - async fn get_json(&self, url: &str) -> Result { - let resp = self.get_request(url).await?; - let json = resp.json().await?; - Ok(json) - } -} diff --git a/crates/bot-http/src/model.rs b/crates/bot-http/src/model.rs deleted file mode 100644 index afd4717..0000000 --- a/crates/bot-http/src/model.rs +++ /dev/null @@ -1,13 +0,0 @@ -use serde::Deserialize; - -/// Bad version of `/repos/{owner}/{repo}/pulls/{pull_number}` for Github's api -#[derive(Clone, Debug, Deserialize)] -pub struct PullRequest { - pub merge_commit_sha: Option, -} - -/// `/random_teawie` for the teawieAPI -#[derive(Clone, Debug, Deserialize)] -pub struct RandomTeawie { - pub url: Option, -} diff --git a/crates/bot-http/src/teawie.rs b/crates/bot-http/src/teawie.rs deleted file mode 100644 index ea4f53e..0000000 --- a/crates/bot-http/src/teawie.rs +++ /dev/null @@ -1,24 +0,0 @@ -use super::{ClientExt as _, Error}; -use crate::model::RandomTeawie; - -use std::future::Future; - -const TEAWIE_API: &str = "https://api.getchoo.com"; - -pub trait ClientExt { - /// Get a random teawie - /// - /// # Errors - /// - /// Will return [`Err`] if the request fails or the response cannot be deserialized - fn random_teawie(&self) -> impl Future, Error>> + Send; -} - -impl ClientExt for super::Client { - async fn random_teawie(&self) -> Result, Error> { - let url = format!("{TEAWIE_API}/random_teawie"); - let resp: RandomTeawie = self.get_json(&url).await?; - - Ok(resp.url) - } -} -- cgit v1.2.3