diff --git a/.forgejo/workflows/check.yaml b/.forgejo/workflows/check.yaml new file mode 100644 index 0000000..5f2176a --- /dev/null +++ b/.forgejo/workflows/check.yaml @@ -0,0 +1,27 @@ +name: check + +on: + push: + branches: [master] + pull_request_target: + +jobs: + build: + runs-on: docker + steps: + - uses: https://code.forgejo.org/actions/checkout@v4 + - uses: https://github.com/actions-rust-lang/setup-rust-toolchain@fb51252c7ba57d633bc668f941da052e410add48 + - name: Build + run: cargo build + + check: + runs-on: docker + steps: + - uses: https://code.forgejo.org/actions/checkout@v4 + - uses: https://github.com/actions-rust-lang/setup-rust-toolchain@fb51252c7ba57d633bc668f941da052e410add48 + with: + components: clippy, rustfmt + - name: Run clippy + run: cargo clippy -- -D warnings + - name: Run rustfmt + run: cargo fmt --all -- --check diff --git a/.renovaterc b/.renovaterc index b36f3b4..9918a21 100644 --- a/.renovaterc +++ b/.renovaterc @@ -3,8 +3,7 @@ "extends": [ "config:recommended", ":combinePatchMinorReleases", - ":enableVulnerabilityAlerts", - ":rebaseStalePrs" + ":enableVulnerabilityAlerts" ], "prConcurrentLimit": 10, "branchPrefix": "renovate/" diff --git a/Cargo.lock b/Cargo.lock index dba4f3b..5a4eaac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,6 +26,17 @@ dependencies = [ "memchr", ] +[[package]] +name = "async-trait" +version = "0.1.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "autocfg" version = "1.3.0" @@ -34,13 +45,13 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "axum" -version = "0.8.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" +checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" dependencies = [ + "async-trait", "axum-core", "bytes", - "form_urlencoded", "futures-util", "http", "http-body", @@ -58,9 +69,9 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 1.0.1", "tokio", - "tower", + "tower 0.4.13", "tower-layer", "tower-service", "tracing", @@ -68,19 +79,20 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" +checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" dependencies = [ + "async-trait", "bytes", - "futures-core", + "futures-util", "http", "http-body", "http-body-util", "mime", "pin-project-lite", "rustversion", - "sync_wrapper", + "sync_wrapper 0.1.2", "tower-layer", "tower-service", "tracing", @@ -158,27 +170,27 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "color-eyre" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e1761c0e16f8883bbbb8ce5990867f4f06bf11a0253da6495a04ce4b6ef0ec" +checksum = "e5920befb47832a6d61ee3a3a846565cfa39b331331e68a3b1d1116630f2f26d" dependencies = [ "backtrace", "color-spantrace", "eyre", "indenter", "once_cell", - "owo-colors 4.2.0", + "owo-colors", "tracing-error", ] [[package]] name = "color-spantrace" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" +checksum = "b8b88ea9df13354b55bc7234ebcce36e6ef896aca2e42a15de9e10edce01b427" dependencies = [ "once_cell", - "owo-colors 3.5.0", + "owo-colors", "tracing-core", "tracing-error", ] @@ -527,9 +539,9 @@ dependencies = [ [[package]] name = "matchit" -version = "0.8.4" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "memchr" @@ -677,12 +689,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "owo-colors" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" - [[package]] name = "owo-colors" version = "4.2.0" @@ -718,6 +724,26 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "pin-project-lite" version = "0.2.14" @@ -918,9 +944,9 @@ checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "reqwest" -version = "0.12.18" +version = "0.12.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e98ff6b0dbbe4d5a37318f433d4fc82babd21631f194d370409ceb2e40b2f0b5" +checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813" dependencies = [ "base64", "bytes", @@ -931,11 +957,8 @@ dependencies = [ "hyper", "hyper-rustls", "hyper-util", - "ipnet", "js-sys", "log", - "mime", - "once_cell", "percent-encoding", "pin-project-lite", "quinn", @@ -944,10 +967,10 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 1.0.1", "tokio", "tokio-rustls", - "tower", + "tower 0.5.2", "tower-http", "tower-service", "url", @@ -1187,6 +1210,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "sync_wrapper" version = "1.0.1" @@ -1281,14 +1310,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", + "pin-project", "pin-project-lite", - "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -1296,10 +1325,25 @@ dependencies = [ ] [[package]] -name = "tower-http" -version = "0.6.4" +name = "tower" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdb0c213ca27a9f57ab69ddb290fd80d970922355b83ae380b395d3986b8a2e" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 1.0.1", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc2d9e086a412a451384326f521c8123a99a466b329941a9403696bff9b0da2" dependencies = [ "bitflags", "bytes", @@ -1308,7 +1352,7 @@ dependencies = [ "http-body", "iri-string", "pin-project-lite", - "tower", + "tower 0.5.2", "tower-layer", "tower-service", ] diff --git a/Cargo.toml b/Cargo.toml index 8bd6e7f..60d6aff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" license = "EUPL-1.2" [dependencies] -axum = "0.8.0" +axum = "0.7.5" color-eyre = "0.6.3" mlua = { version = "0.10.0", features = ["luajit", "macros", "serialize", "vendored"] } reqwest = { version = "0.12.7", default-features = false, features = ["json", "rustls-tls"] } diff --git a/src/types.rs b/src/types.rs index 82002f0..2d52ab0 100644 --- a/src/types.rs +++ b/src/types.rs @@ -4,14 +4,14 @@ use mlua::IntoLua; use serde::{Deserialize, Serialize}; /// Converts a `serde_json::Value` to a `mlua::Value`. -fn json_to_lua(value: serde_json::Value, lua: &mlua::Lua) -> mlua::Result> { +fn json_to_lua(value: serde_json::Value, lua: &mlua::Lua) -> mlua::Result { match value { serde_json::Value::Null => Ok(mlua::Value::Nil), serde_json::Value::Bool(value) => Ok(mlua::Value::Boolean(value)), serde_json::Value::Number(value) => match value.as_f64() { Some(number) => Ok(mlua::Value::Number(number)), None => Err(mlua::Error::ToLuaConversionError { - from: "serde_json::Value::Number", + from: String::from("serde_json::Value::Number"), to: "Number", message: Some("Number cannot be represented by a floating-point type".into()), }), @@ -52,8 +52,8 @@ pub(crate) struct ApiEvent { pub status: u16, } -impl<'lua> IntoLua<'lua> for ApiEvent { - fn into_lua(self, lua: &'lua mlua::Lua) -> mlua::Result> { +impl IntoLua for ApiEvent { + fn into_lua(self, lua: &mlua::Lua) -> mlua::Result { let headers = lua.create_table_with_capacity(0, self.headers.len())?; for (k, v) in self.headers { let k = lua.create_string(k)?; diff --git a/src/worker/lua.rs b/src/worker/lua.rs index 6ef1ad7..669c4ee 100644 --- a/src/worker/lua.rs +++ b/src/worker/lua.rs @@ -1,6 +1,6 @@ use std::sync::mpsc::Receiver; -use color_eyre::Result; +use color_eyre::{eyre, Result}; use mlua::{Function, IntoLua as _, Lua, LuaSerdeExt}; use tokio::sync::mpsc::UnboundedSender; @@ -96,23 +96,23 @@ pub fn worker( Event::Webhook(data) => { tracing::trace!(id = data.topic, "Received webhook event"); let data = lua.to_value(&data)?; - event_fn.call::<_, ()>(("webhook", data))? + event_fn.call(("webhook", data))? } Event::Api(data) => { tracing::trace!(id = data.id, status = data.status, "Received api event"); let data = data.into_lua(&lua)?; - event_fn.call::<_, ()>(("api", data))? + event_fn.call(("api", data))? } Event::Error(data) => { tracing::trace!(id = data.id, message = data.message, "Received error event"); let data = lua.to_value(&data)?; - event_fn.call::<_, ()>(("error", data))? + event_fn.call(("error", data))? } } } Ok(()) - })?; + }).map_err(|e| eyre::eyre!("{:?}", e))?; Ok(()) }