summaryrefslogtreecommitdiff
path: root/crates/bot-http
diff options
context:
space:
mode:
authorseth <[email protected]>2024-08-16 22:14:16 -0400
committerGitHub <[email protected]>2024-08-17 02:14:16 +0000
commitbbc00edc6508ea1910c4d9e6a272f7859900950d (patch)
tree538fe23940cb6bca8afa48059e502bfa7d5608cd /crates/bot-http
parent66ea6f8c225cc2273cfbfb1b948604c170a78e8c (diff)
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
Diffstat (limited to 'crates/bot-http')
-rw-r--r--crates/bot-http/Cargo.toml26
-rw-r--r--crates/bot-http/src/github.rs35
-rw-r--r--crates/bot-http/src/lib.rs63
-rw-r--r--crates/bot-http/src/model.rs13
-rw-r--r--crates/bot-http/src/teawie.rs24
5 files changed, 0 insertions, 161 deletions
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 <getchoo at tuta dot io>"]
-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<Output = Result<Option<String>, Error>> + Send;
-}
-
-impl ClientExt for super::Client {
- async fn merge_commit_for(
- &self,
- repo_owner: &str,
- repo_name: &str,
- pr: u64,
- ) -> Result<Option<String>, 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<Output = Result<Response, Error>> + Send;
- fn get_json<T: DeserializeOwned>(
- &self,
- url: &str,
- ) -> impl Future<Output = Result<T, Error>> + 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<Response, Error> {
- 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<T: DeserializeOwned>(&self, url: &str) -> Result<T, Error> {
- 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<String>,
-}
-
-/// `/random_teawie` for the teawieAPI
-#[derive(Clone, Debug, Deserialize)]
-pub struct RandomTeawie {
- pub url: Option<String>,
-}
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<Output = Result<Option<String>, Error>> + Send;
-}
-
-impl ClientExt for super::Client {
- async fn random_teawie(&self) -> Result<Option<String>, Error> {
- let url = format!("{TEAWIE_API}/random_teawie");
- let resp: RandomTeawie = self.get_json(&url).await?;
-
- Ok(resp.url)
- }
-}