Update Rust & Java dependencies (#4540)

* Update Java dependencies

* Baselint lint fixes

* Update Rust version

* Update actix-files 0.6.6 -> 0.6.8

* Update actix-http 3.11.0 -> 3.11.2

* Update actix-rt 2.10.0 -> 2.11.0

* Update async_zip 0.0.17 -> 0.0.18

* Update async-compression 0.4.27 -> 0.4.32

* Update async-trait 0.1.88 -> 0.1.89

* Update async-tungstenite 0.30.0 -> 0.31.0

* Update const_format 0.2.34 -> 0.2.35

* Update bitflags 2.9.1 -> 2.9.4

* Update bytemuck 1.23.1 -> 1.24.0

* Update typed-path 0.11.0 -> 0.12.0

* Update chrono 0.4.41 -> 0.4.42

* Update cidre 0.11.2 -> 0.11.3

* Update clap 4.5.43 -> 4.5.48

* Update data-url 0.3.1 -> 0.3.2

* Update discord-rich-presence 0.2.5 -> 1.0.0

* Update enumset 1.1.7 -> 1.1.10

* Update flate2 1.1.2 -> 1.1.4

* Update hyper 1.6.0 -> 1.7.0

* Update hyper-util 0.1.16 -> 0.1.17

* Update iana-time-zone 0.1.63 -> 0.1.64

* Update image 0.25.6 -> 0.25.8

* Update indexmap 2.10.0 -> 2.11.4

* Update json-patch 4.0.0 -> 4.1.0

* Update meilisearch-sdk 0.29.1 -> 0.30.0

* Update clickhouse 0.13.3 -> 0.14.0

* Fix some prettier things

* Update lettre 0.11.18 -> 0.11.19

* Update phf 0.12.1 -> 0.13.1

* Update png 0.17.16 -> 0.18.0

* Update quick-xml 0.38.1 -> 0.38.3

* Update redis 0.32.4 -> 0.32.7

* Update regex 1.11.1 -> 1.11.3

* Update reqwest 0.12.22 -> 0.12.23

* Update rust_decimal 1.37.2 -> 1.38.0

* Update rust-s3 0.35.1 -> 0.37.0

* Update serde 1.0.219 -> 1.0.228

* Update serde_bytes 0.11.17 -> 0.11.19

* Update serde_json 1.0.142 -> 1.0.145

* Update serde_with 3.14.0 -> 3.15.0

* Update sentry 0.42.0 -> 0.45.0 and sentry-actix 0.42.0 -> 0.45.0

* Update spdx 0.10.9 -> 0.12.0

* Update sysinfo 0.36.1 -> 0.37.2

* Update tauri 2.7.0 -> 2.8.5

* Update tauri-build 2.3.1 -> 2.4.1

* Update tauri-plugin-deep-link 2.4.1 -> 2.4.3

* Update tauri-plugin-dialog 2.3.2 -> 2.4.0

* Update tauri-plugin-http 2.5.1 -> 2.5.2

* Update tauri-plugin-opener 2.4.0 -> 2.5.0

* Update tauri-plugin-os 2.3.0 -> 2.3.1

* Update tauri-plugin-single-instance 2.3.2 -> 2.3.4

* Update tempfile 3.20.0 -> 3.23.0

* Update thiserror 2.0.12 -> 2.0.17

* Update tracing-subscriber 0.3.19 -> 0.3.20

* Update url 2.5.4 -> 2.5.7

* Update uuid 1.17.0 -> 1.18.1

* Update webp 0.3.0 -> 0.3.1

* Update whoami 1.6.0 -> 1.6.1

* Note that windows and windows-core can't be updated yet

* Update zbus 5.9.0 -> 5.11.0

* Update zip 4.3.0 -> 6.0.0

* Fix build

* Enforce rustls crypto provider

* Refresh Cargo.lock

* Update transitive dependencies

* Bump Gradle usage to Java 17

* Use ubuntu-latest consistently across workflows

* Fix lint

* Fix lint in Rust

* Update native-dialog 0.9.0 -> 0.9.2

* Update regex 1.11.3 -> 1.12.2

* Update reqwest 0.12.23 -> 0.12.24

* Update rust_decimal 1.38.0 -> 1.39.0

* Remaining lock-only updates

* chore: move TLS impl of some other dependencies to aws-lc-rs

The AWS bloatware "virus" expands by sheer force of widespread adoption
by the ecosystem... 🫣

* chore(fmt): run Tombi

---------

Co-authored-by: Alejandro González <me@alegon.dev>
This commit is contained in:
Josiah Glosson
2025-10-15 14:45:47 -06:00
committed by GitHub
parent 75e3994c6e
commit b23d3e674f
35 changed files with 630 additions and 583 deletions

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1
FROM rust:1.89.0 AS build
FROM rust:1.90.0 AS build
WORKDIR /usr/src/daedalus
COPY . .

View File

@@ -5,7 +5,7 @@ description: Guide for contributing to Modrinth's backend
This project is part of our [monorepo](https://github.com/modrinth/code). You can find it in the `apps/labrinth` directory. The instructions below assume that you have switched your working directory to the `apps/labrinth` subdirectory.
[labrinth] is the Rust-based backend serving Modrinth's API with the help of the [Actix](https://actix.rs) framework. To get started with a labrinth instance, install docker, docker-compose (which comes with Docker), and [Rust]. The initial startup can be done simply with the command `docker-compose up`, or with `docker compose up` (Compose V2 and later). That will deploy a PostgreSQL database on port 5432, a MeiliSearch instance on port 7700, and a [Mailpit](https://mailpit.axllent.org/) SMTP server on port 1025, with a web UI to inspect sent emails on port 8025. To run the API itself, you'll need to use the `cargo run` command, this will deploy the API on port 8000.
[labrinth] is the Rust-based backend serving Modrinth's API with the help of the [Actix](https://actix.rs) framework. To get started with a labrinth instance, install docker, docker-compose (which comes with Docker), cmake, and [Rust]. The initial startup can be done simply with the command `docker-compose up`, or with `docker compose up` (Compose V2 and later). That will deploy a PostgreSQL database on port 5432, a MeiliSearch instance on port 7700, and a [Mailpit](https://mailpit.axllent.org/) SMTP server on port 1025, with a web UI to inspect sent emails on port 8025. To run the API itself, you'll need to use the `cargo run` command, this will deploy the API on port 8000.
To get a basic configuration, copy the `.env.local` file to `.env`. Now, you'll have to install the sqlx CLI, which can be done with cargo:

View File

@@ -2,9 +2,8 @@
::backdrop,
:root[data-theme='light'],
[data-theme='light'] ::backdrop {
--sl-font-system:
Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell,
Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
--sl-font-system: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto,
Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
--sl-color-white: var(--color-contrast); /* “white” */
--sl-color-gray-1: var(--color-base);

View File

@@ -113,6 +113,10 @@ migrations/20250725230041_reports-closed-status-index.sql
migrations/20250727184120_user-newsletter-subscription-column.sql
migrations/20250804221014_users-redeemals.sql
migrations/20250805001654_product-prices-public.sql
migrations/20250823233518_user-compliance.sql
migrations/20250902133943_notification-extension.sql
migrations/20250914190749_affiliate_codes.sql
migrations/20250927120742_user_limits.sql
# Prettier reformats some of the PostgreSQL-specific COPY syntax here,
# which is very likely to break things

View File

@@ -91,6 +91,7 @@ rust_decimal = { workspace = true, features = [
] }
rust_iso3166 = { workspace = true }
rust-s3 = { workspace = true }
rustls.workspace = true
rusty-money = { workspace = true }
sentry = { workspace = true }
sentry-actix = { workspace = true }
@@ -108,7 +109,7 @@ sqlx = { workspace = true, features = [
"postgres",
"runtime-tokio",
"rust_decimal",
"tls-rustls-ring",
"tls-rustls-aws-lc-rs",
] }
tar = { workspace = true }
thiserror = { workspace = true }

View File

@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1
FROM rust:1.89.0 AS build
FROM rust:1.90.0 AS build
WORKDIR /usr/src/labrinth
COPY . .

View File

@@ -113,6 +113,10 @@ async fn main() -> std::io::Result<()> {
std::process::exit(1);
}
rustls::crypto::aws_lc_rs::default_provider()
.install_default()
.unwrap();
// DSN is from SENTRY_DSN env variable.
// Has no effect if not set.
let sentry = sentry::init(sentry::ClientOptions {

View File

@@ -66,7 +66,7 @@ impl AnalyticsQueue {
self.playtime_queue.clear();
if !playtime_queue.is_empty() {
let mut playtimes = client.insert("playtime")?;
let mut playtimes = client.insert::<Playtime>("playtime").await?;
for playtime in playtime_queue {
playtimes.write(&playtime).await?;
@@ -132,7 +132,7 @@ impl AnalyticsQueue {
.await
.map_err(DatabaseError::CacheError)?;
let mut views = client.insert("views")?;
let mut views = client.insert::<PageView>("views").await?;
for (all_views, monetized) in raw_views {
for (idx, mut view) in all_views.into_iter().enumerate() {
@@ -200,7 +200,7 @@ impl AnalyticsQueue {
.map_err(DatabaseError::CacheError)?;
let mut transaction = pool.begin().await?;
let mut downloads = client.insert("downloads")?;
let mut downloads = client.insert::<Download>("downloads").await?;
let mut version_downloads: HashMap<i64, i32> = HashMap::new();
let mut project_downloads: HashMap<i64, i32> = HashMap::new();

View File

@@ -704,7 +704,7 @@ async fn dynamic_email_body(
.wrap_internal_err("SITE_URL is not set")?;
let site_url = site_url.trim_end_matches('/');
let url = format!("{}/_internal/templates/email/dynamic", site_url);
let url = format!("{site_url}/_internal/templates/email/dynamic");
std::str::from_utf8(
reqwest::Client::new()

View File

@@ -686,11 +686,12 @@ async fn query_clickhouse<Row>(
cx: &mut QueryClickhouseContext<'_>,
query: &str,
use_columns: &[(&str, bool)],
row_get_bucket: impl Fn(&Row) -> u64,
row_to_analytics: impl Fn(Row) -> AnalyticsData,
// I hate using the hidden type Row::Value here, but it's what next() returns, so I see no other option
row_get_bucket: impl Fn(&Row::Value<'_>) -> u64,
row_to_analytics: impl Fn(Row::Value<'_>) -> AnalyticsData,
) -> Result<(), ApiError>
where
Row: clickhouse::Row + serde::de::DeserializeOwned + std::fmt::Debug,
Row: clickhouse::RowRead + serde::de::DeserializeOwned + std::fmt::Debug,
{
let mut query = cx
.clickhouse

View File

@@ -127,6 +127,7 @@ pub async fn swap_index(
let index_name = config.get_index_name(index_name, false);
let swap_indices = SwapIndexes {
indexes: (index_name_next, index_name),
rename: None,
};
client
.swap_indexes([&swap_indices])

View File

@@ -18,7 +18,7 @@ impl super::Validator for DataPackValidator {
fn get_supported_game_versions(&self) -> SupportedGameVersions {
// Time since release of 17w43a, 2017-10-25, which introduced datapacks
SupportedGameVersions::PastDate(
DateTime::from_timestamp(1508889600, 0).unwrap(),
DateTime::from_timestamp_secs(1508889600).unwrap(),
)
}

View File

@@ -19,7 +19,7 @@ impl super::Validator for ForgeValidator {
fn get_supported_game_versions(&self) -> SupportedGameVersions {
// Time since release of 1.13, the first forge version which uses the new TOML system
SupportedGameVersions::PastDate(
DateTime::from_timestamp(1540122067, 0).unwrap(),
DateTime::from_timestamp_secs(1540122067).unwrap(),
)
}
@@ -56,8 +56,8 @@ impl super::Validator for LegacyForgeValidator {
fn get_supported_game_versions(&self) -> SupportedGameVersions {
// Times between versions 1.5.2 to 1.12.2, which all use the legacy way of defining mods
SupportedGameVersions::Range(
DateTime::from_timestamp(0, 0).unwrap(),
DateTime::from_timestamp(1540122066, 0).unwrap(),
DateTime::from_timestamp_secs(0).unwrap(),
DateTime::from_timestamp_secs(1540122066).unwrap(),
)
}

View File

@@ -18,7 +18,7 @@ impl super::Validator for QuiltValidator {
fn get_supported_game_versions(&self) -> SupportedGameVersions {
SupportedGameVersions::PastDate(
DateTime::from_timestamp(1646070100, 0).unwrap(),
DateTime::from_timestamp_secs(1646070100).unwrap(),
)
}

View File

@@ -20,7 +20,7 @@ impl super::Validator for PackValidator {
fn get_supported_game_versions(&self) -> SupportedGameVersions {
// Time since release of 13w24a which replaced texture packs with resource packs
SupportedGameVersions::PastDate(
DateTime::from_timestamp(1371137542, 0).unwrap(),
DateTime::from_timestamp_secs(1371137542).unwrap(),
)
}
@@ -59,8 +59,8 @@ impl super::Validator for TexturePackValidator {
fn get_supported_game_versions(&self) -> SupportedGameVersions {
// a1.2.2a to 13w23b
SupportedGameVersions::Range(
DateTime::from_timestamp(1289339999, 0).unwrap(),
DateTime::from_timestamp(1370651522, 0).unwrap(),
DateTime::from_timestamp_secs(1289339999).unwrap(),
DateTime::from_timestamp_secs(1370651522).unwrap(),
)
}

View File

@@ -27,6 +27,8 @@ pub async fn setup(db: &database::TemporaryDatabase) -> LabrinthConfig {
println!("Some environment variables are missing!");
}
let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
let pool = db.pool.clone();
let ro_pool = db.ro_pool.clone();
let redis_pool = db.redis_pool.clone();