diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 5e841f3b..81c01a9b 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,81 +1,94 @@ +--- version: 2 -updates: - - package-ecosystem: "npm" - directory: "/web" + +multi-ecosystem-groups: + backend: + schedule: + interval: "monthly" + frontend: + schedule: + interval: "monthly" + infra: schedule: interval: "monthly" - ignore: - - dependency-name: "bootstrap" - versions: ["5.2.x"] - - dependency-name: "postcss" - groups: - frontend: - patterns: - - "*" - update-types: - - "minor" - - "patch" +updates: - package-ecosystem: "cargo" directory: "/" - schedule: - interval: "monthly" ignore: - dependency-name: "octorust" - dependency-name: "resvg" - dependency-name: "tiny-skia" - dependency-name: "usvg" - groups: - backend: - patterns: - - "*" - update-types: - - "minor" - - "patch" - - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "monthly" - groups: - github-actions: - patterns: - - "*" + multi-ecosystem-group: "backend" + patterns: + - "*" - package-ecosystem: "docker" directory: "/clomonitor-apiserver" - schedule: - interval: "monthly" ignore: - dependency-name: "node" - versions: ["19-alpine3.19", "20-alpine3.19", "21-alpine3.19", "22-alpine3.19", "22-alpine3.20", "23-alpine3.21"] + versions: + [ + "19-alpine3.19", + "20-alpine3.19", + "21-alpine3.19", + "22-alpine3.19", + "22-alpine3.20", + "23-alpine3.21", + ] + multi-ecosystem-group: "infra" + patterns: + - "*" - package-ecosystem: "docker" directory: "/clomonitor-archiver" - schedule: - interval: "monthly" + multi-ecosystem-group: "infra" + patterns: + - "*" - package-ecosystem: "docker" directory: "/clomonitor-linter" - schedule: - interval: "monthly" + multi-ecosystem-group: "infra" + patterns: + - "*" - package-ecosystem: "docker" directory: "/clomonitor-notifier" - schedule: - interval: "monthly" + multi-ecosystem-group: "infra" + patterns: + - "*" - package-ecosystem: "docker" directory: "/clomonitor-registrar" - schedule: - interval: "monthly" + multi-ecosystem-group: "infra" + patterns: + - "*" - package-ecosystem: "docker" directory: "/clomonitor-tracker" - schedule: - interval: "monthly" + multi-ecosystem-group: "infra" + patterns: + - "*" - package-ecosystem: "docker" directory: "/database/migrations" - schedule: - interval: "monthly" + multi-ecosystem-group: "infra" + patterns: + - "*" + + - package-ecosystem: "github-actions" + directory: "/" + multi-ecosystem-group: "infra" + patterns: + - "*" + + - package-ecosystem: "npm" + directory: "/web" + ignore: + - dependency-name: "bootstrap" + versions: ["5.2.x"] + - dependency-name: "postcss" + multi-ecosystem-group: "frontend" + patterns: + - "*" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 25192c5d..d7375552 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ jobs: - name: Setup Rust uses: dtolnay/rust-toolchain@master with: - toolchain: 1.90.0 + toolchain: 1.93.1 components: clippy, rustfmt - name: Run clippy run: cargo clippy --all-targets --all-features -- --deny warnings @@ -56,7 +56,7 @@ jobs: - name: Setup Rust uses: dtolnay/rust-toolchain@master with: - toolchain: 1.90.0 + toolchain: 1.93.1 - name: Run backend tests run: cargo test diff --git a/Cargo.lock b/Cargo.lock index 23bee845..eb7fa79d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -94,9 +94,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "arraydeque" @@ -141,6 +141,58 @@ dependencies = [ "zstd", ] +[[package]] +name = "askama" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08e1676b346cadfec169374f949d7490fd80a24193d37d2afce0c047cf695e57" +dependencies = [ + "askama_macros", + "itoa", + "percent-encoding", + "serde", + "serde_json", +] + +[[package]] +name = "askama_derive" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7661ff56517787343f376f75db037426facd7c8d3049cef8911f1e75016f3a37" +dependencies = [ + "askama_parser", + "basic-toml", + "memchr", + "proc-macro2", + "quote", + "rustc-hash", + "serde", + "serde_derive", + "syn 2.0.90", +] + +[[package]] +name = "askama_macros" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "713ee4dbfd1eb719c2dab859465b01fa1d21cb566684614a713a6b7a99a4e47b" +dependencies = [ + "askama_derive", +] + +[[package]] +name = "askama_parser" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d62d674238a526418b30c0def480d5beadb9d8964e7f38d635b03bf639c704c" +dependencies = [ + "rustc-hash", + "serde", + "serde_derive", + "unicode-ident", + "winnow", +] + [[package]] name = "assert-json-diff" version = "2.0.2" @@ -187,46 +239,41 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "aws-lc-rs" -version = "1.8.1" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae74d9bd0a7530e8afd1770739ad34b36838829d6ad61818f9230f683f5ad77" +checksum = "94bffc006df10ac2a68c83692d734a465f8ee6c5b384d8545a636f81d858f4bf" dependencies = [ "aws-lc-sys", - "mirai-annotations", - "paste", "zeroize", ] [[package]] name = "aws-lc-sys" -version = "0.20.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e89b6941c2d1a7045538884d6e760ccfffdf8e1ffc2613d8efa74305e1f3752" +checksum = "4321e568ed89bb5a7d291a7f37997c2c0df89809d7b6d12062c81ddb54aa782e" dependencies = [ - "bindgen", "cc", "cmake", "dunce", "fs_extra", - "libc", - "paste", ] [[package]] name = "axum" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" +checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" dependencies = [ "axum-core", "axum-macros", "bytes", "form_urlencoded", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.0", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-util", "itoa", "matchit", @@ -254,7 +301,7 @@ checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.0", "http-body-util", "mime", @@ -323,29 +370,6 @@ dependencies = [ "virtue", ] -[[package]] -name = "bindgen" -version = "0.69.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" -dependencies = [ - "bitflags 2.9.4", - "cexpr", - "clang-sys", - "itertools", - "lazy_static", - "lazycell", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash 1.1.0", - "shlex", - "syn 2.0.90", - "which 4.4.2", -] - [[package]] name = "bitflags" version = "1.3.2" @@ -354,11 +378,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -442,22 +466,21 @@ checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" [[package]] name = "cc" -version = "1.0.83" +version = "1.2.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ + "find-msvc-tools", "jobserver", "libc", + "shlex", ] [[package]] -name = "cexpr" -version = "0.6.0" +name = "cesu8" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfg-if" @@ -465,6 +488,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.24" @@ -478,22 +507,11 @@ dependencies = [ "winapi", ] -[[package]] -name = "clang-sys" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" -dependencies = [ - "glob", - "libc", - "libloading", -] - [[package]] name = "clap" -version = "4.5.49" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" +checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" dependencies = [ "clap_builder", "clap_derive", @@ -501,9 +519,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.49" +version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" +checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" dependencies = [ "anstream", "anstyle", @@ -513,11 +531,11 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn 2.0.90", @@ -525,15 +543,16 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.4" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" [[package]] name = "clomonitor-apiserver" version = "1.0.0" dependencies = [ "anyhow", + "askama", "async-trait", "axum", "clap", @@ -541,7 +560,7 @@ dependencies = [ "config", "deadpool-postgres", "futures", - "hyper 1.7.0", + "hyper 1.8.1", "metrics", "metrics-exporter-prometheus", "mime", @@ -550,7 +569,6 @@ dependencies = [ "postgres-openssl", "regex", "resvg", - "rinja", "serde", "serde_json", "serde_qs", @@ -601,18 +619,18 @@ dependencies = [ "git2", "glob", "graphql_client", - "http 1.3.1", + "http 1.4.0", "mockall", "postgres-types", "regex", - "reqwest 0.12.24", + "reqwest 0.13.2", "serde", "serde_json", "serde_yaml", "time", "tokio", "tracing", - "which 8.0.0", + "which", "wiremock", ] @@ -634,10 +652,11 @@ name = "clomonitor-notifier" version = "1.0.0" dependencies = [ "anyhow", + "askama", "async-trait", "clap", "config", - "deadpool", + "deadpool 0.13.0", "deadpool-postgres", "futures", "mockall", @@ -645,7 +664,6 @@ dependencies = [ "openssl", "postgres-openssl", "regex", - "rinja", "tokio", "tokio-postgres", "tracing", @@ -665,12 +683,12 @@ dependencies = [ "deadpool-postgres", "futures", "hex", - "http 1.3.1", + "http 1.4.0", "mockall", "mockito", "openssl", "postgres-openssl", - "reqwest 0.12.24", + "reqwest 0.13.2", "serde", "serde_json", "serde_yaml", @@ -690,7 +708,7 @@ dependencies = [ "clap", "clomonitor-core", "config", - "deadpool", + "deadpool 0.13.0", "deadpool-postgres", "futures", "mockall", @@ -706,14 +724,14 @@ dependencies = [ "tracing", "tracing-subscriber", "uuid", - "which 8.0.0", + "which", ] [[package]] name = "cmake" -version = "0.1.50" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" dependencies = [ "cc", ] @@ -754,11 +772,21 @@ dependencies = [ "unreachable", ] +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + [[package]] name = "comfy-table" -version = "7.2.1" +version = "7.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03b7db8e0b4b2fdad6c551e634134e99ec000e5c8c3b6856c65e8bbaded7a3b" +checksum = "958c5d6ecf1f214b4c2bbbbf6ab9523a864bd136dcf71a7e8904799acfe1ad47" dependencies = [ "crossterm", "unicode-segmentation", @@ -767,9 +795,9 @@ dependencies = [ [[package]] name = "config" -version = "0.15.18" +version = "0.15.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e549344080374f9b32ed41bf3b6b57885ff6a289367b3dbc10eea8acc1918" +checksum = "b30fa8254caad766fc03cb0ccae691e14bf3bd72bfff27f72802ce729551b3d6" dependencies = [ "async-trait", "convert_case", @@ -824,11 +852,21 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" @@ -896,11 +934,11 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", "crossterm_winapi", "document-features", "parking_lot", - "rustix 1.0.7", + "rustix 1.1.4", "winapi", ] @@ -976,13 +1014,24 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" dependencies = [ - "deadpool-runtime", + "deadpool-runtime 0.1.3", "lazy_static", "num_cpus", "serde", "tokio", ] +[[package]] +name = "deadpool" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "883466cb8db62725aee5f4a6011e8a5d42912b42632df32aad57fc91127c6e04" +dependencies = [ + "deadpool-runtime 0.3.1", + "num_cpus", + "tokio", +] + [[package]] name = "deadpool-postgres" version = "0.14.1" @@ -990,7 +1039,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d697d376cbfa018c23eb4caab1fd1883dd9c906a8c034e8d9a3cb06a7e0bef9" dependencies = [ "async-trait", - "deadpool", + "deadpool 0.12.3", "getrandom 0.2.10", "serde", "tokio", @@ -1007,6 +1056,12 @@ dependencies = [ "tokio", ] +[[package]] +name = "deadpool-runtime" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2657f61fb1dd8bf37a8d51093cc7cee4e77125b22f7753f49b289f831bec2bae" + [[package]] name = "deranged" version = "0.5.3" @@ -1071,9 +1126,9 @@ checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" @@ -1140,6 +1195,12 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + [[package]] name = "flate2" version = "1.0.26" @@ -1236,9 +1297,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -1251,9 +1312,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -1261,15 +1322,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -1278,15 +1339,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", @@ -1295,21 +1356,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -1319,7 +1380,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -1353,8 +1413,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.13.3+wasi-0.2.2", + "wasm-bindgen", "windows-targets 0.52.6", ] @@ -1370,15 +1432,15 @@ dependencies = [ [[package]] name = "git2" -version = "0.20.2" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" +checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", "libc", "libgit2-sys", "log", - "openssl-probe", + "openssl-probe 0.1.5", "openssl-sys", "url", ] @@ -1408,16 +1470,16 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", "ignore", "walkdir", ] [[package]] name = "graphql-introspection-query" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2a4732cf5140bd6c082434494f785a19cfb566ab07d1382c3671f5812fed6d" +checksum = "e063446242093b0acecc78a2313801e6c4faafa3501277b409a2b1972eff5d85" dependencies = [ "serde", ] @@ -1428,48 +1490,47 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2ebc8013b4426d5b81a4364c419a95ed0b404af2b82e2457de52d9348f0e474" dependencies = [ - "combine", + "combine 3.8.1", "thiserror 1.0.57", ] [[package]] name = "graphql_client" -version = "0.14.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a50cfdc7f34b7f01909d55c2dcb71d4c13cbcbb4a1605d6c8bd760d654c1144b" +checksum = "b0f04840854efa7b06377d86fab117f598f5f5c95727067463417ccaf8aa7635" dependencies = [ "graphql_query_derive", - "reqwest 0.11.24", + "reqwest 0.12.28", "serde", "serde_json", ] [[package]] name = "graphql_client_codegen" -version = "0.14.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e27ed0c2cf0c0cc52c6bcf3b45c907f433015e580879d14005386251842fb0a" +checksum = "aa0141e66c8d0302f8a586df12ad5d0cf87c0fa8c391f2f5b5dc296312dce569" dependencies = [ "graphql-introspection-query", "graphql-parser", - "heck 0.4.1", - "lazy_static", + "heck", "proc-macro2", "quote", "serde", "serde_json", - "syn 1.0.109", + "syn 2.0.90", ] [[package]] name = "graphql_query_derive" -version = "0.14.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83febfa838f898cfa73dfaa7a8eb69ff3409021ac06ee94cfb3d622f6eeb1a97" +checksum = "e16ecf9bb87a6760cf5227f66cbe48bad7b89505aeb002aa9439ea090e6038a3" dependencies = [ "graphql_client_codegen", "proc-macro2", - "syn 1.0.109", + "syn 2.0.90", ] [[package]] @@ -1502,7 +1563,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http 1.3.1", + "http 1.4.0", "indexmap", "slab", "tokio", @@ -1536,12 +1597,6 @@ dependencies = [ "hashbrown 0.15.2", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -1569,15 +1624,6 @@ dependencies = [ "digest", ] -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "http" version = "0.2.11" @@ -1591,12 +1637,11 @@ dependencies = [ [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -1618,18 +1663,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" dependencies = [ "bytes", - "http 1.3.1", + "http 1.4.0", ] [[package]] name = "http-body-util" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", - "futures-util", - "http 1.3.1", + "futures-core", + "http 1.4.0", "http-body 1.0.0", "pin-project-lite", ] @@ -1678,16 +1723,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", "h2 0.4.2", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.0", "httparse", "httpdate", @@ -1720,30 +1765,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" dependencies = [ "futures-util", - "http 1.3.1", - "hyper 1.7.0", + "http 1.4.0", + "hyper 1.8.1", "hyper-util", - "rustls 0.23.10", - "rustls-native-certs", + "rustls 0.23.37", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", "tower-service", ] -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper 0.14.28", - "native-tls", - "tokio", - "tokio-native-tls", -] - [[package]] name = "hyper-tls" version = "0.6.0" @@ -1752,7 +1783,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-util", "native-tls", "tokio", @@ -1771,9 +1802,9 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.0", - "hyper 1.7.0", + "hyper 1.8.1", "ipnet", "libc", "percent-encoding", @@ -2015,25 +2046,38 @@ dependencies = [ ] [[package]] -name = "itertools" -version = "0.12.1" +name = "itoa" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] +name = "jni" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" dependencies = [ - "either", + "cesu8", + "cfg-if", + "combine 4.6.7", + "jni-sys", + "log", + "thiserror 1.0.57", + "walkdir", + "windows-sys 0.45.0", ] [[package]] -name = "itoa" -version = "1.0.14" +name = "jni-sys" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.28" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] @@ -2046,9 +2090,9 @@ checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ "once_cell", "wasm-bindgen", @@ -2094,23 +2138,17 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "libc" -version = "0.2.172" +version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "libgit2-sys" -version = "0.18.1+1.9.0" +version = "0.18.3+1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1dcb20f84ffcdd825c7a311ae347cce604a6f084a767dec4a4929829645290e" +checksum = "c9b3acc4b91781bb0b3386669d325163746af5f6e4f73e6d2d630e09a35f3487" dependencies = [ "cc", "libc", @@ -2121,13 +2159,12 @@ dependencies = [ ] [[package]] -name = "libloading" -version = "0.8.5" +name = "libredox" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" dependencies = [ - "cfg-if", - "windows-targets 0.52.6", + "libc", ] [[package]] @@ -2164,9 +2201,9 @@ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "linux-raw-sys" -version = "0.9.3" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" @@ -2199,6 +2236,12 @@ dependencies = [ "serde", ] +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "matchers" version = "0.2.0" @@ -2249,9 +2292,9 @@ dependencies = [ [[package]] name = "metrics" -version = "0.24.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dea7ac8057892855ec285c440160265225438c3c45072613c25a4b26e98ef5" +checksum = "5d5312e9ba3771cfa961b585728215e3d972c950a3eed9252aa093d6301277e8" dependencies = [ "ahash", "portable-atomic", @@ -2259,14 +2302,13 @@ dependencies = [ [[package]] name = "metrics-exporter-prometheus" -version = "0.17.2" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b166dea96003ee2531cf14833efedced545751d800f03535801d833313f8c15" +checksum = "3589659543c04c7dc5526ec858591015b87cd8746583b51b48ef4353f99dbcda" dependencies = [ "base64 0.22.1", "http-body-util", - "hyper 1.7.0", - "hyper-rustls 0.27.2", + "hyper 1.8.1", "hyper-util", "indexmap", "ipnet", @@ -2310,12 +2352,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.5.4" @@ -2346,17 +2382,11 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "mirai-annotations" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" - [[package]] name = "mockall" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39a6bfcc6c8c7eed5ee98b9c3e33adc726054389233e201c95dab2d41a3839d2" +checksum = "f58d964098a5f9c6b63d0798e5372fd04708193510a7af313c22e9f29b7b620b" dependencies = [ "cfg-if", "downcast", @@ -2368,9 +2398,9 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ca3004c2efe9011bd4e461bd8256445052b9615405b4f7ea43fc8ca5c20898" +checksum = "ca41ce716dda6a9be188b385aa78ee5260fc25cd3802cb2a8afdc6afbe6b6dbf" dependencies = [ "cfg-if", "proc-macro2", @@ -2380,20 +2410,21 @@ dependencies = [ [[package]] name = "mockito" -version = "1.7.0" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7760e0e418d9b7e5777c0374009ca4c93861b9066f18cb334a20ce50ab63aa48" +checksum = "90820618712cab19cfc46b274c6c22546a82affcb3c3bdf0f29e3db8e1bb92c0" dependencies = [ "assert-json-diff", "bytes", "colored", - "futures-util", - "http 1.3.1", + "futures-core", + "http 1.4.0", "http-body 1.0.0", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-util", "log", + "pin-project-lite", "rand 0.9.0", "regex", "serde_json", @@ -2412,24 +2443,14 @@ dependencies = [ "libc", "log", "openssl", - "openssl-probe", + "openssl-probe 0.1.5", "openssl-sys", "schannel", - "security-framework", + "security-framework 2.9.2", "security-framework-sys", "tempfile", ] -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "normalize-line-endings" version = "0.3.0" @@ -2458,9 +2479,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-integer" @@ -2491,6 +2512,24 @@ dependencies = [ "libc", ] +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.11.0", +] + +[[package]] +name = "objc2-system-configuration" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396" +dependencies = [ + "objc2-core-foundation", +] + [[package]] name = "octorust" version = "0.3.2" @@ -2523,17 +2562,17 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl" -version = "0.10.74" +version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", "cfg-if", "foreign-types", "libc", @@ -2559,6 +2598,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + [[package]] name = "openssl-src" version = "300.3.1+3.3.1" @@ -2570,9 +2615,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.110" +version = "0.9.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ "cc", "libc", @@ -2802,7 +2847,7 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56df96f5394370d1b20e49de146f9e6c25aa9ae750f449c9d665eafecb3ccae6" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn 2.0.90", @@ -2840,9 +2885,9 @@ dependencies = [ [[package]] name = "postgres-types" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4605b7c057056dd35baeb6ac0c0338e4975b1f2bef0f65da953285eb007095" +checksum = "54b858f82211e84682fecd373f68e1ceae642d8d751a1ebd13f33de6257b3e20" dependencies = [ "bytes", "fallible-iterator", @@ -2868,9 +2913,9 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "predicates" -version = "3.1.3" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" dependencies = [ "anstyle", "difflib", @@ -2896,16 +2941,6 @@ dependencies = [ "termtree", ] -[[package]] -name = "prettyplease" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3928fb5db768cb86f891ff014f0144589297e3c6a1aba6ed7cecfdace270c7" -dependencies = [ - "proc-macro2", - "syn 2.0.90", -] - [[package]] name = "proc-macro2" version = "1.0.92" @@ -2931,30 +2966,86 @@ dependencies = [ ] [[package]] -name = "quote" -version = "1.0.35" +name = "quinn" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ - "proc-macro2", + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.37", + "socket2 0.6.0", + "thiserror 2.0.12", + "tokio", + "tracing", + "web-time", ] [[package]] -name = "rand" -version = "0.8.5" +name = "quinn-proto" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" + "aws-lc-rs", + "bytes", + "getrandom 0.3.1", + "lru-slab", + "rand 0.9.0", + "ring 0.17.8", + "rustc-hash", + "rustls 0.23.37", + "rustls-pki-types", + "slab", + "thiserror 2.0.12", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.6.0", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.2", @@ -3015,7 +3106,7 @@ version = "11.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d86a7c4638d42c44551f4791a20e687dbb4c3de1f33c43dd71e355cd429def1" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", ] [[package]] @@ -3059,9 +3150,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -3102,25 +3193,22 @@ dependencies = [ "http-body 0.4.6", "hyper 0.14.28", "hyper-rustls 0.24.2", - "hyper-tls 0.5.0", "ipnet", "js-sys", "log", "mime", "mime_guess", - "native-tls", "once_cell", "percent-encoding", "pin-project-lite", "rustls 0.21.11", - "rustls-pemfile 1.0.4", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "sync_wrapper 0.1.2", "system-configuration 0.5.1", "tokio", - "tokio-native-tls", "tokio-rustls 0.24.1", "tower-service", "url", @@ -3133,35 +3221,71 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.24" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "http 1.4.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.8.1", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "tokio", + "tokio-native-tls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "reqwest" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "h2 0.4.2", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.0", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-rustls 0.27.2", - "hyper-tls 0.6.0", "hyper-util", "js-sys", "log", "mime", - "native-tls", "percent-encoding", "pin-project-lite", + "quinn", + "rustls 0.23.37", "rustls-pki-types", + "rustls-platform-verifier", "serde", "serde_json", - "serde_urlencoded", "sync_wrapper 1.0.1", "tokio", - "tokio-native-tls", + "tokio-rustls 0.26.0", "tower", "tower-http", "tower-service", @@ -3303,43 +3427,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rinja" -version = "0.3.5" -source = "git+https://github.com/rinja-rs/rinja?rev=535df5e#535df5ee7646dbc4b4bb04c11638e845459854ea" -dependencies = [ - "itoa", - "percent-encoding", - "rinja_derive", - "serde", - "serde_json", -] - -[[package]] -name = "rinja_derive" -version = "0.3.5" -source = "git+https://github.com/rinja-rs/rinja?rev=535df5e#535df5ee7646dbc4b4bb04c11638e845459854ea" -dependencies = [ - "basic-toml", - "memchr", - "proc-macro2", - "quote", - "rinja_parser", - "rustc-hash 2.1.1", - "serde", - "syn 2.0.90", -] - -[[package]] -name = "rinja_parser" -version = "0.3.5" -source = "git+https://github.com/rinja-rs/rinja?rev=535df5e#535df5ee7646dbc4b4bb04c11638e845459854ea" -dependencies = [ - "memchr", - "serde", - "winnow", -] - [[package]] name = "rmp" version = "0.8.14" @@ -3364,14 +3451,16 @@ dependencies = [ [[package]] name = "ron" -version = "0.8.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +checksum = "fd490c5b18261893f14449cbd28cb9c0b637aebf161cd77900bfdedaff21ec32" dependencies = [ - "base64 0.21.7", - "bitflags 2.9.4", + "bitflags 2.11.0", + "once_cell", "serde", "serde_derive", + "typeid", + "unicode-ident", ] [[package]] @@ -3402,12 +3491,6 @@ dependencies = [ "ordered-multimap", ] -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hash" version = "2.1.1" @@ -3420,7 +3503,7 @@ version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys 0.4.14", @@ -3429,15 +3512,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", "errno", "libc", - "linux-raw-sys 0.9.3", - "windows-sys 0.59.0", + "linux-raw-sys 0.12.1", + "windows-sys 0.61.2", ] [[package]] @@ -3454,29 +3537,28 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.10" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "aws-lc-rs", "once_cell", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.103.9", "subtle", "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.7.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ - "openssl-probe", - "rustls-pemfile 2.1.2", + "openssl-probe 0.2.1", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 3.7.0", ] [[package]] @@ -3489,24 +3571,42 @@ dependencies = [ ] [[package]] -name = "rustls-pemfile" -version = "2.1.2" +name = "rustls-pki-types" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ - "base64 0.22.1", - "rustls-pki-types", + "web-time", + "zeroize", ] [[package]] -name = "rustls-pki-types" -version = "1.12.0" +name = "rustls-platform-verifier" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" dependencies = [ - "zeroize", + "core-foundation 0.10.1", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls 0.23.37", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki 0.103.9", + "security-framework 3.7.0", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", ] +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.101.7" @@ -3519,9 +3619,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.4" +version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ "aws-lc-rs", "ring 0.17.8", @@ -3553,9 +3653,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.16" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "same-file" @@ -3626,7 +3726,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags 2.11.0", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -3634,9 +3747,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -3697,15 +3810,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -3720,13 +3833,14 @@ dependencies = [ [[package]] name = "serde_qs" -version = "0.15.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3faaf9e727533a19351a43cc5a8de957372163c7d35cc48c90b75cdda13c352" +checksum = "ac22439301a0b6f45a037681518e3169e8db1db76080e2e9600a08d1027df037" dependencies = [ + "itoa", "percent-encoding", + "ryu", "serde", - "thiserror 2.0.12", ] [[package]] @@ -4007,7 +4121,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys 0.5.0", ] @@ -4017,8 +4131,8 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.4", - "core-foundation", + "bitflags 2.11.0", + "core-foundation 0.9.4", "system-configuration-sys 0.6.0", ] @@ -4053,22 +4167,22 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.23.0" +version = "3.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" dependencies = [ "fastrand", "getrandom 0.3.1", "once_cell", - "rustix 1.0.7", - "windows-sys 0.59.0", + "rustix 1.1.4", + "windows-sys 0.61.2", ] [[package]] name = "tera" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee" +checksum = "e8004bca281f2d32df3bacd59bc67b312cb4c70cea46cbd79dbe8ac5ed206722" dependencies = [ "globwalk", "lazy_static", @@ -4077,7 +4191,7 @@ dependencies = [ "regex", "serde", "serde_json", - "unic-segment", + "unicode-segmentation", ] [[package]] @@ -4138,30 +4252,30 @@ dependencies = [ [[package]] name = "time" -version = "0.3.44" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -4228,9 +4342,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.48.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ "bytes", "libc", @@ -4278,9 +4392,9 @@ dependencies = [ [[package]] name = "tokio-postgres" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b40d66d9b2cfe04b628173409368e58247e8eddbbd3b0e6c6ba1d09f20f6c9e" +checksum = "dcea47c8f71744367793f16c2db1f11cb859d28f436bdb4ca9193eb1f787ee42" dependencies = [ "async-trait", "byteorder", @@ -4318,7 +4432,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.10", + "rustls 0.23.37", "rustls-pki-types", "tokio", ] @@ -4370,9 +4484,9 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", @@ -4386,16 +4500,16 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ "base64 0.22.1", - "bitflags 2.9.4", + "bitflags 2.11.0", "bytes", "futures-core", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.0", "http-body-util", "http-range-header", @@ -4427,9 +4541,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -4439,9 +4553,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -4450,9 +4564,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -4506,9 +4620,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "matchers", "nu-ansi-term", @@ -4555,56 +4669,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" -[[package]] -name = "unic-char-property" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" -dependencies = [ - "unic-char-range", -] - -[[package]] -name = "unic-char-range" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" - -[[package]] -name = "unic-common" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" - -[[package]] -name = "unic-segment" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" -dependencies = [ - "unic-ucd-segment", -] - -[[package]] -name = "unic-ucd-segment" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" -dependencies = [ - "unic-char-property", - "unic-char-range", - "unic-ucd-version", -] - -[[package]] -name = "unic-ucd-version" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" -dependencies = [ - "unic-common", -] - [[package]] name = "unicase" version = "2.7.0" @@ -4769,12 +4833,12 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.18.1" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" dependencies = [ "js-sys", - "serde", + "serde_core", "wasm-bindgen", ] @@ -4844,33 +4908,23 @@ dependencies = [ [[package]] name = "wasite" -version = "0.1.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" +checksum = "66fe902b4a6b8028a753d5424909b764ccf79b7a209eac9bf97e59cda9f71a42" +dependencies = [ + "wasi 0.13.3+wasi-0.2.2", +] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.90", "wasm-bindgen-shared", ] @@ -4888,9 +4942,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4898,31 +4952,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn 2.0.90", - "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.68" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" dependencies = [ "js-sys", "wasm-bindgen", @@ -4938,6 +4992,15 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-root-certs" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webpki-roots" version = "0.25.3" @@ -4952,34 +5015,24 @@ checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" [[package]] name = "which" -version = "4.4.2" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.42", -] - -[[package]] -name = "which" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d" +checksum = "3a824aeba0fbb27264f815ada4cff43d65b1741b7a4ed7629ff9089148c4a4e0" dependencies = [ "env_home", - "rustix 1.0.7", + "rustix 1.1.4", "winsafe", ] [[package]] name = "whoami" -version = "1.5.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +checksum = "d6a5b12f9df4f978d2cfdb1bd3bac52433f44393342d7ee9c25f5a1c14c0f45d" dependencies = [ - "redox_syscall", + "libc", + "libredox", + "objc2-system-configuration", "wasite", "web-sys", ] @@ -5065,6 +5118,15 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -5101,6 +5163,21 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -5132,6 +5209,12 @@ dependencies = [ "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -5144,6 +5227,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -5156,6 +5245,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -5174,6 +5269,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -5186,6 +5287,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -5198,6 +5305,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -5210,6 +5323,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -5255,11 +5374,11 @@ checksum = "08db1edfb05d9b3c1542e521aea074442088292f00b5f28e435c714a98f85031" dependencies = [ "assert-json-diff", "base64 0.22.1", - "deadpool", + "deadpool 0.12.3", "futures", - "http 1.3.1", + "http 1.4.0", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-util", "log", "once_cell", @@ -5276,7 +5395,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", ] [[package]] @@ -5404,20 +5523,6 @@ name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.90", -] [[package]] name = "zerovec" @@ -5441,6 +5546,12 @@ dependencies = [ "syn 2.0.90", ] +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + [[package]] name = "zstd" version = "0.13.2" diff --git a/Cargo.toml b/Cargo.toml index 83c00ce9..bbf2734c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,79 +14,79 @@ members = [ version = "1.0.0" license = "Apache-2.0" edition = "2024" -rust-version = "1.90.0" +rust-version = "1.93.1" [workspace.dependencies] -anyhow = "1.0.100" +anyhow = "1.0.102" askalono = "0.5.0" +askama = { version = "0.15.4", features = ["serde_json"] } async-trait = "0.1.89" -axum = { version = "0.8.6", features = ["macros"] } -bincode = { version = "2.0.1", features = ["serde"] } +axum = { version = "0.8.8", features = ["macros"] } +bincode = { version = "2.0.1", features = ["serde"] } # do-not-upgrade cached = { version = "0.56.0", features = ["async"] } -clap = { version = "4.5.49", features = ["derive"] } +clap = { version = "4.5.60", features = ["derive"] } clomonitor-core = { path = "../clomonitor-core" } -comfy-table = "7.2.1" -config = "0.15.18" -deadpool = "0.12.3" +comfy-table = "7.2.2" +config = "0.15.19" +deadpool = "0.13.0" deadpool-postgres = { version = "0.14.1", features = ["serde"] } -futures = "0.3.31" -git2 = "0.20.2" +futures = "0.3.32" +git2 = "0.20.4" glob = "0.3.3" -graphql_client = { version = "0.14.0", features = ["reqwest"] } +graphql_client = { version = "0.16.0", features = ["reqwest"] } hex = "0.4.3" -http = "1.3.1" -hyper = "1.7.0" -metrics = "0.24.2" -metrics-exporter-prometheus = "0.17.2" +http = "1.4.0" +hyper = "1.8.1" +metrics = "0.24.3" +metrics-exporter-prometheus = { version = "0.18.1", default-features = false, features = ["http-listener"] } mime = "0.3.17" -mockall = "0.13.1" -mockito = "1.7.0" +mockall = "0.14.0" +mockito = "1.7.2" octorust = "0.3.2" # do-not-upgrade -openssl = { version = "0.10.74", features = ["vendored"] } +openssl = { version = "0.10.75", features = ["vendored"] } postgres-openssl = "0.5.2" -postgres-types = { version = "0.2.11", features = ["derive"] } -predicates = "3.1.3" -regex = "1.12.2" -reqwest = { version = "0.12.24", features = ["json"] } +postgres-types = { version = "0.2.12", features = ["derive"] } +predicates = "3.1.4" +regex = "1.12.3" +reqwest = { version = "0.13.2", features = ["json"] } resvg = "0.27.0" # do-not-upgrade -rinja = { git = "https://github.com/rinja-rs/rinja", rev = "535df5e", features = ["serde_json"] } serde = { version = "1.0.228", features = ["derive"] } -serde_json = "1.0.145" +serde_json = "1.0.149" serde_yaml = "0.9.34" -serde_qs = "0.15.0" +serde_qs = "1.0.0" sha2 = "0.10.9" -tempfile = "3.23.0" -tera = { version = "1.20.0", default-features = false } -thiserror = "2.0.17" -time = { version = "0.3.44", features = [ +tempfile = "3.26.0" +tera = { version = "1.20.1", default-features = false } +thiserror = "2.0.18" +time = { version = "0.3.47", features = [ "formatting", "macros", "parsing", "serde", ] } tiny-skia = "0.8.4" # do-not-upgrade -tokio = { version = "1.48.0", features = [ +tokio = { version = "1.50.0", features = [ "macros", "process", "rt-multi-thread", "signal", "time", ] } -tokio-postgres = { version = "0.7.15", features = [ +tokio-postgres = { version = "0.7.16", features = [ "with-time-0_3", "with-serde_json-1", "with-uuid-1", ] } -tower = { version = "0.5.1", features = ["util"] } -tower-http = { version = "0.6.6", features = [ +tower = { version = "0.5.3", features = ["util"] } +tower-http = { version = "0.6.8", features = [ "auth", "fs", "set-header", "trace", ] } -tracing = "0.1.41" -tracing-subscriber = { version = "0.3.20", features = ["env-filter", "json"] } +tracing = "0.1.44" +tracing-subscriber = { version = "0.3.22", features = ["env-filter", "json"] } usvg = "0.27.0" # do-not-upgrade -uuid = { version = "1.18.1", features = ["serde"] } -which = "8.0.0" +uuid = { version = "1.22.0", features = ["serde"] } +which = "8.0.1" wiremock = "0.6.5" diff --git a/clomonitor-apiserver/Cargo.toml b/clomonitor-apiserver/Cargo.toml index 96ffe904..91d9e38e 100644 --- a/clomonitor-apiserver/Cargo.toml +++ b/clomonitor-apiserver/Cargo.toml @@ -8,6 +8,7 @@ rust-version.workspace = true [dependencies] anyhow = { workspace = true } +askama = { workspace = true } async-trait = { workspace = true } axum = { workspace = true } clap = { workspace = true } @@ -22,7 +23,6 @@ openssl = { workspace = true } postgres-openssl = { workspace = true } regex = { workspace = true } resvg = { workspace = true } -rinja = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } serde_qs = { workspace = true } diff --git a/clomonitor-apiserver/Dockerfile b/clomonitor-apiserver/Dockerfile index 2148e638..e00ce938 100644 --- a/clomonitor-apiserver/Dockerfile +++ b/clomonitor-apiserver/Dockerfile @@ -1,5 +1,5 @@ # Build apiserver -FROM rust:1-alpine3.22 as builder +FROM rust:1-alpine3.23 as builder RUN apk --no-cache add musl-dev perl make WORKDIR /clomonitor COPY Cargo.* ./ @@ -14,7 +14,7 @@ WORKDIR /clomonitor/clomonitor-apiserver RUN cargo build --release # Build frontend -FROM node:24-alpine3.22 AS frontend-builder +FROM node:24-alpine3.23 AS frontend-builder RUN apk --no-cache add git WORKDIR /web COPY web . @@ -32,7 +32,7 @@ WORKDIR /docs/www RUN hugo # Final stage -FROM alpine:3.22.2 +FROM alpine:3.23.3 RUN apk --no-cache add ca-certificates ttf-opensans && addgroup -S clomonitor && adduser -S clomonitor -G clomonitor USER clomonitor WORKDIR /home/clomonitor diff --git a/clomonitor-apiserver/rinja.toml b/clomonitor-apiserver/askama.toml similarity index 51% rename from clomonitor-apiserver/rinja.toml rename to clomonitor-apiserver/askama.toml index 55959279..39ea1c38 100644 --- a/clomonitor-apiserver/rinja.toml +++ b/clomonitor-apiserver/askama.toml @@ -1,3 +1,3 @@ [[escaper]] -path = "rinja::filters::Html" +path = "askama::filters::Html" extensions = ["svg"] diff --git a/clomonitor-apiserver/src/filters.rs b/clomonitor-apiserver/src/filters.rs index 4635925b..0795dc6a 100644 --- a/clomonitor-apiserver/src/filters.rs +++ b/clomonitor-apiserver/src/filters.rs @@ -1,14 +1,24 @@ +#![allow( + clippy::cast_possible_truncation, + clippy::cast_sign_loss, + clippy::inline_always, + clippy::ref_option, + clippy::trivially_copy_pass_by_ref, + clippy::unnecessary_wraps, + clippy::unused_self +)] + /// Template filter that returns the rating letter corresponding to the score /// value provided. -#[allow(clippy::unnecessary_wraps, clippy::trivially_copy_pass_by_ref)] -pub(crate) fn rating(score: &f64) -> rinja::Result { +#[askama::filter_fn] +pub(crate) fn rating(score: &f64, _: &dyn askama::Values) -> askama::Result { Ok(clomonitor_core::score::rating(*score)) } /// Template filter that returns the rating letter corresponding to the score /// value provided. -#[allow(clippy::unnecessary_wraps, clippy::ref_option)] -pub(crate) fn rating_opt(score: &Option) -> rinja::Result { +#[askama::filter_fn] +pub(crate) fn rating_opt(score: &Option, _: &dyn askama::Values) -> askama::Result { Ok(match score { Some(v) => clomonitor_core::score::rating(*v).to_string(), None => "na".to_string(), @@ -17,19 +27,17 @@ pub(crate) fn rating_opt(score: &Option) -> rinja::Result { /// Template filter that rounds the f64 value provided and returns its integer /// part. -#[allow( - clippy::unnecessary_wraps, - clippy::trivially_copy_pass_by_ref, - clippy::cast_possible_truncation, - clippy::cast_sign_loss -)] -pub(crate) fn round(v: &f64) -> rinja::Result { +#[askama::filter_fn] +pub(crate) fn round(v: &f64, _: &dyn askama::Values) -> askama::Result { Ok(v.round() as usize) } /// Template filter that returns the width of the section score bar. -#[allow(clippy::unnecessary_wraps, clippy::ref_option)] -pub(crate) fn rs_section_score_width(score: &Option) -> rinja::Result { +#[askama::filter_fn] +pub(crate) fn rs_section_score_width( + score: &Option, + _: &dyn askama::Values, +) -> askama::Result { Ok(match score { Some(v) => { let width = (v * 1.06).round(); @@ -40,20 +48,15 @@ pub(crate) fn rs_section_score_width(score: &Option) -> rinja::Result } /// Template filter that return the stroke-dasharray for the global score. -#[allow(clippy::unnecessary_wraps, clippy::trivially_copy_pass_by_ref)] -pub(crate) fn stroke(v: &f64) -> rinja::Result { +#[askama::filter_fn] +pub(crate) fn stroke(v: &f64, _: &dyn askama::Values) -> askama::Result { Ok(251.42 + (251.42 * v / 100.0)) } /// Template filter that returns the integer part of the rounded score value /// provided as a string. "n/a" is returned when the value is none. -#[allow( - clippy::unnecessary_wraps, - clippy::ref_option, - clippy::cast_sign_loss, - clippy::cast_possible_truncation -)] -pub(crate) fn to_string(score: &Option) -> rinja::Result { +#[askama::filter_fn] +pub(crate) fn to_string(score: &Option, _: &dyn askama::Values) -> askama::Result { Ok(match score { Some(v) => (v.round() as usize).to_string(), None => "n/a".to_string(), @@ -62,48 +65,92 @@ pub(crate) fn to_string(score: &Option) -> rinja::Result { #[cfg(test)] mod tests { + use askama::NO_VALUES; + use super::*; #[test] fn rating_works() { - assert_eq!(rating(&80.0).unwrap(), 'a'); - assert_eq!(rating(&74.0).unwrap(), 'b'); + assert_eq!(rating::default().execute(&80.0, NO_VALUES).unwrap(), 'a'); + assert_eq!(rating::default().execute(&74.0, NO_VALUES).unwrap(), 'b'); } #[test] fn rating_opt_some() { - assert_eq!(rating_opt(&Some(80.0)).unwrap(), "a".to_string()); - assert_eq!(rating_opt(&Some(74.0)).unwrap(), "b".to_string()); + assert_eq!( + rating_opt::default() + .execute(&Some(80.0), NO_VALUES) + .unwrap(), + "a".to_string() + ); + assert_eq!( + rating_opt::default() + .execute(&Some(74.0), NO_VALUES) + .unwrap(), + "b".to_string() + ); } #[test] fn rating_opt_none() { - assert_eq!(rating_opt(&None).unwrap(), "na".to_string()); + assert_eq!( + rating_opt::default().execute(&None, NO_VALUES).unwrap(), + "na".to_string() + ); } #[test] fn round_works() { - assert_eq!(round(&7.9).unwrap(), 8); + assert_eq!(round::default().execute(&7.9, NO_VALUES).unwrap(), 8); } #[test] fn rs_section_score_width_some() { - assert!((rs_section_score_width(&Some(1.0)).unwrap() - 2.0).abs() < f64::EPSILON); - assert!((rs_section_score_width(&Some(80.0)).unwrap() - 85.0).abs() < f64::EPSILON); + assert!( + (rs_section_score_width::default() + .execute(&Some(1.0), NO_VALUES) + .unwrap() + - 2.0) + .abs() + < f64::EPSILON + ); + assert!( + (rs_section_score_width::default() + .execute(&Some(80.0), NO_VALUES) + .unwrap() + - 85.0) + .abs() + < f64::EPSILON + ); } #[test] fn rs_section_score_width_none() { - assert!((rs_section_score_width(&None).unwrap() - 0.0).abs() < f64::EPSILON); + assert!( + (rs_section_score_width::default() + .execute(&None, NO_VALUES) + .unwrap() + - 0.0) + .abs() + < f64::EPSILON + ); } #[test] fn to_string_some() { - assert_eq!(to_string(&Some(79.9)).unwrap(), "80".to_string()); + assert_eq!( + to_string::default() + .execute(&Some(79.9), NO_VALUES) + .unwrap(), + "80".to_string() + ); } #[test] fn to_string_none() { - assert_eq!(to_string(&None).unwrap(), "n/a".to_string()); + assert_eq!( + to_string::default().execute(&None, NO_VALUES).unwrap(), + "n/a".to_string() + ); } } diff --git a/clomonitor-apiserver/src/handlers.rs b/clomonitor-apiserver/src/handlers.rs index 9d470b62..aaf43cef 100644 --- a/clomonitor-apiserver/src/handlers.rs +++ b/clomonitor-apiserver/src/handlers.rs @@ -5,6 +5,7 @@ use std::{ }; use anyhow::Error; +use askama::Template; use axum::{ body::Body, extract::{Path, Query, RawQuery, State}, @@ -20,7 +21,6 @@ use clomonitor_core::{ }; use config::Config; use mime::{APPLICATION_JSON, CSV, HTML, PNG}; -use rinja::Template; use serde::{Deserialize, Serialize}; use serde_json::json; use tera::{Context, Tera}; diff --git a/clomonitor-apiserver/src/router.rs b/clomonitor-apiserver/src/router.rs index e1c4fc00..7ca0a59d 100644 --- a/clomonitor-apiserver/src/router.rs +++ b/clomonitor-apiserver/src/router.rs @@ -3,12 +3,18 @@ use std::{path::Path, sync::Arc}; use anyhow::Result; use axum::{ Router, + body::Body, extract::FromRef, - http::{HeaderValue, header::CACHE_CONTROL}, + http::{ + HeaderValue, Request, StatusCode, + header::{AUTHORIZATION, CACHE_CONTROL}, + }, middleware, + response::Response, routing::{get, get_service, post}, }; use config::Config; +use openssl::base64::encode_block; use tera::Tera; use tower::ServiceBuilder; use tower_http::{ @@ -114,7 +120,22 @@ pub(crate) fn setup(cfg: &Arc, db: DynDB, vt: DynVT) -> Result { if cfg.get_bool("apiserver.basicAuth.enabled").unwrap_or(false) { let username = cfg.get_string("apiserver.basicAuth.username")?; let password = cfg.get_string("apiserver.basicAuth.password")?; - router = router.layer(ValidateRequestHeaderLayer::basic(&username, &password)); + let credentials = format!( + "Basic {}", + encode_block(format!("{username}:{password}").as_bytes()) + ); + let expected_header_value = HeaderValue::try_from(credentials)?; + + router = router.layer(ValidateRequestHeaderLayer::custom( + move |request: &mut Request| match request.headers().get(AUTHORIZATION) { + Some(header_value) if header_value == expected_header_value => Ok(()), + _ => { + let mut response = Response::new(Body::default()); + *response.status_mut() = StatusCode::UNAUTHORIZED; + Err(response) + } + }, + )); } Ok(router) diff --git a/clomonitor-apiserver/templates/repository-report.md b/clomonitor-apiserver/templates/repository-report.md index 7895ad3a..1d4ab912 100644 --- a/clomonitor-apiserver/templates/repository-report.md +++ b/clomonitor-apiserver/templates/repository-report.md @@ -13,72 +13,72 @@ | Category | Score | | :------------- | ----------------------------------------------: | -| Documentation | {% call category_score(score.documentation) %} | -| License | {% call category_score(score.license) %} | -| Best Practices | {% call category_score(score.best_practices) %} | -| Security | {% call category_score(score.security) %} | -| Legal | {% call category_score(score.legal) %} | +| Documentation | {{ category_score(score.documentation) }} | +| License | {{ category_score(score.license) }} | +| Best Practices | {{ category_score(score.best_practices) }} | +| Security | {{ category_score(score.security) }} | +| Legal | {{ category_score(score.legal) }} | ## Checks {% if let Some(value) = score.documentation -%} ### Documentation [{{ value.round() }}%] - {% call check("adopters", "Adopters", report.documentation.adopters) -%} - {% call check("changelog", "Changelog", report.documentation.changelog) -%} - {% call check("code-of-conduct", "Code of conduct", report.documentation.code_of_conduct) -%} - {% call check("contributing", "Contributing", report.documentation.contributing) -%} - {% call check("governance", "Governance", report.documentation.governance) -%} - {% call check("maintainers", "Maintainers", report.documentation.maintainers) -%} - {% call check("readme", "Readme", report.documentation.readme) -%} - {% call check("roadmap", "Roadmap", report.documentation.roadmap) -%} - {% call check("summary-table", "Summary Table", report.documentation.summary_table) -%} - {% call check("website", "Website", report.documentation.website) -%} + {{ check("adopters", "Adopters", report.documentation.adopters) -}} + {{ check("changelog", "Changelog", report.documentation.changelog) -}} + {{ check("code-of-conduct", "Code of conduct", report.documentation.code_of_conduct) -}} + {{ check("contributing", "Contributing", report.documentation.contributing) -}} + {{ check("governance", "Governance", report.documentation.governance) -}} + {{ check("maintainers", "Maintainers", report.documentation.maintainers) -}} + {{ check("readme", "Readme", report.documentation.readme) -}} + {{ check("roadmap", "Roadmap", report.documentation.roadmap) -}} + {{ check("summary-table", "Summary Table", report.documentation.summary_table) -}} + {{ check("website", "Website", report.documentation.website) -}} {%- endif %} {%- if let Some(value) = score.license %} ### License [{{ value.round() }}%] - {% call license_spdx_id_check(report.license.license_spdx_id) -%} - {% call check("approved-license", "Approved license", report.license.license_approved) -%} - {% call check("license-scanning", "License scanning", report.license.license_scanning) -%} + {{ license_spdx_id_check(report.license.license_spdx_id) -}} + {{ check("approved-license", "Approved license", report.license.license_approved) -}} + {{ check("license-scanning", "License scanning", report.license.license_scanning) -}} {%- endif %} {%- if let Some(value) = score.best_practices %} ### Best Practices [{{ value.round() }}%] - {% call check("analytics", "Analytics", report.best_practices.analytics) -%} - {% call check("artifact-hub-badge", "Artifact Hub badge", report.best_practices.artifacthub_badge) -%} - {% call check("contributor-license-agreement", "Contributor License Agreement", report.best_practices.cla) -%} - {% call check("community-meeting", "Community meeting", report.best_practices.community_meeting) -%} - {% call check("developer-certificate-of-origin", "Developer Certificate of Origin", report.best_practices.dco) -%} - {% call check("github-discussions", "Github discussions", report.best_practices.github_discussions) -%} - {% call check("openssf-badge", "OpenSSF best practices badge", report.best_practices.openssf_badge) -%} - {% call check("openssf-scorecard-badge", "OpenSSF Scorecard badge", report.best_practices.openssf_scorecard_badge) -%} - {% call check("recent-release", "Recent release", report.best_practices.recent_release) -%} - {% call check("slack-presence", "Slack precense", report.best_practices.slack_presence) -%} + {{ check("analytics", "Analytics", report.best_practices.analytics) -}} + {{ check("artifact-hub-badge", "Artifact Hub badge", report.best_practices.artifacthub_badge) -}} + {{ check("contributor-license-agreement", "Contributor License Agreement", report.best_practices.cla) -}} + {{ check("community-meeting", "Community meeting", report.best_practices.community_meeting) -}} + {{ check("developer-certificate-of-origin", "Developer Certificate of Origin", report.best_practices.dco) -}} + {{ check("github-discussions", "Github discussions", report.best_practices.github_discussions) -}} + {{ check("openssf-badge", "OpenSSF best practices badge", report.best_practices.openssf_badge) -}} + {{ check("openssf-scorecard-badge", "OpenSSF Scorecard badge", report.best_practices.openssf_scorecard_badge) -}} + {{ check("recent-release", "Recent release", report.best_practices.recent_release) -}} + {{ check("slack-presence", "Slack precense", report.best_practices.slack_presence) -}} {%- endif %} {%- if let Some(value) = score.security %} ### Security [{{ value.round() }}%] - {% call check("binary-artifacts-from-openssf-scorecard", "Binary artifacts", report.security.binary_artifacts) -%} - {% call check("code-review-from-openssf-scorecard", "Code review", report.security.code_review) -%} - {% call check("dangerous-workflow-from-openssf-scorecard", "Dangerous workflow", report.security.dangerous_workflow) -%} - {% call check("dependencies-policy", "Dependencies policy", report.security.dependencies_policy) -%} - {% call check("dependency-update-tool-from-openssf-scorecard", "Dependency update tool", report.security.dependency_update_tool) -%} - {% call check("maintained-from-openssf-scorecard", "Maintained", report.security.maintained) -%} - {% call check("software-bill-of-materials-sbom", "Software bill of materials (SBOM)", report.security.sbom) -%} - {% call check("security-insights", "Security insights", report.security.security_insights) -%} - {% call check("security-policy", "Security policy", report.security.security_policy) -%} - {% call check("signed-releases-from-openssf-scorecard", "Signed releases", report.security.signed_releases) -%} - {% call check("token-permissions-from-openssf-scorecard", "Token permissions", report.security.token_permissions) -%} + {{ check("binary-artifacts-from-openssf-scorecard", "Binary artifacts", report.security.binary_artifacts) -}} + {{ check("code-review-from-openssf-scorecard", "Code review", report.security.code_review) -}} + {{ check("dangerous-workflow-from-openssf-scorecard", "Dangerous workflow", report.security.dangerous_workflow) -}} + {{ check("dependencies-policy", "Dependencies policy", report.security.dependencies_policy) -}} + {{ check("dependency-update-tool-from-openssf-scorecard", "Dependency update tool", report.security.dependency_update_tool) -}} + {{ check("maintained-from-openssf-scorecard", "Maintained", report.security.maintained) -}} + {{ check("software-bill-of-materials-sbom", "Software bill of materials (SBOM)", report.security.sbom) -}} + {{ check("security-insights", "Security insights", report.security.security_insights) -}} + {{ check("security-policy", "Security policy", report.security.security_policy) -}} + {{ check("signed-releases-from-openssf-scorecard", "Signed releases", report.security.signed_releases) -}} + {{ check("token-permissions-from-openssf-scorecard", "Token permissions", report.security.token_permissions) -}} {%- endif %} {%- if let Some(value) = score.legal %} ### Legal [{{ value.round() }}%] - {% call check("trademark-disclaimer", "Trademark disclaimer", report.legal.trademark_disclaimer) -%} + {{ check("trademark-disclaimer", "Trademark disclaimer", report.legal.trademark_disclaimer) -}} {%- endif %} For more information about the checks sets available and how each of the checks work, please see the [CLOMonitor's documentation](https://clomonitor.io/docs/topics/checks/). diff --git a/clomonitor-archiver/Dockerfile b/clomonitor-archiver/Dockerfile index 47b8a1ce..7b8697ba 100644 --- a/clomonitor-archiver/Dockerfile +++ b/clomonitor-archiver/Dockerfile @@ -1,5 +1,5 @@ # Build archiver -FROM rust:1-alpine3.22 as builder +FROM rust:1-alpine3.23 as builder RUN apk --no-cache add musl-dev perl make WORKDIR /clomonitor COPY Cargo.* ./ @@ -14,7 +14,7 @@ WORKDIR /clomonitor/clomonitor-archiver RUN cargo build --release # Final stage -FROM alpine:3.22.2 +FROM alpine:3.23.3 RUN apk --no-cache add ca-certificates git && addgroup -S clomonitor && adduser -S clomonitor -G clomonitor USER clomonitor WORKDIR /home/clomonitor diff --git a/clomonitor-core/src/linter/checks/website.rs b/clomonitor-core/src/linter/checks/website.rs index 1b283318..f874ed9d 100644 --- a/clomonitor-core/src/linter/checks/website.rs +++ b/clomonitor-core/src/linter/checks/website.rs @@ -21,7 +21,7 @@ pub(crate) fn check(input: &CheckInput) -> Result { if let Some(url) = &input.gh_md.homepage_url && !url.is_empty() { - return Ok(CheckOutput::passed().url(Some(url.to_string()))); + return Ok(CheckOutput::passed().url(Some(url.clone()))); } Ok(CheckOutput::not_passed()) diff --git a/clomonitor-linter/Dockerfile b/clomonitor-linter/Dockerfile index e1bc0387..be4dfb22 100644 --- a/clomonitor-linter/Dockerfile +++ b/clomonitor-linter/Dockerfile @@ -1,5 +1,5 @@ # Build linter -FROM rust:1-alpine3.22 as builder +FROM rust:1-alpine3.23 as builder RUN apk --no-cache add musl-dev perl make WORKDIR /clomonitor COPY Cargo.* ./ @@ -24,7 +24,7 @@ RUN make install RUN make build # Final stage -FROM alpine:3.22.2 +FROM alpine:3.23.3 RUN addgroup -S clomonitor && adduser -S clomonitor -G clomonitor USER clomonitor WORKDIR /home/clomonitor diff --git a/clomonitor-notifier/Cargo.toml b/clomonitor-notifier/Cargo.toml index 5c9780d5..5b7eed7b 100644 --- a/clomonitor-notifier/Cargo.toml +++ b/clomonitor-notifier/Cargo.toml @@ -8,6 +8,7 @@ rust-version.workspace = true [dependencies] anyhow = { workspace = true } +askama = { workspace = true } async-trait = { workspace = true } clap = { workspace = true } config = { workspace = true } @@ -17,7 +18,6 @@ octorust = { workspace = true } openssl = { workspace = true } postgres-openssl = { workspace = true } regex = { workspace = true } -rinja = { workspace = true } tokio = { workspace = true } tokio-postgres = { workspace = true } tracing = { workspace = true } diff --git a/clomonitor-notifier/Dockerfile b/clomonitor-notifier/Dockerfile index 38e79ece..a600d15b 100644 --- a/clomonitor-notifier/Dockerfile +++ b/clomonitor-notifier/Dockerfile @@ -1,5 +1,5 @@ # Build notifier -FROM rust:1-alpine3.22 as builder +FROM rust:1-alpine3.23 as builder RUN apk --no-cache add musl-dev perl make WORKDIR /clomonitor COPY Cargo.* ./ @@ -14,7 +14,7 @@ WORKDIR /clomonitor/clomonitor-notifier RUN cargo build --release # Final stage -FROM alpine:3.22.2 +FROM alpine:3.23.3 RUN apk --no-cache add ca-certificates git && addgroup -S clomonitor && adduser -S clomonitor -G clomonitor USER clomonitor WORKDIR /home/clomonitor diff --git a/clomonitor-notifier/src/notifier.rs b/clomonitor-notifier/src/notifier.rs index a23f2322..e4df66db 100644 --- a/clomonitor-notifier/src/notifier.rs +++ b/clomonitor-notifier/src/notifier.rs @@ -1,9 +1,9 @@ use std::{sync::LazyLock, time::Duration}; use anyhow::{Result, format_err}; +use askama::Template; use config::Config; use regex::Regex; -use rinja::Template; use tokio::time::sleep; use tracing::{error, info, instrument}; use uuid::Uuid; @@ -66,47 +66,49 @@ async fn process_annual_review_notifications(cfg: &Config, db: DynDB, gh: DynGH) // Send notification let issue_number; let mut comment_id = None; - if n.issue_number.is_none() || is_issue_closed { - // Create new issue - let body = tmpl::AnnualReviewDue {}.render().unwrap(); + if let Some(existing_issue_number) = n.issue_number + && !is_issue_closed + { + // Post comment in existing issue + issue_number = Some(existing_issue_number); + let body = tmpl::AnnualReviewDueReminder {}.render().unwrap(); match gh - .create_issue(&owner, &repo, ANNUAL_REVIEW_DUE_TITLE, &body) + .create_comment(&owner, &repo, existing_issue_number, &body) .await { Ok(v) => { - issue_number = Some(v); + comment_id = Some(v); info!( ?owner, ?repo, ?issue_number, - "annual review due notification sent" + ?comment_id, + "annual review due reminder notification sent" ); } Err(err) => { - error!(?err, ?owner, ?repo, "error creating issue"); + error!(?err, ?owner, ?repo, ?issue_number, "error creating comment"); continue; } } } else { - // Post comment in existing issue - issue_number = Some(n.issue_number.unwrap()); - let body = tmpl::AnnualReviewDueReminder {}.render().unwrap(); + // Create new issue + let body = tmpl::AnnualReviewDue {}.render().unwrap(); match gh - .create_comment(&owner, &repo, issue_number.unwrap(), &body) + .create_issue(&owner, &repo, ANNUAL_REVIEW_DUE_TITLE, &body) .await { Ok(v) => { - comment_id = Some(v); + issue_number = Some(v); info!( ?owner, ?repo, ?issue_number, - ?comment_id, - "annual review due reminder notification sent" + "annual review due notification sent" ); } Err(err) => { - error!(?err, ?owner, ?repo, ?issue_number, "error creating comment"); + error!(?err, ?owner, ?repo, "error creating issue"); continue; } } diff --git a/clomonitor-notifier/src/tmpl.rs b/clomonitor-notifier/src/tmpl.rs index 58fc34fc..5ec79707 100644 --- a/clomonitor-notifier/src/tmpl.rs +++ b/clomonitor-notifier/src/tmpl.rs @@ -1,4 +1,4 @@ -use rinja::Template; +use askama::Template; /// Template for the annual review due comment. #[derive(Template)] diff --git a/clomonitor-registrar/Dockerfile b/clomonitor-registrar/Dockerfile index 190f3985..66415957 100644 --- a/clomonitor-registrar/Dockerfile +++ b/clomonitor-registrar/Dockerfile @@ -1,5 +1,5 @@ # Build registrar -FROM rust:1-alpine3.22 as builder +FROM rust:1-alpine3.23 as builder RUN apk --no-cache add musl-dev perl make WORKDIR /clomonitor COPY Cargo.* ./ @@ -14,7 +14,7 @@ WORKDIR /clomonitor/clomonitor-registrar RUN cargo build --release # Final stage -FROM alpine:3.22.2 +FROM alpine:3.23.3 RUN apk --no-cache add ca-certificates git && addgroup -S clomonitor && adduser -S clomonitor -G clomonitor USER clomonitor WORKDIR /home/clomonitor diff --git a/clomonitor-tracker/Dockerfile b/clomonitor-tracker/Dockerfile index 97602048..218a26a4 100644 --- a/clomonitor-tracker/Dockerfile +++ b/clomonitor-tracker/Dockerfile @@ -1,5 +1,5 @@ # Build tracker -FROM rust:1-alpine3.22 as builder +FROM rust:1-alpine3.23 as builder RUN apk --no-cache add musl-dev perl make WORKDIR /clomonitor COPY Cargo.* ./ @@ -24,7 +24,7 @@ RUN make install RUN make build # Final stage -FROM alpine:3.22.2 +FROM alpine:3.23.3 RUN apk --no-cache add ca-certificates git && addgroup -S clomonitor && adduser -S clomonitor -G clomonitor USER clomonitor WORKDIR /home/clomonitor diff --git a/database/migrations/Dockerfile b/database/migrations/Dockerfile index 7d273531..01f7d706 100644 --- a/database/migrations/Dockerfile +++ b/database/migrations/Dockerfile @@ -1,10 +1,10 @@ # Build tern -FROM golang:1.25.3-alpine3.22 AS tern +FROM golang:1.26.1-alpine3.23 AS tern RUN apk --no-cache add git RUN go install github.com/jackc/tern@latest # Build final image -FROM alpine:3.22.2 +FROM alpine:3.23.3 RUN addgroup -S clomonitor && adduser -S clomonitor -G clomonitor USER clomonitor WORKDIR /home/clomonitor diff --git a/deny.toml b/deny.toml index df48ddb4..fb3bedcc 100644 --- a/deny.toml +++ b/deny.toml @@ -17,5 +17,4 @@ unknown-git = "deny" required-git-spec = "tag" allow-git = [ "https://github.com/graphql-rust/graphql-client.git" - "https://github.com/rinja-rs/rinja", ]